声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1434|回复: 10

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

[复制链接]
发表于 2006-10-3 10:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

Runge-kutta法解常微分方程.doc.doc

17 KB, 下载次数: 13

下面是我用word编辑的公式文件

回复
分享到:

使用道具 举报

发表于 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运行结果

评分

1

查看全部评分

发表于 2006-10-3 21:08 | 显示全部楼层
式子中的Z是什么?
发表于 2006-10-3 21:58 | 显示全部楼层
先批示一下,二楼的结果肯定不合理,至于结果到底是多少呢?由于我现在用的也是6.5版,得仔细地想想了,不过,据说在7版以后的好像就能得出正确的结果,正确的答案是多少?得容我们再想想,
-----这个问题有一些严重了,
发表于 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 编辑 ]
 楼主| 发表于 2006-10-4 08:38 | 显示全部楼层
这个方法我也想过,感觉没有那么简单,可能需要一个循环或者迭代!谢谢上面的回复...
发表于 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 = [Y(2);tt-ss*cc-Y(2)-Y(1)*(1+2*ss)];

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

作出来的图片

作出来的图片

评分

1

查看全部评分

 楼主| 发表于 2006-10-4 20:58 | 显示全部楼层
signum(cos(1/2*t))*(cos(1/2*t)*pi+2*y)/pi
上面的signum是什么意思呢,我在matlab的帮助文件里找不到这个函数!
清高手指点一下...
谢谢拉
 楼主| 发表于 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是怎么积出去的呢!?
发表于 2006-10-4 21:12 | 显示全部楼层
signum是符号计算中的符号取值函数,其含义和数值计算中的sign一致

评分

1

查看全部评分

发表于 2006-10-5 11:42 | 显示全部楼层

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

关于那个含 abs 的积分,前面的几个回帖中都已经给出来了,照抄进去不就行了,
看,jimin回答得多好,
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-20 00:22 , Processed in 0.088913 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表