|
Autor |
Explizites Eulerverfahren: Zeitabhängige externe Kraft in DGL einbauen |
|
Tim80
Ehemals Aktiv  Dabei seit: 11.05.2015 Mitteilungen: 47
 | Themenstart: 2017-06-06
|
Hallo,
ich habe hier eine DGL zweiten Grades mit einem selbst programmierten expliziten Euler-Verfahren gelöst.
Ich habe hierbei für die externe Kraft die Gravitationkraft F_G=m*g angenommen. Ich möchte das Ganze nun allerdings mit einer zeitabhängigen Kraft F=m*g+t betrachten.
Das macht mir allerdings Probleme.
Kann mir bitte jemand sagen wie und wo ich eine solche zeitabhängige Kraft in meinen Code einbauen kann?
LG Tim
\sourceon Matlab
%DGL 2. Grades mit Euler explizit gelöst
clear all, clc, clf
tl = 0.; %Untere Grenze des Integrationsintervalls
tr = 4.; %Obere Grenze des Integrationsintervalls
dt = 0.001; %Schrittweite
t=[tl:dt:tr]; %Erzeugung Vektor mit Stützstellen (Zeit)
v(1)=0; %Randbedingung Euler explizit
q(1)=0;
d=1;
c=10;
m=1;
g=9.81;
F=m*g;
%Definition der Funktion über ein Handle
fq = @(v) (v);
fv = @(q,v) (F/m-(d/m)*v-(c/m)*q);
%Explizites Euler-Verfahren
for i=2:length(t);
q(i)=q(i-1) + dt*feval(fq,v(i-1));
v(i)=v(i-1) + dt*feval(fv,q(i-1),v(i-1));
end
dq2dt=(F/m-(d/m)*v-(c/m)*q); %Beschleunigung für Plot
%Plot
figure(1)
hold on, grid on
plot(t,q,'-b'); %Weg
plot(t,v,'-g'); %Geschwindigkeit
plot(t,dq2dt,'-r'); %Beschleunigung
title('Explizites Euler-Verfahren','Fontsize',14);
xlabel('Zeit t','Fontsize',14);
ylabel('x','Fontsize',14);
legend('Weg','Geschwindigkeit','Beschleunuigung');
hold off
\sourceoff
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.1, eingetragen 2017-06-07
|
Warum nicht so wie in dem anderen Thread?
\sourceon Matlab
%DGL 2. Grades mit Euler explizit gelöst
clear all, clc, clf
tl = 0.; %Untere Grenze des Integrationsintervalls
tr = 4.; %Obere Grenze des Integrationsintervalls
dt = 0.001; %Schrittweite
t=[tl:dt:tr]; %Erzeugung Vektor mit Stützstellen (Zeit)
v(1)=0; %Randbedingung Euler explizit
q(1)=0;
d=1;
c=10;
m=1;
g=9.81;
F=@(t) m*g+0*t;
%Definition der Funktion über ein Handle
f = @(t,x) [x(2);F(t)/m-(d/m)*x(2)-(c/m)*x(1)];
N = length(t);
xt = zeros(2,N);
%Explizites Euler-Verfahren
for i=2:N
xt(:,i)=xt(:,i-1) + dt*f(t(i),xt(:,i-1));
end
q = xt(1,:);
v = xt(2,:);
dq2dt=(F(t)/m-(d/m)*v-(c/m)*q); %Beschleunigung für Plot
[to,qo] = ode45(f,[0 4],zeros(2,1),[tl,tr]);
%Plot
figure(3)
hold on, grid on
plot(t,q,'-b'); %Weg
plot(t,v,'-g'); %Geschwindigkeit
plot(t,dq2dt,'-r'); %Beschleunigung
plot(to,qo,'+')
title('Explizites Euler-Verfahren','Fontsize',14);
xlabel('Zeit t','Fontsize',14);
ylabel('x','Fontsize',14);
legend('Weg','Geschwindigkeit','Beschleunuigung');
hold off
\sourceoff
|
Profil
|
Tim80
Ehemals Aktiv  Dabei seit: 11.05.2015 Mitteilungen: 47
 | Beitrag No.2, vom Themenstarter, eingetragen 2017-06-07
|
Das habe ich auch versucht, aber irgendwie funktioniert es nicht so ganz.
Mit deinem Code geht es problemlos.
Versuche bitte mal meinen Code damit zum Laufen zu bekommen. Im Prinzip sollte es doch so wie hier funktionieren. Ich finde den Fehler aber leider nicht.
\sourceon Matlab
%DGL 2. Grades mit Euler explizit gelöst
clear all, clc, clf
tl = 0.; %Untere Grenze des Integrationsintervalls
tr = 4.; %Obere Grenze des Integrationsintervalls
dt = 0.001; %Schrittweite
t=[tl:dt:tr]; %Erzeugung Vektor mit Stützstellen (Zeit)
v(1)=0; %Randbedingung Euler explizit
q(1)=0;
d=1;
c=10;
m=1;
g=9.81;
%F=m*g;
F=@(t) m*g+0*t;
%Definition der Funktion über ein Handle
fq = @(v) (v);
fv = @(q,v) (F(t)/m-(d/m)*v-(c/m)*q);
%Explizites Euler-Verfahren
for i=2:length(t);
q(i)=q(i-1) + dt*feval(fq,v(i-1));
v(i)=v(i-1) + dt*feval(fv,q(i-1),v(i-1));
end
dq2dt=(F(t)/m-(d/m)*v-(c/m)*q); %Beschleunigung für Plot
%Plot
figure(1)
hold on, grid on
plot(t,q,'-b'); %Weg
plot(t,v,'-g'); %Geschwindigkeit
plot(t,dq2dt,'-r'); %Beschleunigung
title('Explizites Euler-Verfahren','Fontsize',14);
xlabel('Zeit t','Fontsize',14);
ylabel('x','Fontsize',14);
legend('Weg','Geschwindigkeit','Beschleunuigung');
hold off
\sourceoff
|
Profil
|
Tim80
Ehemals Aktiv  Dabei seit: 11.05.2015 Mitteilungen: 47
 | Beitrag No.3, vom Themenstarter, eingetragen 2017-06-07
|
Ich habe in dem geänderten Code oben jeweils auch F durch F(t) ersetzt, dass dies zeitabhängig wird, aber leider ohne Wirkung bzw. jetzt zeigt es mir sogar Fehler an die zuvor nicht aufgetaucht sind
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.4, eingetragen 2017-06-07
|
Versuche es so
\sourceon Matlab
%Definition der Funktion über ein Handle
fq = @(v) (v);
fv = @(t,q,v) (F(t)/m-(d/m)*v-(c/m)*q);
%Explizites Euler-Verfahren
for i=2:length(t);
q(i)=q(i-1) + dt*feval(fq,v(i-1));
v(i)=v(i-1) + dt*feval(fv,t(i),q(i-1),v(i-1));
end
\sourceoff
|
Profil
|
Tim80 hat die Antworten auf ihre/seine Frage gesehen. Tim80 hat selbst das Ok-Häkchen gesetzt. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|