Euler's Method
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I'm getting an error that reads "Error in myeuler (line 22)
y(i+1) = y(i) + (dx * f(x(i),y(i)));"
I don't exactly know what I'm doing wrong or even where to look in this line to see what's wrong.
% must call from edrive.m or other
% required input arguments: RHS function of two variables f,
% vector x of length n+1,
% init val c
% computed output argument: y\in\R^{n+1} approximate solution
function y = myeuler(f,x,c)
% approximates sol to y' = f(x,y) over [a,b] with y(a)=c
% via n steps of Euler's method
for n = [10, 20, 40, 80, 160]
a = 0; b = .5; c = .25;
x = [a:n+1:b];
f = @(x,y) (x.^3);
dx = (x(end)-x(1))/n;
y = [c ; zeros(n,1)];
for i = 1: n
y(i+1) = y(i) + (dx * f(x(i),y(i)));
end
end
2 Kommentare
Image Analyst
am 16 Aug. 2020
You forgot to give us the actual error. That means ALL the red text, not just a small snippet of it. By the way, your f does not seem to use y at all:
f = @(x,y) (x.^3);
You can see that it just returns x cubed. The y value is ignored.
Antworten (2)
Walter Roberson
am 16 Aug. 2020
for n = [10, 20, 40, 80, 160]
a = 0; b = .5; c = .25;
x = [a:n+1:b];
Consider the first case, n = 10 . Then
a = 0; b = .5; c = .25;
x = [0:10+1:.5]
but 0:11:.5 is going to give you just 0 .
The number in the middle in a a:b:c operation is the increment, not the number of elements to generate. To generate a particular number of elements,
x = linspace(a, b, n+1);
0 Kommentare
Rafael Hernandez-Walls
am 16 Aug. 2020
for n = [10, 20, 40, 80, 160]
a = 0; b = .5; c = .25;
x = linspace(a,b,n);%[a:n+1:b];
f = x.^3;
dx = x(2)-x(1);%(x(end)-x(1))/n;
y = [c ; zeros(n-1,1)];
for i = 1: n-1
y(i+1) = y(i) + dx * f(i);
end
plot(x,y),hold on
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical 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!