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

Bereitstellung einer Jacobi-Matrix für einen ode-Solver

 

KingOfTheStoneH
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 07.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2015, 14:38     Titel: Bereitstellung einer Jacobi-Matrix für einen ode-Solver
  Antworten mit Zitat      
Hallo zusammen,

ich habe im Studium aktuell die Aufgabe das DGL-System eines Pendels mit Stoß-Anregung zu untersuchen. Hier wird zunächst die DGL des Pendels mit einem ode45-Solver gelöst und in der Zeit- und Phasenebene dargestellt (s. Aufgabe1 und Aufgabe2).

In der Aufgabe3 geht es nun jedoch darum, dem numerischen Integrationsverfahren die Jacobi-Matrix zur Verfügung zu stellen und das Problem erneut zu lösen. Der nächste Schritt besteht dann darin Lösungsunterschiede zum vorigen Vorgehen zu erkennen.

Ich habe zwei MATLAB-Function-Files erstellt: eins für die DGL des Pendels und eins für die Berechnung der Jacobi-Matrix dieser DGL. Im Script fasse ich dann die Kommandos für die jeweiligen Aufgaben zusammen.

Nun mein Problem: Aufgabe1 und Aufgabe2 lassen sich wunderbar ausführen und machen was sie sollen, nur Aufgabe3 gibt bei mir folgenden Fehlercode:

Code:

Error in FJac (line 9)
J=jacobian(f,[phi(1), phi(2)]);

Error in ode23t (line 328)
dfdy = feval(Jac,t,y,Jargs{:});

Error in Script (line 28)
[t,phi]=ode23t(@pendel,[0 40],[(pi/12);0],options);
Hier mein MATLAB-Code
 


Ich bekomme es anscheinend nicht richtig hin dem ode-Solver die Jacobi-Matrix zur Verfügung zu stellen. Könnt ihr mir weiterhelfen?

Hier mein MATLAB-Code:

Code:

% Aufgabe 1

[t,phi]=ode45(@pendel,[0 40],[(pi/12);0]);
plot(t,phi);
title('Systemverhalten Pendel, phi0=15° dphi0=0°/s');
xlabel('Zeit t');
ylabel('Winkel phi / Winkelgeschwindigkeit dphi/dt');
legend('phi','phipunkt');
pause;
%Beginn bei phi=15° (=0.2618 im Bogenmaß) und phipunkt=0°/s
%nichtperiodischer Verlauf, da Anregung als Störgröße fungiert und somit
%eine Periodizität verhindert wird

% Aufgabe 2

[t,phi]=ode45(@pendel,[0 40],[(pi/3);(57.3*pi)/180]);
plot(phi(:,1),phi(:,2));
title('Phasenebene Pendel, phi0=60° dphi0=57.3°/s');
xlabel('Winkel phi');
ylabel('Winkelgeschwindigkeit dphi/dt');    
pause;
%stabiles System mit stabiler Endlage, da es sich nicht in unendlicher Zeit in unendlichen
%Werten für phi und dphi verläuft; es existiert ein Endzustand
 
% Aufgabe 3

options=odeset('Jacobian',@FJac);
[t,phi]=ode23t(@pendel,[0 40],[(pi/12);0],options);
plot(t,phi);
title('Systemverhalten Pendel mit Jacobi-Matrix, phi0=15° dphi0=0°/s');
xlabel('Zeit t');
ylabel('Winkel phi / Winkelgeschwindigkeit dphi/dt');
legend('phi','phipunkt')
pause;
 


Und die Functions:

Code:

function dphi=pendel(t,phi)

l=5; %m
m=30; %kg
g=9.81; %m/s
Fr=4; %N

dphi=[phi(2);(-(g/l)*sin(phi(1)))-((2*Fr)/(m*l*pi))*atan(10*phi(2))-((30*sin(2*pi*0.1*t))/(m*l))];
end

function J=FJac(t,phi)

l=5; %m
m=30; %kg
g=9.81; %m/s
Fr=4; %N

f=[phi(2);(-(g/l)*sin(phi(1)))-((2*Fr)/(m*l*pi))*atan(10*phi(2))-((30*sin(2*pi*0.1*t))/(m*l))];
J=jacobian(f,[phi(1), phi(2)]);
end
 


Vielen Dank im Voraus für eure Hilfe!
Ich bin grad echt am verzweifeln... Sad
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.07.2015, 00:31     Titel: Re: Bereitstellung einer Jacobi-Matrix für einen ode-Solver
  Antworten mit Zitat      
Hallo KingOfTheStoneH,
Zitat:
Code:
Error in FJac (line 9)
J=jacobian(f,[phi(1), phi(2)]);

Hier fehlt noch die wichtigste Zeile: Welchen Fehler bekommst Du denn in dieser Zeile?

Gruß,Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
KingOfTheStoneH
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 07.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 14:15     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo KingOfTheStoneH,
Zitat:
Code:
Error in FJac (line 9)
J=jacobian(f,[phi(1), phi(2)]);

Hier fehlt noch die wichtigste Zeile: Welchen Fehler bekommst Du denn in dieser Zeile?

Gruß,Jan


Hallo Jan,

erstmal vielen Dank für diene Hilfe!

