matlab解微分方程

微分方程组是这样的
dx/dt=v
dv/dt=1/m(F1-F2)
我用的是doe45
现在遇到的问题是我的m是常数,但F1和F2不是,他们是我之前算出来31x1的矩阵,而且跟t没有直接的关系
但实际上t和F1,F2是一个一个对应的
要怎么解决啊

在要求解的函数里插值就行,

xv=ode45(@(t,y)func1(t,y),[0,0.004013],[0;0]);
plot(xv.x,xv.y(2,:))

function dy=func1(t,y)
% y=[x v]
% dy=[dx dv]=[v 1/m*(F1-F2)]
m=100;
tLim=[0,0.004013];
F1Set=[3656.74454469459,67869.1787495316,121550.188665648,165211.718529302,...
199585.117249431,225401.733734974,243612.321567554,255240.769219682,...
261091.560491194,262042.314072814,259043.783546165,252754.182929290,...
243831.726240235,233007.762387939,220647.965826871,207337.415684183,...
193441.786414344,179253.617580929,165065.448747514,151096.684586780,...
137566.729771410,124475.584301404,112115.787740336,100414.205197313,...
89517.1064541235,79351.3566198726,57557.1591334928,44612.2834452740,...
36055.5012106887,30131.5750482834,25743.4815946499];
F2Set=[1868.40000000000,4686.49743271077,5594.02041651004,6066.11580697016,...
6539.72567084899,6817.55253876499,7187.35759550376,7398.44149538618,...
7722.71343453855,7909.41426199502,8219.80527493458,8402.88277865549,...
8709.68898453318,8899.37904618435,9217.70035272794,9423.95576442877,...
9774.61460552958,10012.3343222345,10404.4855391109,10688.5019910836,...
11136.6530965049,11496.6588798446,12025.4367216906,12480.2336854345,...
13128.6033182773,13716.7940745684,15230.8672340156,16576.0061521937,...
18009.1267201830,19301.7652683768,20699.1784023863];

tSet=linspace(tLim(1),tLim(2),length(F1Set));

F1=interp1(tSet,F1Set,t);
F2=interp1(tSet,F2Set,t);


dy=[y(2);1./m.*(F1-F2)];
end

 

不过有几个小问题哈

1)不知道原文中给的意思是(1/m) * (F1-F1)还是(1/m)/(F1-F1),因为CSDN会把乘号当成加粗字符,怀疑这里是乘号被吞了,于是按照乘法算了,要是理解错了请自行更改代码最后一行

2)初始值不明确,这里就设置了[0;0]

 

没看懂你啥意思,如果你的 t 和 F是一一对应的话,变成同维度不就好了。