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

Funktionsaufruf mit Problemen + Fehler bei Rückgabewerten

 

Schewa
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2013, 16:17     Titel: Funktionsaufruf mit Problemen + Fehler bei Rückgabewerten
  Antworten mit Zitat      
Ein Hallo an die Forengemeinde.
Allgemeine Informationen, die zur Klärung des Problems möglicherweise hilfreich sein können vorweg.

Matlab Version 7.10.0 (R2010a) (Studentenversion)

Nun zu meinem 1 Problem.

Ich habe ein Beispielprogramm von unserem Dozenten bekommen und wollte dieses in Matlab nutzen, um das Programm zu analysieren und zu verstehen.

Der Code lautet wie folgt:

Code:
function guete_wert = mfd_guete_mck(theta)
global m c k
m = theta(1)
c  = theta(2)
k  = theta(3)

[t,s_model] mfd_ode45;
global s_mess
e= s_mess - s_model;
guete_wert = sum(e.^2);


Wenn ich das richtig interpretiere, dann wird die Variable theta hinter dem Namen "mfd_guete_mck" initialisiert?
Sie taucht zumindest in keinem weiteren Stück des Programms mehr auf.

Matlab meldet zurück, das theta nicht definiert wurde.

Ist meine Interpretation falsch? Fehlt noch etwas vom Programm?
Wenn ich theta nochmals händisch innerhalb der Datei festlege, dann bekomme ich die Fehlermeldung, dass die Dimensionen nicht korrekt sind.
Ich würde mich über Aufklärung freuen Smile

Mein zweites Problem:

Ich möchte Messwerte anhand eines Modells gewinnen, das in Matlab simuliert wird.
Das bedeutet, ich simuliere einen Prozess in Matlab, übergebe Startwerte und möchte das Ergebnis auswerten.

Dazu habe ich folgenden Quelltext verwendet:

Code:
global m1 m2 c1 c2

%Systemparameter für die Simulation
m1=30;
m2=30;
c1= 150000;
c2= 3000;
%Erzeugen von ungestörten Messwerten basierend auf Simulation
global s_mess
[t,s_mess]=sim_test;
 


Hier bekomme ich folgende Fehlermeldung:
??? Error using ==> sim_test
too many output arguments.

Die "sim_test" lautet wie folgt:

Code:

function xdot = sim_test(t, x)

global m1 m2 c1 c2

 xdot=[x(2);
      1/m1*(-c1*x(1)-c2*(x(1)-x(3)));
      x(4);
      c2/m2*(x(1)-x(3))];

 


Als Rückgabe erwarte ich allerdings eine Zeit und die simulierten Ergebnisse der Messung.

Auch hier existiert ein Beispiel vom Dozenten, bei dem es funktioniert.

Code:
global m c k
m = 100;
c = 3;
k = 0.8;

global s_mess;
[t, s_mess] = mfd_ode45;


Ich hoffe es ist ein wenig klar geworden, wo die Schwierigkeiten liegen.
Vielen Dank für die Antworten und Hilfestellungen.
Bei Misverständnissen oder Schwierigkeiten mit dem Verstehen einfach melden.
Vielen Dank und
Beste Grüße
Schewa
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.04.2013, 16:41     Titel:
  Antworten mit Zitat      
Zitat:
Wenn ich das richtig interpretiere, dann wird die Variable theta hinter dem Namen "mfd_guete_mck" initialisiert?
Sie taucht zumindest in keinem weiteren Stück des Programms mehr auf.

Das ist ein Übergabeparameter an die Funktion. Das heißt, wenn du die Funktion ohne Übergabeparametern aufrufst, bekommst du so eine Fehlermeldung. Ohne Übergabe wird Theta nicht initialisiert.
Also musst du in Command Window, die Funktion mit Übergabeparameter aufrufen.
z.B Aufruf:
Code:

mfd_guete_mck([1 2 3])

% oder
theta =[1 2 3]
mfd_guete_mck(theta)

 


Zitat:
Wenn ich theta nochmals händisch innerhalb der Datei festlege, dann bekomme ich die Fehlermeldung, dass die Dimensionen nicht korrekt sind.
Ich würde mich über Aufklärung freuen Smile


Der Theta muss man einen Array mit 3 Werten übergeben wg. Zuweisungen an m, c und k (siehe Code Beispiel von Oben)




Zitat:

Hier bekomme ich folgende Fehlermeldung:
??? Error using ==> sim_test
too many output arguments.

Als Rückgabe erwarte ich allerdings eine Zeit und die simulierten Ergebnisse der Messung.

Auch hier existiert ein Beispiel vom Dozenten, bei dem es funktioniert.


Hallo dazu solltest du die Funktionen MFD_ODE45 und SIM_TEST doch mal vergleichen. Kannst du den Unterschied in der Definition der beiden Funktionen sehen.
Jedenfalls beim SIM_TEST ist nur ein Ausgabeparameter definiert.
Entweder musst du die Funktion entsprechend anpassen, oder du verwendest nur eine Ausgabe.

Lese dazu bitte in der Doku weiter oder such dir ein Tutorial
http://www.mathworks.de/de/help/mat.....e-functions-in-files.html

Zuletzt bearbeitet von denny am 17.04.2013, 16:52, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Schewa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2013, 16:52     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort.
Manchmal sieht man den Wald vor lauter Bäumen nicht.
Nun bin ich weiter!

Vielen dank und beste Grüße
Schewa
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 - 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.