先做出積分式
接下來對其做數值模擬
因為精度的關係,這邊要使用一個稱為
『辛普森公式』的數值模擬方法
選三個點,用二次函數去fit他
接著就去算這曲線的面積,最後把這些東東全部加起來
寫的漂亮一點,可以弄成公式:
dx/3*(y0+4y1+2y2+…+2yn-2+4yn-1+yn)
//By momo
#include
#include
#include
#include
#define N 1000000
using namespace std;
double r1, r2, ans = 0;
double f(double x){
return 8*sqrt((r1*r1-x*x)*(r2*r2-x*x));
}
int main (){
scanf("%lf%lf", &r1, &r2);
if(r1 > r2) swap(r1, r2);
double dx = r1/N;
for(int i = 0; i <= N; i++){
double coe;
if(i == 0 || i == N) coe = 1;
else coe = (i&1)?4:2;
ans += coe*dx*f(dx*i)/3;
}
printf("%.4lf\n", ans);
}
#include
#include
#include
#include
#define N 1000000
using namespace std;
double r1, r2, ans = 0;
double f(double x){
return 8*sqrt((r1*r1-x*x)*(r2*r2-x*x));
}
int main (){
scanf("%lf%lf", &r1, &r2);
if(r1 > r2) swap(r1, r2);
double dx = r1/N;
for(int i = 0; i <= N; i++){
double coe;
if(i == 0 || i == N) coe = 1;
else coe = (i&1)?4:2;
ans += coe*dx*f(dx*i)/3;
}
printf("%.4lf\n", ans);
}
沒有留言:
張貼留言