rtist
方程式:
其中
0<p,q<1
a,b>0
均已知。
我想求x在(0,1)上的根。
请问应该怎么求?
谢谢
yihui
式子的左边关于x在(0, 1)上是严格递减函数(用f(x)表示),f(0)>0,f(1)<0,说明只有唯一的根,可以用二分法搜索到这个唯一的根。
试了一下p=0.5,q=0.3,a=2,b=3的情况,方程的根大约是0.321
rtist
谢谢,我以前也一直在用uniroot,可是发现很慢(如果有几万个这样的方程需要解的话),所以想知道有没有closed form solution。
ypchen
只有数值解,牛顿法、弦切法都挺好用的,速度也快
统计剑侠
先 Happy New Year一下,
可否用"埃特金(Aitken)方法试试?
yihui
closed-form solution恐怕很难找吧……
ypchen
[quote]引用第4楼统计剑侠于2007-01-01 15:05发表的“”:
先 Happy New Year一下,
可否用"埃特金(Aitken)方法试试? [/quote]
Aitken method是加速收敛用的,建立在其他数值解法基础上的,既然方程是单调的,我猜用牛顿法还是够快的,不够的话再加速,很管用
rtist
[quote]引用第3楼ypchen于2007-01-01 12:17发表的“”:
只有数值解,牛顿法、弦切法都挺好用的,速度也快[/quote]
thanks,
可是怎么知道只有数值解的?
小木匠
此乃超越方程
rtist
[quote]引用第8楼小木匠于2007-01-01 19:39发表的“”:
此乃超越方程[/quote]
请问仅仅因为a,b不是整数,所以也算超越方程么?
rtist
[quote]引用第5楼谢益辉于2007-01-01 15:15发表的“”:
closed-form solution恐怕很难找吧……[/quote]
如果按照你的例子来说,a,b都是整数,那么应该肯定有closed form solution啊?
这个问题一旦变得不是整数会很麻烦么?
ypchen
[quote]引用第10楼rtist于2007-01-02 03:25发表的“”:
如果按照你的例子来说,a,b都是整数,那么应该肯定有closed form solution啊?
这个问题一旦变得不是整数会很麻烦么?[/quote]
当a,b为正整数,a·b<=4时,有代数解法
a·b=1,2时的解析解比较简单,大家也都知道
a·b=3时,如果方程有实数根,其解析式里必定有复数的立方根的形式,所以最后得到形式也没多大用
a·b=4时,必须先解一个三次方程,这样就转化到上面的情况,很麻烦
但是,a·b=正整数时,用matlab里的roots()函数能比较快解出所有根,包括实根和复根
其原理里求方程所对应的伴随矩阵的特征值,这一问题有很多方法,比较厉害的应该是QR分解
我想matlab里应该用的就是这种方法
当a·b不等于正整数时,方程是超越的,只有非常平凡的情况有解析解
根据牛顿法或其他方法自己编写函数,这样比较有针对性
解上万个方程也用不了多久
如果你不嫌麻烦,可以查查拉格朗日级数,这是种很特殊的级数,可能可以解出这个方程的级数解
但不知道收敛速度怎么样,我也没有用过。只听说它能给出开普勒方程的级数解
rtist
[quote]引用第11楼ypchen于2007-01-02 10:23发表的“”:
当a,b为正整数,a·b<=4时,有代数解法
a·b=1,2时的解析解比较简单,大家也都知道
a·b=3时,如果方程有实数根,其解析式里必定有复数的立方根的形式,所以最后得到形式也没多大用
.......[/quote]thx
不过听了你的解释挺郁闷的,人类连看起来这么简单的东西居然都只有数值解。。。
我还是继续 uniroot 吧,复杂的方法对简单的问题可能更慢。