Verfasst am: 25.07.2015, 15:50
Titel: Embeded Matlab Function: Problem bei Zuweisung eines Wertes
Hallo Leute,
vielleicht weiß einer von euch was das Problem sein könnte. Und zwar möchte ich in der Embedded Matlab Function ausgehend von der find() Funktion mir einen bestimmten Wert ermitteln und den dann in ein anderes Arrays speichern, aber leider bekomme ich eine Fehlermeldung die ich nicht ganz nachvollziehen kann.
Fehlermeldung: Subscripted assignment dimension mismatch (size [1 x 1] ~= size [1 x ]).
Es wird doch nur eine Zahl das aus der find() Funktion ermittelt wird dem Array "hit_mark_max" an der stelle (j,1) zugewiesen, daher sollte es doch keine Dimensions Probleme geben. Im Matlab ohne Simulink(Embbeded Matlab Function) funktioniert es ganz normal.
Function 'Raytracing Targets' (#24.10990.11025), line 230, column 17:
"hit_mark_max(i,1)=hit_mark_max_find"
Ein kurzer Auszug:
Code:
hit_mark_max_find=find(mark_array(i,1:end),1,'last');%Wert ist in diesem Fall 47
hit_mark_max(i,1)=hit_mark_max_find;
und "number_objects=2". Der Wert von i ist zwischen "i=1:number_objects", aber ich komme nie in den Breakpoint, da er schon die Fehlermeldung beim compilieren der Embeded Matlab Function bekommt.
mark_array ist ein Array mit [2x225] aus dem mir der letzte nonzero Wert ermittelt wird der 43 ist und nun will ich den Wert 43 in hit_mark_max(i,1) an der Stelle 1 speichern.
Aber wie gesagt es kommt die Fehlermeldung schon beim compilieren.
ein reproduzierbares Beispiel ist ein bisschen schwer zu erstellen, da dies nur eine Unterpunkt und hit_mark_max, mark_array aus langen Berechnungen hervorgehen.
Merkwürdig ist es, dass es im Matlab als m-file normal funktioniert.
Wenn ich z.b: hit_mark_max einfach den Wert 1 zuweise ansatt den Wert der "find" Funktion funktioniert es normal in der Embedded Matlab Function.
ein reproduzierbares Beispiel ist ein bisschen schwer zu erstellen, da dies nur eine Unterpunkt und hit_mark_max, mark_array aus langen Berechnungen hervorgehen.
Es mag sein, dass ein reproduzierbares Beispiel für dich ein bisschen schwer zu erstellen ist. Für mich ist es aber sehr schwer, das Problem zu analysieren und eine Lösung zu finden, ohne es konkret nachstellen zu können.
Du kannst längliche Berechnungen sehr gerne doch Zufallszahlen oder ähnliches ersetzen, solange das Problem dabei dasselbe bleibt.
Zitat:
Merkwürdig ist es, dass es im Matlab als m-file normal funktioniert.
So merkwürdig ist das nicht, da aus Embedded MATLAB - Funktionen im Gegensatz zur Ausführung in MATLAB C-Code generiert werden muss.
Ein Versuch wäre: setze in der Zeile über der find-Zeile
hit(i,j) ist ein Array mit [2x225] an den Stellen (1,43:46) hat es die Werte[10.5 10.75 11 11.25] alle anderen Stellen haben den Wert null.
An den Stellen (2,47:76) hat das Array die Werte [11.50 11.75 12 12.25 12.50 12.75 13 13.25 13.50 13.75 14 14.25 14.50 14.75 15 15.25 15.50 15.75 16 16.25 16.50 16.75 17 17.25 17.50 17.75 18 18.25 18.50 18.75] und an anderen Stellen ist es auch wieder null.
Die Äußere for -Schleife zählt von 1 bis 225 bzw. wird die Variable "j" mitgezählt. Die innere for-Schliefe zählt bis zur Variable "number_objects" hoch. An der Stelle wo hit(i,j) > 0 ist wird im "mark_array" eine 1 gesetzt und dann mit der find() Funktion die Stelle ausgelesen und in das "hit_mark_min /hit_mark_max" Array gespeichert.
Ich hoffe es ist verständlich erklärt! Danke!
Code:
j=1;
mark_array=zeros(number_objects,space);
for delta_phi_r=0:delta_phi:FOV
for i=1:number_objects
if hit(i,j)==delta_phi_r
if hit(i,j)==0 && hit(i,j+1)>0
mark_array(i,j)=1;
hit_mark_max_find=find(mark_array(i,1:end),1,'last');
hit_mark_min_find=find(mark_array(i,1:end),1,'first');
hit_mark_max(i,1)=hit_mark_max_find;
hit_mark_min(i,1)=hit_mark_min_find;
end if hit(i,j)>0
mark_array(i,j)=1;
hit_mark_max_find=find(mark_array(i,1:end),1,'last');
hit_mark_min_find=find(mark_array(i,1:end),1,'first');
hit_mark_max(i,1)=hit_mark_max_find;
hit_mark_min(i,1)=hit_mark_min_find;
end end end
j=j+1;
end
läuft es bei mir (gerade mit R2012b probiert) durch.
Die Funktion muss ja kompiliert werden. Anscheinend hat es den Compiler verwirrt, dass die Variable als Vektor definiert, aber wie eine Matrix indiziert wurde.
danke!!! Es scheint zu funktionieren Wieder was dazu gelernt.
Nochmals Danke!!
Gruß
Einstellungen und Berechtigungen
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
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.