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

Brace indexing is not supported for variables of this type

 

Akinh0
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 29.06.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2022, 18:46     Titel: Brace indexing is not supported for variables of this type
  Antworten mit Zitat      
Hallo Leute,
ich muss für meine Bachelorarbeit ein experiment auswerten. Hierzu hab ich ein sehr kompliziertes MatLab-Skript von meinem Prof. bekommen, welches auf ganz viele "functions" zugreift und dann mehrere Plots erstellt. Dieses Skript erstellt einen Datensatz, wo mehrere einträge für eine Spannung (sig) und eine Dehnung (eps) zu finden sind. Ich soll den Abstand zwischen den einträgen aus dem Datensatz zu den Musterlösungen sig_fem bzw eps_fem berechnen (siehe Code). die Gleichung für distance ist so richtig wie sie da steht also auch mit den geschweiften Klammern um das "q".


Code:
 distance = 0;
    sig_fem = [2000, 0 0]';
   eps_fem= [0.0087,-0.0037, 0.0000]';
    for q = 1 : nqp
        distance = distance + 0.5*(eps_list{q} - eps_fem)'*EVoigt2D*(eps_list{q} - eps_fem) + 0.5*(sig_list{q} - sig_fem)'*EVoigt2D*(sig_list{q} - sig_fem);



in einer "Function" sind die Variablen wie folgt geschrieben.

Code:

D_sample_sig_e = D_sample_e;
D_sample_eps_e = D_sample_e;

sp_eps = D_sample_eps_e(q);
sp_sig = D_sample_sig_e(q);

D_sample_eps_e(q) = spp1_eps;
D_sample_sig_e(q) = spp1_sig;

 


in den beiden letzen Zeilen muss die linke Seite statt D_sample_eps_e(q) zu eps.list{q} umgeformt werden und D_sample_sig_e(q) zu sig.list{q}. (Das hat mein Prof so vorgegeben)


Wenn ich jetzt nur die letzten beiden Zeilen ändere kriege ich die Fehlermeldung:

"Brace indexing is not supported for variables of this type."

Was muss ich noch ändern damit ich die Gleichung für Distance so benutzen kann?

Ich hoffe ich konnte das Problem schildern.

Vielen Dank schon mal im Voraus für die Hilfe,

Gruß Akin
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

eps.list und sig.list sollen also anscheinend Cell Arrays werden. Die Fehlermeldung legt nahe, dass mindestens eins von beiden mit einem anderen Datentyp belegt ist. Das verursacht den Fehlermeldung.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Akinh0
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 29.06.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2022, 16:31     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank erst einmal für die schnelle Antwort. Ich habe den fehler gefunden und behoben.

Jetzt habe ich aber ein anderes Problem.
Ich möchte das Skript mehrmals ausführen und die Variable "distance" in einer Liste abspeichern.
Also zB: Skript wird insgesamt 3 mal ausgeführt. Dann möchte ich alle drei Ergebnisse für distance in einer liste sehen.

Könnte mir jemand dabei helfen?

Gruß Akin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.08.2022, 16:56     Titel:
  Antworten mit Zitat      
Hallo,

wiederholtes Ausführen von Skripten ist keine sehr gute Idee. Dafür sind an sich Funktionen viel besser geeignet.
Generell ist eine Möglichkeit für Listen Cell Arrays.
Initialisierung:
Code:
distance = { };

Neue Ergebnisse anhängen:
Code:
distance{end+1} = % neuer Inhalt;


Viele Unis haben eine "Flatrate" für https://matlabacademy.mathworks.com/. Ob das bei deiner Uni zutrifft, kann ich ggf. für dich in Erfahrung bringen. "MATLAB Fundamentals" und weiterführend "MATLAB Programming Techniques" könnten dir helfen, MATLAB besser zu nutzen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Akinh0
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 29.06.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2022, 18:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

also bei meiner Aufgabe geht es darum ein experiment auszuwerten und ich habe quasi eine Funktion geschrieben, die das skript meine Profs mehrmals ausführt. Das sieht ungefähr so aus:

Code:
%
function [distance,eps_list,sig_list] = akin(sig_list,eps_list,EVoigt2D)

nCalls = 4;
for k=1:nCalls
    skript_prof;
    getdistance(sig_list,eps_list,EVoigt2D);
 
   
end

end



und die funktion getdistance sieht so aus.

Code:
%
function [distance] = getdistance(sig_list,eps_list,EVoigt2D)

    distance = 0;
    sig_fem = [2000, 0 0]';
   eps_fem= [0.0087,-0.0037, 0.0000]';
    for q = 1 : 4
        distance = distance + 0.5*(eps_list{q} - eps_fem)'*EVoigt2D*(eps_list{q} - eps_fem) + 0.5*(sig_list{q} - sig_fem)'*EVoigt2D*(sig_list{q} - sig_fem);
    end
end
 



Meintest du das so mit Funktionen oder sollte ich das Skript anders ausführen?

Das mit den Cell-Arrays hört sich schon mal gut an. Ist es möglich bei den Cell-Arrays auch einezweite Variable einzubinden ?

Also noch mal zum Verstädnis:

in dem Skript von meinem prof ist eine Variable die "D_sample" heißt und diese Variable greift sich aus einem Datensatz zufällig 4 Werte und berechnet dann ganz viele andere sache und halt durch meine funktion zusätzlich noch "distance".

Ich möchte gerne den Versuch mehrmals laufen lassen und am Ende sehen zu welchem "D_sample" welches "distance" ausgerechnet wurde.

Ich hoffe ich konnte dir mein Problem schildern.
Gruß Akin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.08.2022, 22:41     Titel:
  Antworten mit Zitat      
Hallo,

es ist schwer zu erahnen, welche Variablen das Skript nun erzeugt.

Zitat:
Meintest du das so mit Funktionen oder sollte ich das Skript anders ausführen?

Geschickt wäre es vor allem, aus dem Skript eine Funktion zu machen.

Die Funktion akin ist momentan noch wenig sinnvoll. distance wird anscheinend nicht belegt, und das Ergebnis des Aufrufs von getdistance wird nicht zugewiesen. Sinnvoll wäre z.B.
Code:
distance{k} = getdistance(...)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Akinh0
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 29.06.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2022, 20:19     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Hilfe, ich habe es jetzt so hinbekommen Very Happy

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