我正试图用解算器ode23s在OCTAVE中求解一些ODE(完全相同的算法在Matlab中完美运行(,但我收到了一个"x"未定义的错误,而当我使用解算器odel23或odel15s时,即使这是我唯一的更改,也不会发生这种情况。
下面你可以看到提到的代码和错误:
model = [Fg1 Fg2 ui mi ... gi]; %model is a vector of (1,77)
options = odeset('RelTol',1e-4,'AbsTol',5e-6*ones(16,1));
[T,Y] = ode23s(@odesys_test,0:dt:10,init,options,model);
功能代码:
function [dx] = odesys_test(t,x,model)
global tt
Fg1 = model(1);
错误:
错误:第5列第5行附近未定义"模型">
错误:从调用odesys_test第5行第5列第121行第5列的runge_kutta_23s第135行第39列的integrate_adaptive第217行第12列的ode23DOF2_测试第189行第15列
根据倍频程的文档,语法为
[T, Y] = ode23s (FUN, TRANGE, INIT, ODE_OPT)
您正在传递一个额外的model
参数,该参数不是函数签名的一部分。
此外,您创建的odesys_test
函数不符合ode23s
所期望的规范。仔细阅读文档。
也许你想做的只是创建一个匿名函数,确实满足规范,并用它来"包装"你的odesys_test函数,例如
[T,Y] = ode23s( @(t, x) odesys_test(t, x, model), 0:dt:10, init, options,model );