Re: [問題] 關於用c語言計算補誤差函數(erfc)

看板C_and_CPP (C/C++)作者 (超夯M型崩潰鄉民)時間16年前 (2010/03/30 21:26), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
在MATALB裡面有erfinv()這個函式可以使用,不過我寫的程式一定要用C++去跑 我想問在C/C++裡面有沒有已經寫好的inverse error function可以直接使用 目前找到的方法都是要去使用MATLAB的資料庫 而且看不懂... 有沒有人有遇過這個問題 可以解答一下的呢? ※ 引述《LikaiHo (MATLAB/C++)》之銘言: : ※ 引述《beboy (??)》之銘言: : : 我爬過文章了... : : 在本版關於c語言積分的方向有梯形積分...不過不是很懂... : : 而我的問題比較特殊一點.. : : 是要求erfc的數值...以前我們在求的時候大部分都查表... : : 或是MATLAB可以直接算出來... : : 有個辦法我有想過....就是先用MATLAB大量計算出一個表 : : 然後用C讀近來一樣用查表的方式找最接近或是內插法 : : 但感覺這方法治標不治本... : : 所以想問有設計過這類問題的先進們@@ 可不可以給我的方向呢@@ : : p.s因為某些原因 我非得用c語言寫不可... google找到的結果 其實在 math.h裡面就有寫好的erfc() #include<math.h>就可以用了 : 其實我不是高手.. : 只是最近修課一直要用C++來寫東西.. : 外加自己唸過化工.. 知道erfc是啥.. 所以獻醜一下~ : 還是要說一下.. 我真的是低手.. : erf(x) = (2/sqrt(pi)) * (積分0到x exp(-t^2) dt) : 有這個式子就可以用最笨的梯形法去做囉~ : 我隨便寫一下參考一下囉~ : double erf(double x) : { : int n=10000; //n是切割的大小,n越大,切割越細,當然越準 : double total=0,temp,ini=0; //ini是積分下限 : double delta=(x-ini)/n; //delta 就是 積分中的dt : for(int i=0;i<n;i++) : { : temp=exp(-pow(ini+(delta/2),2))*delta; : ini+=delta; : total+=temp; : } : return (2/sqrt(pi))*total; : } : 所以erfc = 1 - erf 就出來了.. : 梯形法就是把積分切割成很多梯形去算面積.. : 這應該是大一微積分有講過吧 @.@"" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.41.156
文章代碼(AID): #1BiVlzGZ (C_and_CPP)
文章代碼(AID): #1BiVlzGZ (C_and_CPP)