###前提・実現したいこと
ギャップ方程式での臨界温度Tを二分法とシンプソン積分を使って求めたい。
解きたい方程式
int^{1}_{0}dx tanh(x/(2*T))/x-1/(VN)=0
###発生している問題・エラーメッセージ
T=0.09程度の値が期待されるが、計算結果は0.9程度になってしまった
###該当のソースコード
C++
#include <iostream>
#include <iomanip>
#include <cmath>
#include <complex>
#define eps 1.0e-5
using namespace std;
double T;
double integrand(double x){
return tanh(x/(2*T))/x;
};
double int_simpson(double (f)(double), int N, double a, double b){
double dx=(b-a)/N;
double sum1=0.,sum2=0.;
for (int i=1; i<N/2; i++) {
sum1+=integrand(a+2idx);
sum2+=integrand(a+(2i-1)dx);
}
sum2+=integrand(a+(N-1)dx);
return dx(integrand(a)+integrand(b)+2sum1+4*sum2)/3.;
}
double f(double){
double VN=0.4;//相互作用
return int_simpson(integrand,100,0.,1.)-1./(VN);
}
void bisection(){
int count=0;
double l=0.;
double r=1.;
double m;
do{
count++;
m=(l+r)/2.0;
if (f(m)*f(l)<0) r=m;
else l=m;
if(count==100){
cout << "収束しませんでした";
exit(1);
}
}while (!(fabs(l-r)<eps));
cout << m << endl;
}
int main (){
bisection(); return 0;
}
###試したこと
被積分関数を簡単にTとして計算した場合も期待される答えが得られなかった。(二分法の区間を[1,3]とした)
###補足情報(言語/FW/ツール等のバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/23 01:05
2016/09/24 09:07
2016/09/25 08:34