Also in der M-File für FJac wird mir kein Fehler angezeigt oder irgendwas von MATLAB markiert, nur beim Ausführen des Skripts in der Kommandozeile unten.
Das gleiche gilt bei den anderen beiden Error-Nachrichten.

Die oberste Fehlermeldung wurde beim letzten Mal nicht miteingefügt, deshalb hier nochmal:

Code:

Undefined function 'jacobian' for input arguments of type 'double'.

Error in FJac (line 9)
J=jacobian(f,[phi(1); phi(2)]);

Error in ode23t (line 328)
dfdy = feval(Jac,t,y,Jargs{:});

Error in Script (line 28)
[t,phi]=ode23t(@pendel,[0 40],[(pi/12);0],options);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.07.2015, 16:12     Titel:
  Antworten mit Zitat      
Hallo KingOfTheStoneH,

Zitat:
Undefined function 'jacobian' for input arguments of type 'double'.

Diese Fehlermeldung ist eindeutig und klar, oder?
Es gibt die Funktion "jacobian" nicht. Was soll sie denn tun und wie kamst Du darauf diese Funktion dort einzusetzen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
KingOfTheStoneH
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 07.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 18:29     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo KingOfTheStoneH,

Zitat:
Undefined function 'jacobian' for input arguments of type 'double'.

Diese Fehlermeldung ist eindeutig und klar, oder?
Es gibt die Funktion "jacobian" nicht. Was soll sie denn tun und wie kamst Du darauf diese Funktion dort einzusetzen?

Gruß, Jan


In dem M-File FJac definiere ich eine Funktion J, welche die Jacobi-Matrix der DGL berechnet. Dabei benutze ich folgende Syntax:

Code:

function J=FJac(t,phi)

l=5; %m
m=30; %kg
g=9.81; %m/s
Fr=4; %N

f=[phi(2);(-(g/l)*sin(phi(1)))-((2*Fr)/(m*l*pi))*atan(10*phi(2))-((30*sin(2*pi*0.1*t))/(m*l))];

J=jacobian(f,[phi(1), phi(2)]);
 
.

Im nächsten Schritt will ich diese Funktion / Jacobi-Matrix dem ode-Solver zur Verfügung stellen, das versuche ich über:

Code:

options=odeset('Jacobian',@FJac);

[t,phi]=ode23t(@pendel,[0 40],[(pi/12);0],options);
 


Da ich MATLAB-Anfänger bin, habe ich mir dieses Vorgehen aus der Hilfe-Funktion hergeleitet. Ist mir hier ein Fehler unterlaufen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.07.2015, 18:42     Titel:
  Antworten mit Zitat      
die aussage von jan könnte ich hier nochmal copy paste:)
Zitat:
Es gibt die Funktion "jacobian" nicht.

hast du die toolboxen die diese funktion erst beinhalten? sonst kannst du sie nicht verwenden und musst sie selber programmieren wenn du sie benutzen willst.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
KingOfTheStoneH
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 07.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 19:24     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
die aussage von jan könnte ich hier nochmal copy paste:)
Zitat:
Es gibt die Funktion "jacobian" nicht.

hast du die toolboxen die diese funktion erst beinhalten? sonst kannst du sie nicht verwenden und musst sie selber programmieren wenn du sie benutzen willst.


Was genau meint ihr mit Funktion? Meint ihr den Matlab-Befehl? Den kann man bei den an unserer Uni zur Verfügung gestellten Rechnern nutzen, um Jacobi-Matrixen zu berechnen.

Code:


Oder meint ihr den Ausdruck 'Jacobian' an der Stelle:

Code:
options=odeset('Jacobian',@FJac);
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.07.2015, 20:02     Titel:
  Antworten mit Zitat      
Zitat:
Was genau meint ihr mit Funktion? Meint ihr den Matlab-Befehl? Den kann man bei den an unserer Uni zur Verfügung gestellten Rechnern nutzen, um Jacobi-Matrixen zu berechnen.

Code:



ja aber das ist ja nicht die funktion aus deinem skript. jacobian aus der symbolic toolbox ist ja ganz klar nicht für doublewerte als input parameter. das sagt dir auch die fehlermeldung.
Zitat:
v — Vector of variables with respect to which you compute Jacobian
symbolic variable | symbolic vector

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
KingOfTheStoneH
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 07.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 20:41     Titel:
  Antworten mit Zitat      
Zitat:

ja aber das ist ja nicht die funktion aus deinem skript. jacobian aus der symbolic toolbox ist ja ganz klar nicht für doublewerte als input parameter. das sagt dir auch die fehlermeldung.
Zitat:
v — Vector of variables with respect to which you compute Jacobian
symbolic variable | symbolic vector


Bedeutet das, dass ich dem jacobian-Befehl nicht phi(1) und phi(2) übergeben darf, sondern nur phi? Bzw. was muss ich machen damit es läuft?

Ich stecke leider nicht so in der Materie und habe erst vor einem Monat angefangen mit MATLAB zu arbeiten, daher bedanke ich mich mal im Voraus für euer Verständnis und eure Antworten! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 23.07.2015, 16:31     Titel:
  Antworten mit Zitat      
http://de.mathworks.com/help/symbolic/jacobian.html

sieht mir stark nach syms aus...
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
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.