我一直在嘗試編寫一個程序,通過使用梯形法則解決C中曲線下的區域。問題是,我認爲我的邏輯是好的,我已經多次檢查算法,並且我仍然無法找到錯誤。Riemann Sum,梯形法則C
在這是我的教授分配的東西,他不希望我們使用數組,這就是爲什麼你不會看到任何。它會掃描func,a,p,q,err,其中func是將被使用的函數(函數#1或#2,但我只完成了#1),a是常量,p是最初的x,q是最終的x,err是錯誤的邊際,我認爲。
程序將劃分區間和計算面積,直至區的最後計算 - 我們只計算總面積等於小於10^-ERR
編輯:我做了一個感謝一些改動以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'。 –