欧拉在MATLAB中的近似

时间:2014-11-20 06:50:38

标签: matlab approximation

我在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

感谢任何帮助!

0 个答案:

没有答案