→ tropical72:orz .. 我動作太慢了.. 07/14 23:31
→ firejox:別灰心T大 明天他可能就會看到了 07/14 23:34
→ firejox:不過dfx應該可以跟fx合併於一個for 07/14 23:36
→ tropical72:對,可以合併在一個 for. 07/14 23:42
那段副函式我會設計成這樣
double Cal(double *Coef, int n, double xvalue)
{
int i;
double fx=Coef[0], dfx=0;
double pow_t=1; // 紀錄 x^i, i=[0,n]
for(i=1; i<=n; ++i){
dfx += pow_t*Coef[i]*i;
pow_t*=xvalue; // pow_t = x^i
fx += pow_t*Coef[i];
}
return fx/dfx;
}
的確用一個 loop 就算出來, 因收斂條件用到的是 f(x)/f'(x),
也可以直接傳回 delta 也沒問題,
return (x-fx/dfx);
這樣就可以當作是下一個 x 之迭代,更方便,
實在沒必要還要多設一個 struct 還是引數再用二個 int *fx , int *dfx。
※ 編輯: tropical72 來自: 180.177.78.41 (07/15 00:09)
推 EarthQ:先謝謝啦! 07/16 11:51
→ EarthQ:第一個問題阿 我做出來是每個解都有找到ㄟ 我想是我有設 07/16 11:52
→ EarthQ:設一個sum 把每一次找到的解都先去掉 所以應該不會重復吧 07/16 11:53
→ EarthQ:說錯== 是第二個問題 然後第一個 因為有把找到的除掉了 07/16 11:54
→ EarthQ:所以雖然可能沒10個點 但不會有問題 07/16 11:55
→ EarthQ:((應該是吧 照我對教授說得的了解.. 07/16 11:55
推 EarthQ:然後學起來了 用struct 可能會照成誤會 .. 07/16 11:57
推 EarthQ:謝謝啦!! 下次會加入勘根 07/16 11:59
→ tropical72:我想補的是,我真的確定,你求出來的根是錯的 07/16 14:07
→ tropical72:考慮 f(x) = (x-2.31)(x+1.78)(x-4.95),展開變 07/16 14:07
→ tropical72: = x^3 - 5.48x^2 - 1.4883x + 20.394828 07/16 14:07
→ tropical72:你拿這個去輸入,答案是錯的. 07/16 14:08
→ tropical72:不是浮點數誤差那種,是差很大的那種. 07/16 14:08
推 EarthQ:恩恩恩 得到 2.313838 -1.781504 4.94766 這樣誤差算很 07/16 21:00
→ EarthQ:大嗎? 07/16 21:01
→ EarthQ:那我該加入些什麼呢? ((煩請不吝賜教 :) 07/16 21:02
→ firejox:我覺得不要有sum 就會比較好... 07/17 17:08