|
|
automatische Matrix mittels struct generieren |
|
Firetime |

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 20.09.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2011b
|
 |
|
|
 |
|
Verfasst am: 20.09.2014, 18:45
Titel: automatische Matrix mittels struct generieren
|
 |
|
 |
|
Hallo,
ich möchte aus Messmatrizen Variablen generieren, die aus dem Mittelwert bestimmter Bereiche dieser Matrix generiert werden.
(ich beschreibe das Vorhaben an dieser Stelle so ausführlich wie möglich):
Ich habe im Windkanal 4 vierschiedene Teilkräfte gemessen, die über die Zeit aufgetragen und in Exel abgespeichert wurden.
Aus bestimmten zeitlichen Intervallen möchte ich von diesen Kräften den Mittelwert bilden und Variablen zuweisen.
Da 3 verschiedene Strömungsgeschwindigkeiten gemessen wurde muss ich von jeder Kraft 3 Mittelwerte bilden, weshalb ich insg. 12 Variablen pro Messmatrix erhalte.
Jetzt möchte ich das Ganze automatisiert mit einem struct machen und habe dazu im Editor 2 .m Dateien erstellt:
Diese habe ich als Amean.m - Datei gespeichert und
ebenfalls als .m Datei gespeichert.
Beim Eingeben von "Amean" in das Command Window erhalte ich jetzt die Fehlermeldung
"Error using Amean (line 2)
Not enough input arguments."
Ihm scheint also in der Zeile
irgendwas zu fehlen.
Könnt ihr mir bitte helfen das Problem zu lösen? Wie ihr vllt. im 2. Code sehen könnt ist das struct nicht von mir selbst; soweit ich weiß funktioniert es in Octave problemlos, nur ist es mir bisher nicht gelungen es unter Matlab zum Laufen zu bringen.
mfg Firetime
PS.: Da ich unter verschiedenen Winkeln die Messungen durchgeführt habe werden diese bei der Vergebung der Variablennamen natürlich auch berücksichtigt.
Ich hoffe ich habe mein Anliegen verständlich formuliert.
|
|
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 20.09.2014, 19:10
Titel:
|
 |
Welche Dimensionen hat denn der Function input mat?
Folgendes BSp. ist funktionsfähig.
|
|
|
Firetime |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 20.09.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2011b
|
 |
|
|
 |
|
Verfasst am: 20.09.2014, 20:39
Titel:
|
 |
Meine Messmatrizen haben die Dimensionen 115000x12 bzw. 125000x12, sie sind also relativ groß.
edit.: auch bei deinem Beispiel erhalte ich genau diese Fehlermeldung.
Mache ich was falsch?
Wie schon vorher habe ich
als Amean.m und
also weitere .m Datei abgespeichert und im Command View "Amean"
eingegeben.
Ich hab irgendwie das Gefühl, dass ich das falsch handhabe. Habe bisher mit Matlab nie gearbeitet und kenne mich aus diesem Grund auch nicht wirklich aus...
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 20.09.2014, 20:59
Titel:
|
 |
Du musst beim Funktionsaufruf auch den Input übergeben, sprich im Command window:
Oder du drückst in deinem 2. m file wo u.a. die amean funktion ist, F5 = Run file
|
|
|
Firetime |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 20.09.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2011b
|
 |
|
|
 |
|
Verfasst am: 20.09.2014, 21:21
Titel:
|
 |
|
 |
