0
我写是应该解决的IVP DU/DX = -5000(U(T) - cos(t))的 - 这Matlab程序SIN(t)的其中u( 0)= 1。我的确切解决方案应该是u(t)= cos(t),但是我从我的代码中得到的欧拉向前的解决方案与我应该做的和我计算的结果相比是巨大的,但我不确定我已经走到哪里了在我的代码错误。你能找到我的错误吗?向前欧拉法求第一阶微分方程在Matlab
function main
dt=5;
u0 = 1;
n=50;
[T,U] = euler(dt, u0, n);
uexact = cos(T);
plot(T,U)
hold on
plot(T, uexact, 'r')
end
function [T,U]= euler(dt, u0, n)
R= dt/n;
T=zeros(1,n+1);
U=zeros(1,n+1);
U(1)=u0;
T(1) = 0;
for j=1:n
U(j+1)= U(j)+ R*(rhs(T(j),U(j)));
T(j+1)= T(j) + R;
end
end
function dP = rhs(t, P)
P = zeros(1,1);
dP = (-5000)*(P - cos(t)) - sin(t);
end