私は台形ルールを使ってCの曲線の下のエリアを解くプログラムを書くことを試みてきました。問題は、私のロジックは大丈夫だと思う、私はアルゴリズムを何度も見直して、私はまだエラーを見つけることができないということです。Riemann Sum、Cの台形ルール
これは私の教授によって割り当てられたものであり、私たちが配列を使用することを望んでいないので、あなたは何も見えません。
func、a、p、q、errをスキャンします。ここで、funcは使用される関数です(関数#1または#2ですが、#1は完了しました)。最初のx、qは最後のx、errは誤差のマージンです。
プログラムは、間隔を分割し、エリアの最後の計算までの領域を計算します - 私たちはただ計算し、総面積は10^-ERR
EDIT未満等しい:私はいくつかの変更LutzL
のおかげ を作りましたが#include<stdio.h>
#include<math.h>
double F1(double x,double a){
double f1=0.0;
f1=(sqrt(a-pow(x,2)));
return f1;
}
int main(){
double a=0.0,p=0.0,q=0.0,h=0.0,x=0.0,err=0;
int func=3,n=2;
double power=0.0,T=0.0;
double sum=0.0,last=0.0,difference=1.0;
scanf("%d",&func);
while(func!=0){
n=2;
scanf("%lf%lf%lf%lf",&a,&p,&q,&err);
power=pow(10.0,-err);
h=(q-p)/n;
if(func==1){
difference=1.0;
while(difference>=power){
h=(q-p)/n;
sum=0.0;
for(x=p+h;x<=q-h;x++){
sum+=(2*F1(x,a));
}
T=(h/2)*(F1(p,a)+F1(q,a)+sum);
if(difference==1.0){
difference=T;
}else{
difference=last-T;
}
last=T;
n++;
}
}
printf("%.5lf\n",T);
scanf("%d",&func);
}
return 0;
}
エラーは、1,4、-2,1,9を入力すると出力されますが、5.05481が出力されますが、4.59808が出力されます。
どうしたらいいのですか?エラー/問題は何ですか? –
何が問題なのですか?エラーは何ですか?あなたの実装は、複数の場所で呼び出すことのできる関数ではなく、メインメソッドにすべてのコードを持つので、あまり有用ではありません。 – duffymo
各試行の間に 'sum'を' 0'にリセットする必要があります。 –