zhijieguo 发表于 2010-12-1 12:08

请教一个常微分方程的求解方法

本帖最后由 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

本帖最后由 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

zhijieguo 发表于 2010-12-1 12:15

调用语句
clear %清除workspace中的数据
clc   %清除屏幕
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
=ode45('fun1',,);
plot(t,z(:,1),t,z(:,2));

zhijieguo 发表于 2010-12-1 12:15

本帖最后由 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这个内部函数有些要求,而我违反了。)

zhijieguo 发表于 2010-12-1 12:17

我是matlab新手,也是初次算常微分方程。
各位大神,谁能帮忙看看这个问题怎么解决。先谢过了。

huaijuliu 发表于 2010-12-9 08:12

dz(2)=-3*z(2)-5*z(1)-f;
我仅以此句为例给楼主点建议。
这种情况下你必须先定义z类型,否则它不会知道z是个什么东东。
我也下载了你的文件 但我不知道你这句到底什么意思
-f ?? f是个矩阵 怎么能用一个数值或一个向量减呢?
页: [1]
查看完整版本: 请教一个常微分方程的求解方法