如何在MATLAB中编写常微分方程?

如何在MATLAB中编写常微分方程?,matlab,ode,Matlab,Ode,我试着用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没有告诉我错误是什么。它只是告诉我那行有个错误 为什么会出现此错误以及如何解决它 您尝试将1001个元素的向量分配给y(2) >>

我试着用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没有告诉我错误是什么。它只是告诉我那行有个错误


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

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

>> size(sin(2*t)-2*y(2)-2*y(1))

ans =

           1        1001
错误信息非常清楚:

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


此外,
y
t
从未使用过,因为您在函数中重新定义了它们。

您需要仔细阅读各种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.

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