Matlab code for ODE problems

3 views (last 30 days)
Garrett Coss
Garrett Coss on 21 Oct 2020
Answered: Pratyush Roy on 30 Oct 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

Answers (1)

Pratyush Roy
Pratyush Roy on 30 Oct 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.

Categories

Find more on Programming in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!