我在MATLAB中有一个项目,我将近似求解diff方程的解。为此,我使用ode45
来获得“真正的解决方案”并将其与我执行3次的欧拉近似值进行比较,每次将步数减半。以下是我的问题:
ode45
似乎无法在我的计算机上运行。我收到这条消息:
No help found for ode45.m.
当我在突击队窗口中输入帮助ode45
时,
Error using ode45
Too many input arguments.
Error in Lab2 (line 51)
[f, u] = ode45(@myode, [pi/6 pi/2], 1);
所以我切换到ode23
,得到了一个我认为非常好的结果。问题是虽然我注意到最后一次近似中的误差变得稍微小一点,但不应该发生,因为每一步误差都会变大......对吗?
更糟糕的是,我尝试在学校计算机上使用ode23运行我的代码并得到不同的结果(不同的解决方案曲线)。我尝试了ode45并得到了相同的结果。当我查看曲线及其值时,这是完全错误的,因为在我的diff方程中,值应该是减少而不是像我在学校计算机上运行时那样增加。
我不明白相同的代码如何在不同的计算机上产生两种不同的结果。
我不明白为什么我的电脑里缺少ode45。我已经尝试重新安装新版本,但它仍然是相同的。
我完全糊涂了......
这是我的代码:
这是一个名为myode
的函数文件function dudf = myode(f,u)
k=1/20;
dudf = (-k*u.^3)/sin(f).^3;
end
这是程序
%Euler's method
f_init = pi/6;
f_final = pi/2;
u_init = 1;
k = 1/20;
n = 10; %number of steps
h(1) = (f_final-f_init)/n;
fh(1) = f_init;
uh(1) = u_init;
%calculate euler's approximation after every step
for i = 2:n+1
fh(i) = fh(i-1)+h;
uh(i) = uh(i-1)+h*(-k*uh(i-1)^3)/(sin(fh(i-1))^3);
end
%save vaules of ode45 at every step for first appr.
step0=pi/30;
fiend = pi/6 + step0;
odeu1 = [1];
step1 = [pi/6];
for i = 1:length(uh)-1
[f, u] = ode23(@myode, [pi/6 fiend], 1);
odeu1 = [odeu1 u(end)];
step1 = [step1 fislut];
fiend = fiend + step0;
end
感谢任何帮助!