ich habe ein GUI erstellt das mir in Abhängigkeit der Auswahl in einem Popupmenü zwischen 3 und 9 Werte berechnen soll.
Damit meine ich, wenn Value 1 im Popupmenü gewählt wird, werden 3 Werte berechnet (über einen langen Rechenweg, den ihr unten seht) und wenn man Value 2 wählt, werden beispielsweise 4 Werte berechnet.
Die berechneten Werte werden dabei immer mit "Indices" von 1 an durchnummeriert.
Da ich ziemlich wenig Ahnung von Matlab habe, wollte ich mich informieren, ob es Möglichkeiten gibt, meinen Code zu optimieren, da mein Programm so ziemlich langsam ist.
Ganz in eine Schleife einbinden funktioniert leider nicht, da ich zum Beispiel immer andere Zellen der Excel-Tabelle benötige.
Wäre nett, wenn ihr mal drüber schauen könntet und mir ein paar Anregungen gebt. So kann ich evtl. bisschen was dazu lernen. Danke!
Schönen Gruß
Thomas
Code:
value = get(pm2h, 'Value');
switch value
case1
Fax1 = (str2double(pmax1) / 10) * Ab1; % Berechnung der Axialkraft
Fax2 = (str2double(pmax2) / 10) * Ab1; % Berechnung der Axialkraft
Fax3 = (str2double(pmax3) / 10) * Ab1; % Berechnung der Axialkraft
Faxeff1 = Fax1 - str2double(Frdf); % Berechnung der effektiven Axialkraft
Faxeff2 = Fax2 - str2double(Frdf); % Berechnung der effektiven Axialkraft
Faxeff3 = Fax3 - str2double(Frdf); % Berechnung der effektiven Axialkraft
mit dem Profiler kannst du analysieren, was deinen Code langsam macht.
Ich vermute, dass es die xlsread/xlswrite-Befehle sind, da bei jedem xlsread/xlswrite-Befehl die Datei im Grunde mit Excel geöffnet und wieder geschlossen wird (und wir wissen alle, wie lange das dauert. Du solltest daher versuchen, diese Befehle nach Möglichkeit zusammenzufassen, z.B. statt
schreiben.
Eine andere Frage wäre, ob die Daten jedes Mal nach Excel geschrieben / von dort geholt werden müssen. Zum Zwischenspeichern wären .mat-Dateien deutlich besser geeignet.
Wenn du die Daten nur innerhalb deines Programmes brauchst, sollten sie überhaupt nicht in Dateien geschrieben werden, sondern mit setappdata/getappdata mit den GUI-Elementen verknüpft werden.
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 ;)
Deinen Vorschlag habe ich gleich ausprobiert, jedoch scheint sich da ein Fehler eingeschlichen zu haben. Da er nun alle Zellen von B2 bis G2 mit dem Wert "M1" überschreibt. Die anderen Werte (M2, pmax_2, usw.) werden nicht benutzt.
Ansonsten gefiele mir diese Lösung schon viel besser.
Wahrscheinlich gehts noch besser, aber dazu muss ich erstmal schildern wie das Programm arbeiten soll.
Das Schreiben und Lesen in und aus Excel können für den fähigen Programmierer sicher vermieden werden.
In Excel werden eigentlich nur die Daten vorbereitet, welche dann im Diagramm geplottet werden sollen. Leider bin ich unfähig dies gleich in Matlab aufzubereiten. Im Anhang habe ich mal ein Bild von der ExcelDatei angefügt.
Ist bestimmt ganz einfach, wenn man sich damit auskennt, denn jeder Plot hat eigentlich nur drei x-Werte und 3 y-werte.
Wenn du die Datei am Anfang einmal vorbereiten musst, dann alle Variablen wie gewünscht definieren und dann wie oben speichern.
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 ;)
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.