Azzera filtri
Azzera filtri

Matlab code for ODE problems

3 visualizzazioni (ultimi 30 giorni)
Garrett Coss
Garrett Coss il 21 Ott 2020
Risposto: Pratyush Roy il 30 Ott 2020
I have the function (dy/dt)=-t*e^y, y(0)=0 and have to create a code using four seperate methods (Euler, Huen, Modified Euler, and RK4) in order to graph the four different method's y values from time t (-5,5) and 1 second intervals.
I created a code with each method however I cannot get them to work even individually let alone all together.
Any help would be appreciated.
clear all
close all
clc
k=1;
t=-5:k:5
y=zeros([11 1])
y(1)=1
n=numel(y)
% Euler Method
for i=1:n-1
y(i+1)=y(i)-t*exp(y(i))*k
end
% Huen Method
for i=1:n-1
fs=-t*exp(y(i))
yp(i+1)=y(i)-fs*k
fe=-t*exp(yp(i+1))
y(i+1)=y(i)+(1/2)*(fs+fe)*k
end
% Modifier Euler Method
for i=1:n-1
y(i+1/2)=y(i)-t*exp(y(i))*(k/2)
y(i+1)=y(i)-t*exp(y(i))*k
end
% RK4
for i=1:n-1
f1=-t*exp(y(i))
f2=-(t+k/2)*exp(y(i)+.5*f1*k)
f3=-(t+k/2)*exp(y(i)+.5*f2*k)
f4=-(t+k)*exp(y(i)+f3*k)
Qk=(1/6)*(f1+2*f2+2*f3+f4)
y(i+1)=y(i)+Qk*k
end
plot(t,y);
grid on

Risposte (1)

Pratyush Roy
Pratyush Roy il 30 Ott 2020
Hi Garrett,
For all the methods for solving ODEs, the time as well as variable should change in steps. Considering the code snippet for the Euler method:
y(i+1)=y(i)-t*exp(y(i))*k
The right hand side of the equation contains multiplication of y(i) with vector t which gives us a vector but that is assigned to a scalar value y(i+1).The time values should also vary in steps with the functional value y(i). The following code snippet demonstrates the case where both time and functional value is varying:
y(i+1)=y(i)-t(i)*exp(y(i))*k
The same changes are applicable for the other techniques as well.
Hope this helps!
Regards,
Pratyush.

Categorie

Scopri di più su Programming in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by