Octave 为什么我会得到;越界1“;八度误差?

Octave 为什么我会得到;越界1“;八度误差?,octave,Octave,运行此脚本后,我得到 theta = [pi/2; 0; -pi/2; 0]; t = linspace(0, 20, 10000); g = 9.81; r = 2; l = 3; k = 1; function thetprim = v(theta, t) thetprim = [ theta(2); -g/r * sin(theta(1)) - k * (theta(1) - theta(3)); theta(4); -g/l * sin(theta(3)) - k * (th

运行此脚本后,我得到

theta = [pi/2; 0; -pi/2; 0]; 
t = linspace(0, 20, 10000);

g = 9.81;
r = 2;
l = 3;
k = 1;


function thetprim = v(theta, t)
  thetprim = [ theta(2); -g/r * sin(theta(1)) - k * (theta(1) - theta(3)); theta(4); -g/l * sin(theta(3)) - k * (theta(3) - theta(1))];
endfunction

y = ode45('v', theta, t);

hold on;
  title('Title')
  xlabel('X Axis');
  ylabel('Y Axis');
  plot(t, [y(:,1), y(:,3)]);
hold off;

disp(theta(2))

错误,即使在我注释函数和绘图并尝试显示θ(2)后,它显示了正确的值。这里发生了什么事?

我认为你只是在错误地传递参数

首先,如果您查看ode45的文档:

--[T,Y]=ode45(乐趣、交易、初始)

您将看到第二个参数是范围,第三个是初始值。在我看来,你可能是在用另一种方式传递论点

其次,
v
函数似乎也不符合ode45所期望的“规范”。从文件中:

FUN是一个函数句柄、内联函数或包含 定义ODE的函数的名称:“y”=f(t,y)”。这个 函数必须接受两个输入,其中第一个是时间T,另一个是 第二个是未知量Y的列向量

而您的
v
函数似乎有效地对应于“f(y,t)”规范

error: theta(2): out of bound 1 (dimensions are 1x1)