【问题标题】:run a code on calculating the euler method for ODE运行代码计算 ODE 的欧拉方法
【发布时间】:2019-01-26 13:16:57
【问题描述】:
function yout = eulermethod(myeuler, t0, h, tf, y0)

 tic

    yout = y0 
    y = yout;

    for t = t0 : h : tf
        s = myeuler(t,y);
        y = y + h*s;
        y = y(2)
        yout = [yout; y]
        plot(t,yout)
    toc
    end

end

我得到了这个错误 位置 1 中的索引无效。数组索引必须是正整数或逻辑值。

euler 方法中的错误(第 9 行) s = myeuler(t,y

【问题讨论】:

  • 这里没有问题。
  • 位置 1 的索引无效。数组索引必须是正整数或逻辑值。 euler 方法中的错误(第 9 行) s = myeuler(t,y
  • 我收到了这个错误
  • 欢迎来到 Stackoverflow。在发布之前,请阅读帮助。这不是minimal, complete and verifiable 示例。我们不知道 myeuler(t,y) 是什么。它是一种方法吗?矩阵?
  • 函数 dydt = myeuler(t,y) t =0; y =10; dydt = 2*y end 这是另一个函数

标签: matlab


【解决方案1】:

这里的问题是 MATLAB 认为 myeuler 是一个矩阵而不是一个函数。当您致电eulermethod 时,我假设您正在做类似的事情

yout = eulermethod(myeuler, t0, h, tf, y0);

你真正想做的是

yout = eulermethod(@myeuler, t0, h, tf, y0);

@ 将第一个参数转换为函数句柄(请参阅the matlab documentation)。

其余代码还有其他问题,但我不确定您要解决的方程是什么,所以我帮不上忙。当然,您的情节线没有多大意义,因为t 是一个标量。

假设您正在求解微分方程 dy/dt = 2y,对于 y(t=0) = y0,您的函数应该看起来有点像

function dydt = myeuler(t,y)
dydt = 2*y;
end      

function yout = eulermethod(myeuler, t0, h, tf, y0)

    yout = y0;
    y = y0;

    for t = (t0+h):h:tf

        s = myeuler(t,y);
        y = y + h*s;
        yout = [yout; y];

        plot(t0:h:t, yout) 
        xlabel('t');
        ylabel('y');

        pause(0.1);

    end

end

然后会被一些代码调用,例如

t0 = 0;
h = 0.01;
tf = 1;
y0 = 1.0;

yout = eulermethod(@myeuler, t0, h, tf, y0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2022-01-17
    相关资源
    最近更新 更多