WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Vektorgröße in Matlab Funktions Block festlegen

 

Raketenmaid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 28.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2013, 15:40     Titel: Vektorgröße in Matlab Funktions Block festlegen
  Antworten mit Zitat      
Matlab/Simulink macht mir mal wieder Probleme, die ich nicht verstehe.

Ich möchte einen Vektor bzw. dessen Größe in einem Matlab Funktionsblock festlegen. Dies mache ich über die Funktion zeros

vektor = zeros(1,n)

n ist hierbei die Länge, die ich über einen Input Port einlese. Matlab macht nun beim Partsen lauter Sperenzchen:

Code:
Errors occurred during parsing of MATLAB function '...(#500)


Code Directory :
     "...\slprj\_sfprj\prog\_self\sfun\src"

Machine (#20): "prog"  Target : "sfun"


Chart  (#500):

.
Code generation failed Errors occurred during parsing of MATLAB function


Error using progr (line 90)
Errors occurred during parsing of MATLAB function
'...'(#500)
 


Also nicht wirklich hilfreich.

Die direkte Methode, die sonst immer geht (vektor(1:n) = 0) geht leider auch nicht. Mpf!
Private Nachricht senden Benutzer-Profile anzeigen


Tobias.S
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 15.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2013, 20:17     Titel:
  Antworten mit Zitat      
Hi,

Simulink unterstützt keine veränderlichen Vektorlängen. Du musst quasi eine konstante Vektorlänge einstellen. Unter Umständen nutzt du dann nur den Teil, der von 1:n geht.

Gruß Tobias
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2013, 07:20     Titel:
  Antworten mit Zitat      
Willst du die Vektorgröße zur Laufzeit ändern oder nur vor Simulationsbeginn einfach änderbar lassen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 19.02.2013, 08:22     Titel:
  Antworten mit Zitat      
Ich habe folgendes mehrfach per PN an "Raketenmaid" verschicken wollen, aber es bleibt immer im Postausgang. Daher packe ich es in diesen Thread, sorry:

Zitat:
Hallo Raketenmaid, nicht nur die aktuelle Frage, sondern auch die vergangenen Fragestellungen lassen mich vermuten dass es hier um eine Masterarbeit in der Automobilindustrie geht. Wie ist den die Betreuung geregelt, bzw. die Zusammenarbeit mit MathWorks? Nutzen Sie den Technischen Support oder andere MathWorks Ressourcen?


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Raketenmaid
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 28.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2013, 11:12     Titel:
  Antworten mit Zitat      
Die Vektorgröße ist zu Beginn der Simulation festgelegt, also wird sie im Laufe einer Simulation nicht geändert. Aber sie kann halt von einer Simulation zur anderen variieren.

Mittlerweile habe ich eine Lösung gefunden, die das Problem behebt, die aber alles andere als elegant ist. Warum ich nicht direkt die zeros-Funktion mit einer übergebenen Dimension verwenden kann, weiß der Teufel.

Der Code schaut jetzt wie folgt aus:

Code:
function y = fcn(so, m)
%#codegen

[nt,~] = size(so);

es = zeros(nt,1);

for i = 1:nt
    if m >= so(i,1) & m < so(i,2)
        es(i) = 1;
    else
        es(i) = 0;
    end
end

y = es;


Eigentlich wollte ich die Zeilenanzahl von der so-Matrix (Variable nt) direkt übergeben (sie wäre dann als eigenständige Variable in der Übergabeklammer der ersten Zeile erschienen) und in der zweiten Zeile (zeros) verwenden, weil diese vor Starten der Simulation bekannt ist. Aus einem mir absolut unverstandlichen Grund lässt dies Simulink nicht zu. Vermutlich sollte ich tatsächlich den Support von MathWorks kontaktieren, weil ich mittlerweile eine Art Bug vermute oder eine Inkonsistenz oder wie auch immer man das nennen will.

Ein Kollege fand das Verhalten von Simulink an dieser Stelle auch nicht nachvollziehbar.

Mein ursprünglicher Code sah so aus:

Code:
function y = fcn(nt, so, m)
%#codegen

es = zeros(nt,1);

for i = 1:nt
    if m >= so(i,1) & m < so(i,2)
        es(i) = 1;
    else
        es(i) = 0;
    end
end

y = es;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2013, 11:26     Titel:
  Antworten mit Zitat      
Versuch mal folgendes:
Im Matlab function Block bei "Tools -> Edit Data/Ports" und dort deine Eingangsvariable "n" als Parameter setzen (standard ist Input Port). Der variable n kannst du dann in m-file bzw. matlab console die gwünschte Größe zuweisen. So sollte die zuweisung vektor = zeros(1,n) im Matlab Function Block gehen.

Vielleicht ist es das was du benötigst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.