Octave-具有lsode的微分方程组

时间:2019-02-05 11:55:59

标签: octave

这是我的问题。由于以下两个函数,我试图求解一个包含两个微分方程的系统。给我带来麻烦的代码部分是变量“ rho”。 “ rho”是一个函数,其值是从文件中给出的,我尝试将其放入变量rho中。

function [xdot]=f2(x,t) 
# Parameters of the equations
t=[1:1:35926];
x = dlmread('data_txt.txt');
rho=x(:,4);
beta = 0.68*10^-2;    
g = 1.5;         
l = 1.6;         

# Definition of the system of 2 ODE's :

xdot(1) = ((rho-beta)/g)*x(1) + l*x(2); 
xdot(2) = (beta/g)*x(1)-l*x(2);    

endfunction

# Initial conditions for the two variables :
x0 = [0;1];

# Definition of the time-vector -> (initial time,temporal mesh,final time) :
t = linspace (1, 10, 10000);  

# Resolution with the lsode routine :
x = lsode ("f2", x0, t);

# Plot of the two curves :
plot (t,x);

运行代码时,出现以下错误:

>> resolution_effective2

  error: f2: A(I) = X: X must have the same size as I
  error: called from
  f2 at line 34 column 9
  resolution_effective2 at line 8 column 3
  error: lsode: evaluation of user-supplied function failed
  error: called from
  resolution_effective2 at line 8 column 3
  error: lsode: inconsistent sizes for state and derivative vectors
  error: called from
  resolution_effective2 at line 8 column 3

我知道我的错误来自某个变量之间的大小不匹配,但是我已经寻找错误好几天了,但我没有看到。有人可以给我解释一下有效的纠正方法吗? 谢谢

1 个答案:

答案 0 :(得分:0)

该错误可能来自您的函数f2。它的第一个参数x应该与x0具有相同的维数,因为x0x的初始条件。

在您的情况下,您打算成为f2的第一个参数的意图都会被忽略,因为您在函数中执行x = dlmread('data_txt.txt');似乎是一个错误。

然后,xdot(1) = ((rho-beta)/g)*x(1) + l*x(2);将成为问题,因为rho是向量。

您需要检查xrho的尺寸。