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

Embeded Matlab Function: Problem bei Zuweisung eines Wertes

 

Ahnyx
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 30.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2015, 15:50     Titel: Embeded Matlab Function: Problem bei Zuweisung eines Wertes
  Antworten mit Zitat      
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 Confused]).

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;
 


Falls mir jemand weiterhelfen kann wäre ich sehr dankbar!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.07.2015, 17:02     Titel:
  Antworten mit Zitat      
Hallo,

ein reproduzierbares Beispiel wäre hilfreich.
Was ist der Wert von i?
Wie wurde hit_mark_max vorbelegt?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ahnyx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 30.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2015, 17:42     Titel:
  Antworten mit Zitat      
Hallo,

hit_mark_max geht aus Berechnungen davor hervor und ist in diesem Fall [67 76]'. hit_mark_max wurde auch am anfang intialisiert
Code:
hit_mark_max=zeros(number_objects,1);
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.

Ich hoffe ich hab es verständlich erklärt.

Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.07.2015, 17:53     Titel:
  Antworten mit Zitat      
Hallo,

wie gesagt:
Zitat:
ein reproduzierbares Beispiel wäre hilfreich.


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ahnyx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 30.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2015, 18:27     Titel:
  Antworten mit Zitat      
Hallo Smile,

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.

Code:

hit_mark_max_find=find(mark_array(i,1:end),1,'last');
hit_mark_max(i,1)=1;
 


Aber trotzdem Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.07.2015, 18:42     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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
Code:
hit_mark_max_find = 1;


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ahnyx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 30.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2015, 19:11     Titel:
  Antworten mit Zitat      
Hallo,

mit hit_mark_max_find = 1; davor kommt die gleiche Meldung. Ich werde morgen ein reproduzierbares Beispiel posten.

Danke nochmals und schönen Abend!
Private Nachricht senden Benutzer-Profile anzeigen
 
Ahnyx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 30.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2015, 13:35     Titel:
  Antworten mit Zitat      
Hallo,

ich verusche es mal zu erklären

delta_phi=0.25; FOV=56;

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
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.07.2015, 15:09     Titel:
  Antworten mit Zitat      
Hallo,

hänge doch bitte das Modell an und stelle benötigte (Beispiel-) Daten zur Verfügung. Das würde es für mich erheblich vereinfachen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ahnyx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 30.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2015, 15:28     Titel:
  Antworten mit Zitat      
Hallo,

hier das Modell (als .slx und .mdl) mit der hit.mat Datei. Einfach hit.mat in den Workspace alden,dann sollte es funktionieren.

Danke! Gruß

modell_1.mdl
 Beschreibung:

Download
 Dateiname:  modell_1.mdl
 Dateigröße:  35.94 KB
 Heruntergeladen:  412 mal
modell_1.slx
 Beschreibung:

Download
 Dateiname:  modell_1.slx
 Dateigröße:  13.78 KB
 Heruntergeladen:  381 mal
hit.mat
 Beschreibung:

Download
 Dateiname:  hit.mat
 Dateigröße:  275 Bytes
 Heruntergeladen:  401 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.07.2015, 15:57     Titel:
  Antworten mit Zitat      
Hallo,

wenn du statt
Code:
hit_mark_max(i,1) = ...

folgendes schreibst:
Code:
hit_mark_max(i)

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.

Grüße,
Harald

modell_1.mdl
 Beschreibung:

Download
 Dateiname:  modell_1.mdl
 Dateigröße:  34.68 KB
 Heruntergeladen:  413 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Ahnyx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 30.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2015, 16:03     Titel:
  Antworten mit Zitat      
Hallo,

danke!!! Es scheint zu funktionieren Very Happy Wieder was dazu gelernt.

Nochmals Danke!!

Gruß
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.