欧拉方法没有给出正确的输出
Euler method doesn't give correct output
我正在尝试为 Forward Euler 方法编写 MATLAB 代码,但我认为输出不完全正确。
这是我的代码:
function [t ,u] = Euler(f,tspan ,u0,n)
T = [tspan(1) :n: tspan(2)];
u = zeros(1,n);
u(n) = u0;
h = (tspan(2) - tspan(1))/n;
for i= 1: n
u(i+1) = u(i) + h*f(T(i),u(i));
t = [u(i+1)*T(i)];
u = [u(i+1)];
end
end
最简单的实现可能看起来像
function [tHist ,uHist] = ForwardEuler(f,tspan ,u0,nsteps)
tHist = linspace(tspan(1), tspan(2), nsteps+1);
h = tHist(2)-tHist(1);
uHist = zeros(nsteps+1,length(u0));
uHist(1,:)=u0;
for i = 1:nsteps
uHist(i+1,:) = uHist(i,:) + h*f(tHist(i),uHist(i,:));
end%for
end%function
用圆方程测试例程
[T,U] = ForwardEuler(@(t,u)[u(2), -u(1)], [0,6.5], [1,0], 60);
plot(U(:,1),U(:,2));
这会产生预期的向外螺旋。
我正在尝试为 Forward Euler 方法编写 MATLAB 代码,但我认为输出不完全正确。
这是我的代码:
function [t ,u] = Euler(f,tspan ,u0,n)
T = [tspan(1) :n: tspan(2)];
u = zeros(1,n);
u(n) = u0;
h = (tspan(2) - tspan(1))/n;
for i= 1: n
u(i+1) = u(i) + h*f(T(i),u(i));
t = [u(i+1)*T(i)];
u = [u(i+1)];
end
end
最简单的实现可能看起来像
function [tHist ,uHist] = ForwardEuler(f,tspan ,u0,nsteps)
tHist = linspace(tspan(1), tspan(2), nsteps+1);
h = tHist(2)-tHist(1);
uHist = zeros(nsteps+1,length(u0));
uHist(1,:)=u0;
for i = 1:nsteps
uHist(i+1,:) = uHist(i,:) + h*f(tHist(i),uHist(i,:));
end%for
end%function
用圆方程测试例程
[T,U] = ForwardEuler(@(t,u)[u(2), -u(1)], [0,6.5], [1,0], 60);
plot(U(:,1),U(:,2));
这会产生预期的向外螺旋。