请教一个常微分方程的求解方法
本帖最后由 zhijieguo 于 2010-12-1 12:10 编辑请问:
方程中含有一个函数f(t),比如下面这个方程:x’’+3x'+5x+f(t)=0。初值:当t=0时x=0,x'=1。
f(t)是试验测得的一组数据,也就是说仅仅知道f(t)的数值解,而无其解析表达式(我试过用正弦级数拟合,效果不好)。
如果我要用ode45来求方程的数值解,应该怎么做?
注:f(t)的数据在附件中。
谢谢大家。 本帖最后由 zhijieguo 于 2010-12-1 12:14 编辑
我自己做了一下,遇到一些问题:
函数文件:
%定义方程组的函数M文件:
function dz=fun1(t,z)
f=xlsread('1');
%
%=======================
dz=zeros(2,1);
%=======================
dz(2)=-3*z(2)-5*z(1)-f;
dz(1)=z(2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
return
调用语句
clear %清除workspace中的数据
clc %清除屏幕
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
=ode45('fun1',,);
plot(t,z(:,1),t,z(:,2)); 本帖最后由 zhijieguo 于 2010-12-1 12:16 编辑
按照我的程序,计算的时候报错:
???In an assignmentA(I) = B, the number of elements in B and
I must be the same.(好像在说dz(2),dz(1)和f不匹配)
Error in ==> fun1 at 8
dz(2)=-3*z(2)-5*z(1)-f;
(好像在说dz(2),dz(1)和f不匹配,dz(2)是向量元素?f是向量,无法赋值?)
Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
(以上两处错误,好像在说ode45这个内部函数有些要求,而我违反了。)
我是matlab新手,也是初次算常微分方程。
各位大神,谁能帮忙看看这个问题怎么解决。先谢过了。 dz(2)=-3*z(2)-5*z(1)-f;
我仅以此句为例给楼主点建议。
这种情况下你必须先定义z类型,否则它不会知道z是个什么东东。
我也下载了你的文件 但我不知道你这句到底什么意思
-f ?? f是个矩阵 怎么能用一个数值或一个向量减呢?
页:
[1]