C++一元三次方程求解算法
2013年01月27日 14:18:05
阅读:1118
令
x = z - b/3a,
代入可得
z^3 + pz + q = 0,
对上面化简的方程,有求根公式:
x = (-q / 2 + (q ^ 2 / 4 + p ^ 3 / 27) ^ (1 / 2)) ^ (1 / 3) + (-q / 2 - (q ^ 2 / 4 + p ^ 3 / 27) ^ (1 / 2)) ^ (1 / 3),
x = w (-q / 2 + (q ^ 2 / 4 + p ^ 3 / 27) ^ (1 / 2)) ^ (1 / 3) + w ^ 2 (-q / 2 - (q ^ 2 / 4 + p ^ 3 / 27) ^ (1 / 2)) ^ (1 / 3),
x = w ^ 2 (-q / 2 + (q ^ 2 / 4 + p ^ 3 / 27) ^ (1 / 2)) ^ (1 / 3) + w (-q / 2 - (q ^ 2 / 4 + p ^ 3 / 27) ^ (1 / 2)) ^ (1 / 3).
其中w是三次本原单位根
w = ( i√3 - 1 ) / 2.
4.用牛顿迭代法比较好(特别是解高阶方程的时候),比如用牛顿迭代法求方程
2x3-4x2+3x-6=0 在1.5附近根。 代码如下:
#include
main()
{
float x,x0,f,f1;