我是Octave的新手,所以我想在创建更复杂的项目之前做一些简单的示例工作。未能用Octave解决简单的ODE
我想解决ODE dy/dx = a*x+b
,但没有成功。下面是代码:
%Funzione retta y = a*x + b. Ingressi: vettore valori t; coefficienti a,b
clear all;
%Inizializza argomenti
b = 1;
a = 1;
x = ones(1,20);
function y = retta(a, x, b) %Definisce funzione
y = ones(1,20);
y = a .* x .+ b;
endfunction
%Calcola retta
x = [-10:10];
a = 2;
b = 2;
r = retta(a, x, b)
c = b;
p1 = (a/2)*x.^2+b.*x+c %Sol. analitica di dy/dx = retta %
plot(x, r, x, p1);
% Risolve eq. differenziale dy/dx = retta %
y0 = b; x0 = 0;
p2 = lsode(@retta, y0, x)
,输出是:
retta3code
r =
-18 -16 -14 -12 -10 -8 -6 -4 -2 0 2 4 6 8 10 12 14 16 18 20 22
p1 =
Columns 1 through 18:
82 65 50 37 26 17 10 5 2 1 2 5 10 17 26 37 50 65
Columns 19 through 21:
82 101 122
error: 'b' undefined near line 9 column 16
error: called from:
error: retta at line 9, column 4
error: lsode: evaluation of user-supplied function failed
error: lsode: inconsistent sizes for state and derivative vectors
error: /home/fabio/octave_file/retta3code.m at line 21, column 4
所以,retta
正常工作的第一次,但在lsode
使用时出现故障的功能。 这是为什么发生?需要改变什么才能使代码正常工作?
从手册lsode: “FCN的第一个参数是一个字符串,内联或函数句柄,它们命名函数f来调用以计算方程组右侧的向量,该函数的格式必须为XDOT = f(X, T)'其中XDOT和X是矢量,T是标量。“这对你的“retta”功能是否正确? – Andy
在我的情况下,它应该是ydot = f(y,x,a,b)。我必须测试它。 –