24小时热门版块排行榜    

查看: 596  |  回复: 3
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

pizi7880

木虫 (正式写手)

[求助] 为了求根,这样写法是否可以?

我想做这么一个事情:
一个粒子在牛顿方程下运动,知道这个粒子在某个tfin时刻的速度,反过来求解初始时间tr,和初始速度,vz0 和vy0 (二维平面),这里时间和速度满足一定的关系。
首先,我构建一个函数 vefx,它是 tr, vz0,vy0, 和ti的函数,输出表示在tfinshik的末速度vz,类似,vefy,它是 tr, vz0,vy0, 和ti的函数,输出表示在tfinshik的末速度vy。  我先猜测  tr, vz0,vy0, 和ti的可能大小,然后用 FindRoot命令寻找真实的  tr, vz0,vy0, 和ti的值。 以下是我的程序截图:
为了求根,这样写法是否可以?
求根.jpg

我的问题是,我的程序跑起来比较慢,有时给的结果误差还不小。我看别人的程序还有 ?Number之类的东西。请问,我该如何进一步优化我的程序,谢谢!

[ Last edited by pizi7880 on 2014-1-8 at 13:57 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pizi7880

木虫 (正式写手)

引用回帖:
2楼: Originally posted by walk1997 at 2014-01-09 12:14:26
加?NumericaQ之类的只是定义自变量范围
思想应该没问题。
优化的话,我觉得你第1,2行其实是重复求解了这个微分方程组2次,可以去掉整合成求1次就可以
其他的暂时看不出怎么优化 你可以把 代码贴上
其中的赋值也 ...

你说得是正确的  我重复求解这个微分方程。只是为了得到x和y方向的速度。我思考一下,改进并合并。谢谢
我写的程序比较大,里面很多循环计算,不好贴代码。
3楼2014-01-09 13:19:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 4 个回答

walk1997

金虫 (著名写手)

加?NumericaQ之类的只是定义自变量范围
思想应该没问题。
优化的话,我觉得你第1,2行其实是重复求解了这个微分方程组2次,可以去掉整合成求1次就可以
其他的暂时看不出怎么优化 你可以把 代码贴上
其中的赋值也给上  具体调试下看看
2楼2014-01-09 12:14:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)

引用回帖:
3楼: Originally posted by pizi7880 at 2014-01-09 13:19:00
你说得是正确的  我重复求解这个微分方程。只是为了得到x和y方向的速度。我思考一下,改进并合并。谢谢
我写的程序比较大,里面很多循环计算,不好贴代码。...

循环的地方最好也考虑优化下
一般的循环数值计算 Mathematica的效率可能并不高。。。。
4楼2014-01-09 14:29:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见