Re: [問題] 一些關於數學的問題

看板C_and_CPP作者 (藍影)時間12年前 (2012/03/26 14:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《Accelsynchro (none)》之銘言: < 恕刪 > : A[1] A[2] A[n] : f(x)=A[0]+ ── + ── +...───── : x x^2 x的i次方 : 使用者可以輸入一連串的整數n A[1] A[2]...A[n] : 誤差則設定在10^-4以下 < 恕刪 > 數值分析之絕對誤差 1**-4 可以是 x 誤差, or f(x) 誤差, 不同演算法挑用誤差不多, 先定義你的誤差為何。 嚴格來說,你的 code 應該連 compile 都有問題。 : 以下是部分的程式碼 < 恕刪 > : int a[]; 陣列不能這麼宣告。 : for(i=0,i<=n,i++){ 正常而言,這裡應不會是等於 n : scanf("%d",&a[i]); 你的 a[i] 確定是 integer 吧? : fx=fx+a[i]/x^i; 這個有人點出來了。x^i , 可以調用 math.h 裡之 pow() function, 不過蠻建議上網找 fast power 怎麼寫的, math.h 只針對 exopment 不為整數時,速度才快, 其他方法你隨便亂寫 (普通慢慢累乘) 都會比他快。 綜合以上程式碼,建議先再把 C language 看一遍。 : 我後來去問自己身邊學過的人 : 他說可以寫一個類似勘根定理還是十分逼近法的for迴圈 : 然後慢慢代入x的值 慢慢代入?他只學過 C 語言而已吧? : 可是我只假定出double low 跟dowble up之後就不知道怎麼寫了冏 假設欲求 f(x) = 0, 也假設題意是給你說從 (-∞, +∞) 中求一個根。 勘根定理是輔助,只能先確定「根的範圍」, 如在 [1,100] 間 (可能) 有一個根,或在 [1,2] 間 (可能) 有一個根, 接下來才能再拿其他的方法 拿到範圍後,才繼續用數值分析的 「非線性方程式求解」 之相關演算法求根。 ( 個人給它較完整的名稱是 「實數係單變數 非線性方程式求解」 ) 但如果題意已經告訴你,[2,3] 之間有一個根的話,就不用再套用勘根定理。 其他勘根定理的說明可再 google,或可看這裡。 http://ppt.cc/rrtm 十分逼近法可以做,但效果可能只比暴力法好一點, 有很多效果很好的數值方法,但都有其缺點,而且缺點不少。 目前被探討最多的是 二分法、牛頓法,效果好一些的方法是 Muller,但也很難寫。 個人比較建議直接拿二分法用就好了,速度(可能)比其他方法慢一點點而已, 不過會遇到的問題會少很多。 其他各方法整理與 code http://ppt.cc/kFWC 裡面的 double func(double x); 系列函式和你的問題有些不同, 作法了解後要改應無大礙,加油。 -- 我知道 ~ 但別說出來 , 說出來讓人感到特別難過... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.161
文章代碼(AID): #1FS0UMne (C_and_CPP)
文章代碼(AID): #1FS0UMne (C_and_CPP)