台灣最大程式設計社群網站
線上人數
892
 
會員總數:245225
討論主題:189095
歡迎您免費加入會員
討論區列表 >> C/C++ >> 請問大大,牛頓法解多項式複數根要如何寫
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請問大大,牛頓法解多項式複數根要如何寫
價值 : 80 QP  點閱數:5734 回應數:1

樓主

jy
門外漢
0 1
8 0
發送站內信

以下為用牛頓法求解,但是只能求出實數根,依照牛頓法定裡,要求複數根,初始值要用複數帶入,由於c沒有複數i的功能,要如何寫才能把另外兩個複數根求出來??
急件,麻煩高手幫忙一下,謝謝!!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double y(double x)
{
//多項式x^4-3x^3+6x^2-68
double z;
z = pow(x,4) - 3*pow(x,3) + 6*pow(x,2) - 68;
return(z);
}

double yp(double x)
{
//多項是作微分4x^3-9x^2+12x
double z;
z = 4*pow(x,3) - 9*pow(x,2) + 12*x;
return(z);
}

int main(void)
{
//找出初始值
double a, b, xa, xb, i, j;
double ans[20];
int TotalAns = 0, k, n;
a = -10;
b = 10;
for (i=a,j=a;i<=b;j=i,i+=0.1)
if (y(i)*y(j) < 0)
ans[TotalAns++] = j;

n = 1;
//牛頓法求根
for (k=0;k<TotalAns;k++) {
xa = ans[k];
while(1) {
xb = xa-y(xa)/yp(xa);
if (xa-xb < 0.0000000001 && xa-xb > -0.0000000001) break;
xa = xb;
}
printf("X%d = %.9f\n\n",n++,xa);
}
//此多項式4個解為 3.2001,-2.0425,0.92122+3.0911i,0.92122-3.0911i

   return 0;
}

搜尋相關Tags的文章: [ 牛頓法解多項式複數根 ] ,
本篇文章發表於2005-03-17 03:28
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

阿魚
捐贈 VP 給 t313036 檢舉此回應
先寫一個if判斷判別式是否為正,若為負則先加一個負號來計算,結果在補i
本篇文章回覆於2005-03-17 12:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.