声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1171|回复: 5

[综合讨论] 为什么程序运行和书上的不一样?

[复制链接]
发表于 2007-8-12 00:45 | 显示全部楼层 |阅读模式

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

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

x
请教一下各位高手,我照着书本键入了以下的程序,但是得到的结果却于书上的差距很大,请各位帮忙看看,谢谢了!!!
function dx=jisi(t,x)
a=20;b=40;c=15;
s=sqrt((c-x(1))^2+(a*t-x(2)^2));
dx=[b*(c-x(1))/s;b*(a*t-x(2))/s];


ts=0:0.1:2;
x0=[0,0];
opt=odeset('reltol',1e-2,'abstol',1e-3);
[t,x]=ode45(@jisi,ts,x0,opt);
[t,x],
plot(t,x),grid,
gtext('x(t)'),gtext('y(t)'),pause
plot(x(:,1),x(:,2)),grid,
gtext('x'),gtext('y')

作出的y(x)图形书本上最后是沿着x=15竖直向上的,没有回转,而且当t=1时,x(t)=3.9561,和实际的运算结果也不一样,是什么原因造成的呢?麻烦各位帮忙看看,不胜感激!!!

[ 本帖最后由 eight 于 2007-8-12 10:52 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-8-12 09:00 | 显示全部楼层
最好把你的结果和书上的结果都贴一下,这样看着也直观点!
 楼主| 发表于 2007-8-12 23:00 | 显示全部楼层
书上的结果贴不上啊....我没有电子稿哦....
发表于 2007-8-13 08:36 | 显示全部楼层
拿手机或者相机照一下也可以 啊!呵呵!

还有,你的这句话可能有点问题吧——
s=sqrt((c-x(1))^2+(a*t-x(2)^2));
是不是应该是这样的——
s=sqrt((c-x(1))^2+(a*t-x(2))^2);
发表于 2007-8-13 09:41 | 显示全部楼层

回复 #1 wuygoon 的帖子

你的精度是不是太低了,

ts=0:0.1:2;  %%% 步长太长
x0=[0,0];
opt=odeset('reltol',1e-2,'abstol',1e-3); %% 精度太低
[t,x]=ode45(@jisi,ts,x0,opt);
[t,x],    % 没有必要的语句
plot(t,x),grid, % 确定你所需要的
gtext('x(t)'),gtext('y(t)'),pause
plot(x(:,1),x(:,2)),grid,
gtext('x'),gtext('y')
 楼主| 发表于 2007-8-13 10:48 | 显示全部楼层
谢谢octopussheng哈,我确实打错了,但是改好之后还是跟书上的不一样,最后结果里的曲线还是往回弯的。。。。
另外,我想请无水1324帮忙改改我的程序好吗?而且还有一个问题,像我在程序里输入类似“1e-3”的精度设置,但是最后显示的结果为什么没按照1e-3输出呢?麻烦各位再帮我看看,谢谢了。

[ 本帖最后由 eight 于 2007-8-15 19:41 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-24 01:21 , Processed in 0.060258 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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