Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Explizites Eulerverfahren: Zeitabhängige externe Kraft in DGL einbauen
Autor
Beruf J Explizites Eulerverfahren: Zeitabhängige externe Kraft in DGL einbauen
Tim80
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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.

Wechsel in ein anderes Forum:
 Suchen    
 
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]