fanghuikeer 发表于 2006-10-3 10:11

我有一个关于微分方程数值解的问题,急需大家的帮助!!

关于龙格_库塔法求这个微分方程已经困绕我快一个月了,我也是刚学习matlab不久,希望哥哥姐姐们能给我一个指点与帮助,不胜感激,十一假期愉快!!!

笑石头 发表于 2006-10-3 19:52

syms t y z
f=int('abs(cos(t/2)+y*sin(pi*z))','z',0,1);
y=dsolve('D2y+Dy+y+f=cos(t/2)','t')

y =

-2/39*cos(1/2*3^(1/2)*t)*cos(1/2*(3^(1/2)+1)*t)*3^(1/2)-10/39*cos(1/2*3^(1/2)*t)*sin(1/2*(3^(1/2)+1)*t)*3^(1/2)+2/39*cos(1/2*3^(1/2)*t)*cos(1/2*(3^(1/2)-1)*t)*3^(1/2)-10/39*cos(1/2*3^(1/2)*t)*sin(1/2*(3^(1/2)-1)*t)*3^(1/2)+10/39*sin(1/2*3^(1/2)*t)*cos(1/2*(3^(1/2)-1)*t)*3^(1/2)+6/13*cos(1/2*3^(1/2)*t)*cos(1/2*(3^(1/2)-1)*t)+6/13*cos(1/2*3^(1/2)*t)*cos(1/2*(3^(1/2)+1)*t)+4/13*cos(1/2*3^(1/2)*t)*sin(1/2*(3^(1/2)+1)*t)-4/13*cos(1/2*3^(1/2)*t)*sin(1/2*(3^(1/2)-1)*t)-f+4/13*sin(1/2*3^(1/2)*t)*cos(1/2*(3^(1/2)-1)*t)-4/13*sin(1/2*3^(1/2)*t)*cos(1/2*(3^(1/2)+1)*t)-2/39*sin(1/2*3^(1/2)*t)*sin(1/2*(3^(1/2)+1)*t)*3^(1/2)+2/39*sin(1/2*3^(1/2)*t)*sin(1/2*(3^(1/2)-1)*t)*3^(1/2)+10/39*sin(1/2*3^(1/2)*t)*cos(1/2*(3^(1/2)+1)*t)*3^(1/2)+6/13*sin(1/2*3^(1/2)*t)*sin(1/2*(3^(1/2)-1)*t)+6/13*sin(1/2*3^(1/2)*t)*sin(1/2*(3^(1/2)+1)*t)+C1*exp(-1/2*t)*sin(1/2*3^(1/2)*t)+C2*exp(-1/2*t)*cos(1/2*3^(1/2)*t)


以上在matlab 6.5运行结果

MVH 发表于 2006-10-3 21:08

式子中的Z是什么?

Tla 发表于 2006-10-3 21:58

先批示一下,二楼的结果肯定不合理,至于结果到底是多少呢?由于我现在用的也是6.5版,得仔细地想想了,不过,据说在7版以后的好像就能得出正确的结果,正确的答案是多少?得容我们再想想,
-----这个问题有一些严重了,

jimin 发表于 2006-10-3 23:56

>>syms t y z
f=int('abs(cos(t/2)+y*sin(pi*z))','z',0,1);
>> y=dsolve('D2y+Dy+y+f=cos(t/2)','t')


y =

exp(-1/2*t)*sin(1/2*3^(1/2)*t)*C2+exp(-1/2*t)*cos(1/2*3^(1/2)*t)*C1+12/13*cos(1/2*t)+8/13*sin(1/2*t)-f
其中
f =

signum(cos(1/2*t))*(cos(1/2*t)*pi+2*y)/pi

我用的是7.0,做了一下,这个比6.5的做出来短多了,但是能不能这样做,我是感觉有问题的,这个问题没仔细考虑,还是等想清楚一些再来讨论吧

[ 本帖最后由 jimin 于 2006-10-3 23:57 编辑 ]

fanghuikeer 发表于 2006-10-4 08:38

这个方法我也想过,感觉没有那么简单,可能需要一个循环或者迭代!谢谢上面的回复...

Tla 发表于 2006-10-4 11:50

function Yd = myfun(t,Y)
%   函数文件
%   用 int 解的 含有 abs的积分, ,sign返回值只有 -1,0,1
%   F = sign(cos(1/2*t))*(cos(1/2*t)*pi+2*Y)/pi;
%自己去想想为什么??
%结果是否正确,我也不知道,

ss = sign(cos(1/2*t));
cc = cos(1/2*t);
tt = cos(t/5);

Yd = ;

%函数文件结束
% 在命令窗中输入的命令
>> t = ;
>> y = ;
>> = ode45('myfun',t,y);
>> plot(X,Y)

fanghuikeer 发表于 2006-10-4 20:58

signum(cos(1/2*t))*(cos(1/2*t)*pi+2*y)/pi
上面的signum是什么意思呢,我在matlab的帮助文件里找不到这个函数!
清高手指点一下...
谢谢拉

fanghuikeer 发表于 2006-10-4 21:04

原帖由 Tla 于 2006-10-4 11:50 发表
function Yd = myfun(t,Y)
%   函数文件
%   用 int 解的 含有 abs的积分, ,sign返回值只有 -1,0,1
%   F = sign(cos(1/2*t))*(cos(1/2*t)*pi+2*Y)/pi;
%自己去想想为什么??
%结果是否正确,我也不知道 ...
这个过程中Z是怎么积出去的呢!?

jimin 发表于 2006-10-4 21:12

signum是符号计算中的符号取值函数,其含义和数值计算中的sign一致

Tla 发表于 2006-10-5 11:42

,,,,,一切都要靠自己...

关于那个含 abs 的积分,前面的几个回帖中都已经给出来了,照抄进去不就行了,
看,jimin回答得多好,
页: [1]
查看完整版本: 我有一个关于微分方程数值解的问题,急需大家的帮助!!