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

Fehler mit Dimensionen in einem Simulink-Modell

 

jersey
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 09.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2018, 13:22     Titel: Fehler mit Dimensionen in einem Simulink-Modell
  Antworten mit Zitat      
Moin,

erneut habe ich eine Frage, hoffentlich kann mir jemand helfen, da ich seit gestern früh daran festhänge und nahezu verzweifle.

Ich habe ein Simulink-Modell in dem ich in einem Matlab-Function Block in eine neue Matrix alle Zeilen aus einer anderen Matrix schreibe, die nicht = 0 sind.

Code:
function p_s_Stange_zz_ben = fcn(p_s_Stange_zz)

[row,~] = find(p_s_Stange_zz(:,2));

p_s_Stange_zz_ben = p_s_Stange_zz(row,:);
 


Vorher habe ich eine Matrix mit den Dimensionen 3501x2. Diese sollte sich durch den oben genannten function-Block verkleinern, aber immer noch bei zwei Spalten bleiben.

Wenn ich die nachfolgenden Blocke auskommentiere sehe ich als Eingang in den Function-Block aus, dass der Eingang die Dimension 3501x2 hat. Fehlermeldung sieht folgendermaßen aus:

Zitat:
Data 'p_s_Stange_zz_ben' is inferred as a variable size matrix, while its properties in the Model Explorer specify its size as inherited or fixed. Please check the 'Variable Size' check box and specify the upper bounds in the size field.

Wenn ich nun in die check box gehe und die "Variable Size" anhake kommt folgende Fehlermeldung:

Zitat:

Output 'p_s_Stange_zz_ben' has variable size but the upper bound is not specified; explicit upper bound must be provided.


Ich werde aus beiden Fehlermeldungen nicht schlau, aber irgendwie bekommt es Maltab/Simulink nicht hin die Ausgangsdimension zu bestimmen, da hinter dem Block ein "?" ist. Das Bild davon habe ich in den Anhang gepackt.

Komisch ist auch, dass wenn ich die anderen Blöcke ein kommentiere (an denen sollten keine Fehler auftauchen, da diese vor der Änderung genauso funktioniert haben), sagt mir Matlab folgende Fehlermeldung:

Zitat:
Index expression out of bounds. Attempted to access element 2. The valid range is 1-1.

Dies liegt daran, dass Simulink nun p_s_Stange_zz als 1x1 Matrix annimmt, was ich überhaupt nicht mehr nachvollziehen kann. Im vorherigen function-Block steht folgendes.

Code:
function p_s_Stange_zz = fcn(p_B, p_B_int,x_int,p_s_Stange_int)

p_s_Stange_zz = zeros(length(p_B_int),2);

[~, Spalte] = min(abs(p_B-p_B_int(1,:)));

p_s_Stange_zz(:,1) = x_int(:,Spalte);

p_s_Stange_zz(:,2) = p_s_Stange_int(:,Spalte);


Und dort definiere ich eindeutig die Größe von "p_s_Stange_zz".

Kann mir irgendwer einen Tipp geben, da ich hier langsam verzweifle.

Viele Grüße

jersey

Matrixgrößenproblem.jpg
 Beschreibung:

Download
 Dateiname:  Matrixgrößenproblem.jpg
 Dateigröße:  84.31 KB
 Heruntergeladen:  309 mal
Matrixgrößenproblem_2.jpg
 Beschreibung:

Download
 Dateiname:  Matrixgrößenproblem_2.jpg
 Dateigröße:  79.75 KB
 Heruntergeladen:  290 mal
Private Nachricht senden Benutzer-Profile anzeigen


ol1v3r
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 06.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 08:14     Titel:
  Antworten mit Zitat      
Hilft dir das hier weiter?

https://www.mathworks.com/matlabcen.....rom-matlab-function-block
_________________

Viele Grüße
Ol1v3r
Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
jersey
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 09.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 11:38     Titel:
  Antworten mit Zitat      
Moin,

vielen Dank für die Antwort. Diesen Artikel hatte ich gestern auch noch gefunden, der hat mich dann auf die richtige Lösung geleitet

Nach ewigen rumprobieren habe ich dann mein Problem auch verstanden: Dadurch, dass ich eine Variable weiterleite, die in der Größe variiert, muss ich alle Eingänge und Ausgänge mit den größenvariablen Variablen auch so deklarieren. Dann musste ich noch noch den Ausgang als diskret angeben.

Da mir die Simulation dann zu lange gedauert hat, habe ich das Problem nun so gelöst, dass ich alle meine Matlab-function-Blöcke in einen einzelnen überführt habe. Das ist dann zwar nicht so übersichtlich, aber damit entfällt der diskrete Ausgang und die Simulation funktioniert wieder einwandfrei.

Viele Grüße

jersey
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.