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

Integrationsvariablen deklarieren

 

AJM
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 01.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 16:14     Titel: Integrationsvariablen deklarieren
  Antworten mit Zitat      
Hi ich habe folgendes Problem.
Aus einem System lasse ich mir mittels matlab eine Differentialgleichung erstellen. Diese möchte ich nun integrieren. Dazu habe ich mir eine Funktion geschrieben die mir aus meiner DGL ein System erster Ordnung erstellt und diese integriert. Leider ist die Integration durch die viele Substitutionen sehr langsam, so dass ich das Substituieren auslagern möchte. Das heizt eine andere Funktion berechnet mir einmal und nicht bei jedem Integrationsschritt mein System erster Ordnung und schreib dieses dann in eine globale Variable die vom Integrator aufgegriffen wird.
Soweit so gut, leider erkennt Matlab aber ohne function[x,t] nicht, dass x, was bei mir durch Substitution eingesetzt wird eine Integrationsvariable ist. Deswegen verlangt matlab immer eine Definition der Variablen x.

Kennt jemand eine Möglichkeit wie ich matlab sagen kann, setz doch erstmal x ein und dann wirst du schon später sehen dass dus noch brauchst?

LG und Danke
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.07.2012, 20:20     Titel:
  Antworten mit Zitat      
Hallo,

eine lange Erklärung, mit der ich offen gesagt wenig anfangen kann, aber ich versuchs mal.

Zitat:
Aus einem System lasse ich mir mittels matlab eine Differentialgleichung erstellen.

Über eine Funktion? Wie erstellt man eine DGL? Oder geht es um die "rechte Seite"?

Zitat:
Leider ist die Integration durch die viele Substitutionen sehr langsam

Wo wird was durch was substituiert?

Zitat:
Das heizt eine andere Funktion berechnet mir einmal und nicht bei jedem Integrationsschritt mein System erster Ordnung und schreib dieses dann in eine globale Variable die vom Integrator aufgegriffen wird.

Das klingt zunächst wenig sinnvoll. Das System ändert sich ja von Schritt zu Schritt. Damit würde ja angenommen, dass das System konstant ist?

Zitat:
leider erkennt Matlab aber ohne function[x,t] nicht, dass x, was bei mir durch Substitution eingesetzt wird eine Integrationsvariable ist.

In was wird eingesetzt?

Für mich zumindest müsste das Problem nochmal von vorne beschrieben werden. Am geschicktesten wäre wohl, (kommentierten) Code zu verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
AJM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 01.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 21:19     Titel:
  Antworten mit Zitat      
Ok vielleicht funktioniert es mit Code besser:


Code:
function [dx] = integration(t,x)
x1 = x(1);
x2 = x(2);
x3 = x(3);
x4 = x(4);
global Qv_34;
global Qv_43;
global Qe_3;
global Qe_4;
Sv_34 = eval(Qv_34);
Sv_43 = eval(Qv_43);
Se_3 = eval(Qe_3);
Se_4 = eval(Qe_4);
velmat = zeros(4);
velmat(2,4) = 1;
velmat(1,3) = 1;
velmat(3,4) = Sv_34;
velmat(4,3) = Sv_43
forcmat = [0; 0; Se_3;Se_4]
dx = velmat*x +forcmat;


das hier ist meine Bewegungsgleichung die integriert wird.
Die Werte in den Matrixen velmat und forcmat kommen aus globalen Variablen siehe hier:

Code:

M1 = 3;
M2 = 2;
L1 = 1;
L2 = 3;
Moment = 5;
Gravitation = 9.81;
duration= 10;

global mass_int; % globale Variablen aus derrive_equation
global qv_int;
global qe_int;
global Qv_34;
global Qv_43;
global Qe_3;
global Qe_4;
syms m1 m2 l1 l2 Mtorq g;
syms x1 x2;
syms varalpha varbeta dvaralpha dvarbeta ddvaralpha ddvarbeta;
subs_var =  {m1, m2, l1, l2, Mtorq, g};
subs_wert = {M1, M2, L1, L2, Moment, Gravitation};
subs_dgl = {x1, x2};
subs_alpha = {varalpha, varbeta};
%---------------------Setzt Werte ein -----------------------------
mass_wert = subs(mass_int, subs_var, subs_wert); %ersetze Werte
Qv_wert = subs(qv_int, subs_var, subs_wert);
Qe_wert = subs(qe_int, subs_var, subs_wert);
Qv_mat = subs(Qv_wert, subs_alpha, subs_dgl);
Qe_mat = subs(Qe_wert, subs_alpha, subs_dgl);
%---------------------lese string aus -----------------------------
Qv_34= char(-Qv_mat(1,2));
Qv_43= char(-Qv_mat(2,1));
Qe_3 = char(Qe_mat(1,1));
Qe_4 = char(Qe_mat(2,1));

time = [0, duration]; %Integrationsbereich
x0 = [1; 1; 0; 0]; % Randbedingungen
sol = ode45(@integration, time, x0);
 


global qv_int;
global qe_int;
sind aus einem anderen Programm (das funktioniert) hergeleitete Matrizen, die von alpha, beta, und den Längen, Massen etc abhängen.

Nun möchte ich also bevor ich integriere die Längen, Massen etc einsetzen und mein alpha auf meine zustandsvariablen x1-x4 bringen.
Dazu substituiere ich und lese diesen dann in einen String (char) ein um sie mit eval in dem Integrationsprogram auszulesen. Die Idee dahinter ist, dass ich so von symbolischen auf double werte wechseln kann.

Jedoch funktioniert hier was noch nicht. Wo ist der Fehler?

Ich hoffe es ist so besser zu verstehen?

LG und danke Smile
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.