|
Also irgendwie komme ich hier nicht ganz mit:
Im Currend Folder von Matlab sind 2 .m Dateien abgespeichert, einmal die Amean.m Datei mit dem Inhalt:
und eine andere .m Datei (hier mal test.m) mit dem Inhalt
Wenn ich jetzt im Command Window
"Amean" eingebe oder im Editor bei der Amean.m Datei auf Run klicke erhalte ich im Command Window die Fehlermeldung
"Error using Amean (line 2)
Not enough input arguments."
Wenn ich bei der test.m auf Run klicke zeigt er mit den Namen "test" einfach nur im Command Windows an
(Wobei mir jetzt auffällt, dass im Workspace einmal eine "mat"-Matrix(100x100) und eine 1x12 Matrix mit 12 Einträgen vorhanden ist, d.h. es funktioniert wenn ich das richtig sehe.
Das heißt dann also, dass ich nicht die Amean.m Datei, sondern stets die andere Datei im Editor ausführen muss, sehe ich das richtig?
Ich hab das jetzt mit meinem im Startpost geposteten Code probiert und erhalte beim Ausführen der zweiten .m Datei leider trotzdem folgende Fehlermeldung
"Error: File: test.m Line: 15 Column: 1
The input character is not valid in MATLAB statements or expressions."
Auch dieses Mal habe ich test.m als Namen hergenommen. D.h. irgendwas stimmt an dem Code noch nicht und muss verändert werden, du weißt nicht zufällig was, oder?
eine mat-Matrix ist aber bereits im Workspace vorhanden und entspricht der definierten Matrix D
edit.: Ich glaub ich habs gefunden: Ich habe bei den Zeilen in test.m
for dem mean den Unterstrich rausgelöscht, sodass meine Codezeilen jetzt
ausschauen. D.h. meine Probleme bestanden also in den Unterstrichen und dass ich nicht wusste welche .m Datei ich ausführen musste.
Ich glaub jetzt müsste es passen
|
|
|
Firetime |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 20.09.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2011b
|
 |
|
|
 |
|
Verfasst am: 21.09.2014, 09:43
Titel:
|
 |
Eine Frage noch:
Ich möchte den Code noch gerne um jeweils 3 Rechenoperationen erweitern die dann ebenfalls in die Matrix eingetragen werden sollen:
Fw_20=cos(45°)*[(Fx12_20+Fx34_20)-(Fy14_20+Fy23_20)]*u
Fa_20=sin(45°)*[Fx12_20+Fx34_20+Fy14_20+Fy23_20]*u
Mz_20=(b*(Fx34_20-Fx12_20)+a(Fy14_20-Fy23_20))*y
a,b,u und y sind natürlich bereits definierte Variablen
Dasselbe soll für jede Geschwindigkeit durchgeführt werden, also auch
Fw_15=cos(45°)*[(Fx12_15+Fx34_15)-(Fy14_15+Fy23_15)]*u
Fa_15=sin(45°)*[Fx12_15+Fx34_15+Fy14_15+Fy23_15]*u
Mz_15=(b*(Fx34_15-Fx12_15)+a(Fy14_15-Fy23_15))*y
und
Fw_10=cos(45°)*[(Fx12_10+Fx34_10)-(Fy14_10+Fy23_10)]*u
Fa_10=sin(45°)*[Fx12_10+Fx34_10+Fy14_10+Fy23_10]*u
Mz_10=(b*(Fx34_10-Fx12_10)+a(Fy14_10-Fy23_10))*y
Wäre das noch aufwändig hinzuzufügen oder ginge das ganz schnell?
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 21.09.2014, 10:35
Titel:
|
 |
|
 |
|
Firetime hat Folgendes geschrieben: |
(Wobei mir jetzt auffällt, dass im Workspace einmal eine "mat"-Matrix(100x100) und eine 1x12 Matrix mit 12 Einträgen vorhanden ist, d.h. es funktioniert wenn ich das richtig sehe.
Das heißt dann also, dass ich nicht die Amean.m Datei, sondern stets die andere Datei im Editor ausführen muss, sehe ich das richtig?
|
Genau das heißt es. Du hast selbst ein Funktion amean definiert, welche z.B. aus anderen m-files aufgerufen werden kann. Matlab ist diese Funktion also nun bekannt. Beim Aufruf muss allerdings auch der Input, welcher in der Funktion benötigt wird, mit übergeben werden. Ansonsten gibt es eine Fehlermeldung.
mean ist auch eine Funktion wie dein amean nur eben schon als default in Matlab vorhanden. Es ist daher nicht ratsam andere Variablen oder eigene Funktionen nach Matlab Funktionen zu nennen. Da kann die Fehlersuche erheblich erschweren. Dein eigenes mean sollte also hier ersetzt werden:
Zu deiner letzten Frage kann ich nichts sagen, da ich den Zusammenhang zum vorherigen Code nicht ziehen kann. Woher kommen die ganzen Variablen Fx, Fy auf einmal? Sollen die Zahlen das Element in Fx,Fy bedeuten?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 21.09.2014, 10:46
Titel:
|
 |
Hallo,
bitte eval vermeiden, wo es geht (und es geht fast immer!).
Grundsätzlich sollten Informationen zu den Daten nicht im Variablennamen abgespeichert werden.
Grüße,
Harald
|
|
|
Firetime |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 20.09.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2011b
|
 |
|
|
 |
|
Verfasst am: 21.09.2014, 11:08
Titel:
|
 |
|
 |
|
Bei meiner Messmatrix wurden vier Teilkräfte (Fx12, Fx34, Fy14 und Fy23, wobei Fx12 in der 2., Fx34 in der 4., Fy14 in der 6. und Fy23 in der 8. Spalte der Messmatrix eingetragen war) nach der Zeit bei 3 verschiedenen Geschwindigkeiten gemessen (Fx12_20, Fx12_15 und Fx12_10 usw.), wobei zuerst bei der höchsten Geschwindigkeit von 20 gemessen wurde(daher auch die Mittelwertsbestimmung bei 23000:33000), danach mit 15 (50000:60000) und dann bei 10 (80000:90000).
(Die Geschwindigkeiten sind hier eine prozentuale Anzeige der Motorleistung des Windkanals, also 20%, 15% und 10% der Motorleistung)
Der bisherige Code wertet die entsprechenden Messstellen also aus und weist ihnen die entsprechenden Parametern (Fx12_20 usw.) zu, sodass ich in der 1x12 Matrix die Mittleren Teilkräfte bei den entsprechenden Geschwindigkeiten habe
Interessiert bin ich aber an 2 anderen Kräften Fw und Fa sowie dem Moment Mz, die ich aus den Teilkräften Fx12, Fx34, Fy14 und Fy23 sowie den festgelegten Parametern a, b, x und y bestimmen kann.
Und da das Koordinatensystem der Messanlage um 45° gedreht ist muss ich dies bei meiner Umrechnung noch berücksichtigen.
(Denn für das Koordinatensystem gilt: Fx = Fx12 + Fx34, Fy=Fy14+Fy23, was jeweils der Kraft in X- und Y-Richtung entspricht.
Und da die Kräfte als Spannung in Volt gemessen wurde muss ich diese mit den festen Umrechnungsfaktoren x und y in Newton umrechnen.
Deshalb möchte ich zusätzlich die 3 Größen Fw, Fa und Mz für jede Geschwindigkeit bestimmen und das am besten direkt alles auf einmal.
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 21.09.2014, 12:29
Titel:
|
 |
Wenn ich richtig verstehe dann, sollte es so funktionieren, so fern der Ausdruck [(Fx12_20+Fx34_20)-(Fy14_20+Fy23_20)] ein Skalar ist.
|
|
|
Firetime |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 20.09.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2011b
|
 |
|
|
 |
|
Verfasst am: 21.09.2014, 16:48
Titel:
|
 |
Ja, das funktioniert problemlos, nur möchte ich das nicht alles einzeln durchführen müssen, sondern es sollte wie die Teilkräfte wie Fx12_20 ebenfalls automatisiert in dem struct ablaufen, sodass ich am Ende eine 1x21 Matrix erhalte in denen die Teilkräfte und die endgültigen Kräfte eingetragen sind, da es mich viele Stunden(>10) kosten würde dies alles händisch zu machen.
Wäre es also möglich das alles auf einmal ablaufen zu lassen?
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 21.09.2014, 17:00
Titel:
|
 |
Dazu müsstest du dir wohl erstmal einen anderen Weg überlegen deine Daten abzuspeichern. Wie Harald schon erwähnt hat sollte man eval vermeiden und es bringt in meinen Augen hier auch nichts.
Es gibt mit Sicherheit auch noch andere und evtl. bessere Möglichkeiten deine Daten zuspeichern. Damit könnte dann in einer Schleife die weitere Berechnung erfolgen.
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
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.
|
|