What is the error here? Euler Method for 2nd order equations?

3 Ansichten (letzte 30 Tage)
Kaylene Widdoes
Kaylene Widdoes am 17 Feb. 2016
Kommentiert: Torsten am 18 Feb. 2016
I have the following files and script file, but the graph is definitely wrong for the approximations. Any ideas?
Code:
clear all
% define the problem: function f and domain
f = @(t,y) (0*t+3*y);
a = 0; b = 1;
% exact solution, using a fine grid
t = a:.0001:b;
y = exp(3*t); % this is a vector of values, not a function
% coarse solution
h = .25;
ya = 1;
[T1,Y1]=euler(f,a,b,ya,h);
% fine solution
h = .05;
ya = 1;
[T2,Y2]=euler(f,a,b,ya,h);
% finer solution
h = .01;
ya = 1;
[T3,Y3]=euler(f,a,b,ya,h);
plot(t,y,'k',T1,Y1,'bo-',T2,Y2,'ro-',T3,Y3,'go-')
legend('Exact','h=0.25','h=0.05','h=0.01')
title('The Euler Method with 3 meshes')
Script File:
function[T,Y] = euler(f,a,b,ya,h)
a = 0; b = 1;
T = a:h:b;
Y = zeros(1,length(T));
Y(1) = a;
for k = 1 : length(T)-1
Y(k+1) = Y(k) + h*f(T(k),Y(k));
end
  1 Kommentar
Walter Roberson
Walter Roberson am 17 Feb. 2016
Are you encountering an error message? What do you observe that leads you to be suspicious of the code?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Torsten
Torsten am 17 Feb. 2016
function[T,Y] = euler(f,a,b,ya,h)
a = 0; b = 1;
T = a:h:b;
Y = zeros(1,length(T));
*Y(1) = ya;*
for k = 1 : length(T)-1
Y(k+1) = Y(k) + h*f(T(k),Y(k));
end
Best wishes
Torsten.
  2 Kommentare
Kaylene Widdoes
Kaylene Widdoes am 17 Feb. 2016
So if I want to run the same code for (x^3)y' + 20(x^2)y = x, would I solve for dy/dx and then plug that equation in?
Torsten
Torsten am 18 Feb. 2016
Yes.
f = @(t,y) (t-20*t^2*y)/t^3;
Best wishes
Torsten.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by