[問題] 請幫看一下我寫得程式哪裡錯了

看板C_and_CPP (C/C++)作者 ( )時間16年前 (2009/11/25 21:40), 編輯推噓3(3018)
留言21則, 4人參與, 最新討論串1/1
我用Dev-C++寫數值分析的作業不清楚哪邊寫錯了請版友指正 內容是要用Halley's method 一直迭代求tanπx-6 = 0的數值解 過程列表 2f(x_n)f'(x_n) Halley's method : x_n+1 = x_n - ---------------------------- 2[f'(x_n)]^2-f(x_n)f"(x_n) 初始值0 ,誤差小於10^(-6)時停止 --------------------------------- #include<iostream> #include<cmath> using namespace std; double func(double x); int main() { double a = 0.0,PI = 3.14159 ,tol = 1e-6; double fa;double dfa;double dfb;double ddfa; cout<<"===============Halley's Method==============="<<endl; cout<<"Step\t\tP\t\tError"<<endl; cout<<"---------------------------------------------"<<endl; for(int i=0;i++){ fa=func(a); dfa=(func(a+0.000001)-func(a))/0.000001; dfb=(func(a)-func(a-0.000001))/0.000001; ddfa=(dfa-dfb)/0.000002; a=a-2*fa*dfa/(2*dfa*dfa-fa*ddfa); cout<<i+1<<"\t\t"<<a<<"\t\t"<<fabs(2*fa*dfa/(2*dfa*dfa-fa*ddfa))<<endl; if(fabs(2*fa*dfa/(2*dfa*dfa-fa*ddfa))<tol){ system("pause"); return 0; } } system("pause"); } double func(double x){ double y; y=tan(PI*x-6); return y; } 依v大發現我的小錯修改了一下 compile error message 現在剩下有 "for(int i=0;i++)" expected `;' before ')' token `PI' undeclared (first use this function) ------------------------------------- 因為程設以前就學的不好 然後現在幾乎還給老師了...orz 所以我是google到一個牛頓法的程式作修改的 原程式 ------------------------------------------- #include <iostream> #include <math.h> using namespace std; double func(double x); //a=initial guess,n=maximum allowable iterations,tol=tolerance double a=8; double n=20; double tol=1e-5; int main(){ double fa;double dfa; cout<<"===============Newton's Method==============="<<endl; cout<<"Step\t\tP\t\tError"<<endl; cout<<"---------------------------------------------"<<endl; for(int i=0;i<n;i++){ fa=func(a); dfa=(func(a+0.00001)-func(a))/0.00001; a=a-fa/dfa; cout<<i+1<<"\t\t"<<a<<"\t\t"<<fabs(fa/dfa)<<endl; if(fabs(fa/dfa)<tol){ cout<<"Converge!!!"<<endl; system("pause"); return 0; } } cout<<"DO NOT Converge!!!!"<<endl; cout<<"Please try more steps of iteration or change another method!!!"<<endl; system("pause"); } double func(double x){ double y; y=5*x*x-6*x-10; return y; } ------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.114.244.170

11/25 21:44, , 1F
怎麼錯法也說一下嘛, compile error, 結果不對??跑一半
11/25 21:44, 1F

11/25 21:44, , 2F
會當??停不下來??發文範例不是都有提示的嗎....Orz
11/25 21:44, 2F

11/25 21:46, , 3F
你的for真的是要這樣寫的嗎?? "for(int i=0;i++)" ?_?
11/25 21:46, 3F

11/25 21:47, , 4F
如果用是寫個i一直加的無窮迴圈裡面自己break是OK就是:)
11/25 21:47, 4F

11/25 21:54, , 5F
不對, 就算想無窮迴圈for裡也少了一個 ; 事實上貼出來這
11/25 21:54, 5F

11/25 21:54, , 6F
份code有一堆typo(打錯字), compiler應該會報給你一堆
11/25 21:54, 6F

11/25 21:54, , 7F
error而且幾乎每一個都明確的告訴你你哪裡寫錯了....
11/25 21:54, 7F

11/25 21:55, , 8F
只有一個也許錯誤訊息你不容易找, 就是有個地方/打成\了
11/25 21:55, 8F

11/25 21:55, , 9F
剩下來哪裡錯請你自己一個error一個error去修code....
11/25 21:55, 9F

11/25 21:56, , 10F
有打小寫打錯, 有乘忘了寫, 還有個變數scope不對, 等~_~
11/25 21:56, 10F

11/25 21:56, , 11F
V大也太好心了,人真好
11/25 21:56, 11F

11/25 21:58, , 12F
人家是十點整要點眼藥水, 看看還有10分鐘有空檔嗎:p
11/25 21:58, 12F

11/25 21:58, , 13F
不然~~早就去看片了....XDDD
11/25 21:58, 13F

11/25 21:59, , 14F
嗯嗯 感謝v大 我修文打完整一點好了 orz
11/25 21:59, 14F
※ 編輯: WaterPisces 來自: 59.114.244.170 (11/25 22:17)

11/25 22:32, , 15F
for 的使用方式去看一下書 用法用錯了, PI值沒有定義
11/25 22:32, 15F

11/25 22:59, , 16F
for的問題上面推文提過了, 如樓上r大說的請去翻翻書吧;
11/25 22:59, 16F

11/25 23:00, , 17F
PI在哪邊需要就在哪邊定義, 你main裡宣告了PI, 其他在
11/25 23:00, 17F

11/25 23:00, , 18F
func()裡你才有用PI, 把需要的東西放在對的位置; 或者,
11/25 23:00, 18F

11/25 23:01, , 19F
實務上像PI這種常數也可以改用#define定義, 或宣告成
11/25 23:01, 19F

11/25 23:01, , 20F
全域變數; 這個就是我推文說變數scope錯的地方:)
11/25 23:01, 20F

11/25 23:40, , 21F
嗯嗯 了解了 謝謝
11/25 23:40, 21F
文章代碼(AID): #1B3JFVXY (C_and_CPP)
文章代碼(AID): #1B3JFVXY (C_and_CPP)