Mathematica是如何求解这个方程的
来源:百度知道 编辑:UC知道 时间:2024/09/27 21:31:30
Mathematica对于数值计算非常强,我这样玩:
Expand[(x - Sqrt[Sqrt[4^(1/3) - 8^(1/7)]] + 5000^(1/100) -
7*(7 - 7^(1/7))^(1/7)*I)^4*(x - Sqrt[Sqrt[4^(1/3) - 8^(1/7)]] +
5000^(1/100) +
7*(7 - 7^(1/7))^(1/7)*
I)^4*(x - (Sqrt[700] + Log[3])^(Sinh[3]/Tan[2]))^2]
然后:
然后:NSolve[Collect[%, x] == 0, x, 300],不到七秒钟它解出了这个方程的精确数值解,精确到小数点后300位,这是如何做到的,它是如何预定义求解精度的?
还有解超越方程如sin(x)=x/2这种的为什么要一个一个找用FindRoot,而不能直接一下子找到所有的根呢?为什么多项式的可以?望各位数学系的强人能够鼎力相助。
Expand[(x - Sqrt[Sqrt[4^(1/3) - 8^(1/7)]] + 5000^(1/100) -
7*(7 - 7^(1/7))^(1/7)*I)^4*(x - Sqrt[Sqrt[4^(1/3) - 8^(1/7)]] +
5000^(1/100) +
7*(7 - 7^(1/7))^(1/7)*
I)^4*(x - (Sqrt[700] + Log[3])^(Sinh[3]/Tan[2]))^2]
然后:
然后:NSolve[Collect[%, x] == 0, x, 300],不到七秒钟它解出了这个方程的精确数值解,精确到小数点后300位,这是如何做到的,它是如何预定义求解精度的?
还有解超越方程如sin(x)=x/2这种的为什么要一个一个找用FindRoot,而不能直接一下子找到所有的根呢?为什么多项式的可以?望各位数学系的强人能够鼎力相助。
在你定义精度的时候Mathematica会根据你的定义开辟更多的空间存储每一位数,保证达到所用的精度。所以说Mathematica号称可以进行任意精度的运算。
这种超越方程没有解析解,只能采用迭代的方式数值解,所以只能给一个起始点然后迭代找到附近的一个解。
可以用Plot先看一下图再用FindRoot解以防止漏根。