- 积分
- 16
- 注册时间
- 2009-9-12
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2011-6-16 14:21:52
|
显示全部楼层
来自 湖北武汉
本帖最后由 maplelab 于 2011-6-16 14:59 编辑
超越方程一般不是用solve,
而是用fslove.
通过给定初值去搜索解.
比如:- restart;
- eq:=x->cosh(x)*cos(x)-1.0:
- (p->(fsolve)(eq,p))~(
- {
- 0.0,4.3,-4.3,7.8,-7.8
- });
复制代码
如果嫌初值设置麻烦,就用随机初值.
具体做法是确定一个合适的数值范围,然后以该范围内的一定数量的随机值作为
初值进行搜索,并合并给定误差限内的近似解.
这个方法当随机值达到适当规模时,可以得到稳定的解集.
不过,有时候有必要验证解的正确性.
对本题而言,
用
可知,有好几个解在范围-8..8之内.
因此可以做:
- (p->(MmaTranslator[Mma][Chop]@fsolve)(eq,p))~(
- RandomTools[Generate](set(float(range=-8..8),50))
- );
复制代码
解为
0.000000
-7.853205
-4.730041
4.730041
7.853205 |
|