Re: [問題] 關於用c語言計算補誤差函數(erfc)
在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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章