非线性微分方程 matlab,用ODE45求解Matlab中微分方程的非线性系统
我正在嘗試使用ODE45 MATLAB解決非線性微分方程系統,我做了很多次成功,但這次我得到以下錯誤,我真的不知道有什么不對,我很困惑 . 這是代碼 .
%%這是錯誤:
Subscript indices must either be real positive integers or logicals.
Error in non_L_ss (line 6)
(-Fk*(ds0+x(3)-x(1))+Fk*ds0-Fc(x(4)-x(2)))/ms +Fa/ms ] ;
Error in odearguments (line 87)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed,solver_name,ode, tspan,y0,optio varargin);
Error in solve (line 50)
[t X]=ode45(@non_L_ss,t_span,IC);
%%方程式在函數中定義:
function dX=non_L_ss(t,x)
global Fk Fc kt Fa q ds0 ms mu
dX=[ x(2);
(Fk*(ds0+x(3)-x(1))-Fk*ds0+Fc*(x(4)-x(2))-kt*x(1))/mu-Fa/m-kt*q/mu ;
x(4);
(-Fk*(ds0+x(3)-x(1))+Fk*ds0-Fc(x(4)-x(2)))/ms +Fa/ms ] ;
end
%%,這里函數被ODE45調用來解決:
clear
clc
global Fk Fc kt Fa q ds0 ms mu qdot v2
mu = 100 ;
ms = 1242 ;
k1s = 80000 ;
k2s = 32000 ;
kt = 405000 ;
c1s = 4000 ;
c2s = 1600 ;
v = 20 ;
Gq = 256e-6 ;
ds0 = 0.1538 ;
a = 1 ;
b = 0.001 ;
n0 = 0.1 ;
f0 = 0.011*v ;
w = 0.5 ;
Fa = 2000 ;
q = 0.05 ;
xs = 0.1 ;
xu = 0.1 ;
dxs = 0.1 ;
dxu = 0.2 ;
Fk = k1s+k2s*(ds0+xs-xu).^2 ;
if dxs >= dxu
Fc = c1s ;
elseif dxs < dxu
Fc = c2s ;
end
t_span=[0 1];
IC=[2 3 2 2];
[t X]=ode45(@non_L_ss,t_span,IC);
總結
以上是生活随笔為你收集整理的非线性微分方程 matlab,用ODE45求解Matlab中微分方程的非线性系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [原创]C/C++语言中,如何在main
- 下一篇: 自动部署war包脚本