【问题标题】:How to write an Ordinary Differential Equation in MATLAB?如何在 MATLAB 中编写常微分方程?
【发布时间】:2018-05-02 19:04:04
【问题描述】:

我尝试在 MATLAB 中编写一个常微分方程。

我写了这段代码:

function [y] = odefun(t,y)
t = [0:0.01:10];
y = [0 0]';
y(1) = y(2);
y(2) = sin(2*t)-2*y(2)-2*y(1);  % I get an error here
end

此代码的最后一行出现错误。 MATLAB 没有告诉我错误是什么。它只是告诉我该行有错误。

为什么会出现此错误以及如何解决?

【问题讨论】:

  • 请逐字复制并粘贴您的错误消息。

标签: matlab ode


【解决方案1】:

您需要仔细阅读各种 ode 求解器的文档和那里的示例,然后将您的代码更正为类似

% Solve ODE y''(t)+2*y'(t)+2*y(t) = sin(2*t), y(0)=y'(0)=0
function ydot = odefun(t,y)
  ydot = zeros_like(y)
  ydot(1) = y(2);
  ydot(2) = sin(2*t)-2*y(2)-2*y(1);
end
% or 
% odefun = @(y,t) [ y(2); sin(2*t)-2*y(2)-2*y(1) ]

% define sample points
tspan = [0:0.01:10];
% define initial value to t=tspan(1)
y0 = [0 0]';
[ t, y ] = ode45(odefunc, tspan, y0)
% t,y now contain the times and values that 
% the solution was actually computed for.

【讨论】:

    【解决方案2】:

    您尝试为 y(2) 分配 1001 个元素的向量:

    >> size(sin(2*t)-2*y(2)-2*y(1))
    
    ans =
    
               1        1001
    

    错误信息很清楚:

    在赋值 A(:) = B 中,A 和 B 中的元素个数必须相同。

    另外,yt 永远不会使用,因为您在函数中重新定义了它们。

    【讨论】:

      猜你喜欢
      • 2016-09-20
      • 2015-08-14
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      相关资源
      最近更新 更多