gpt4 book ai didi

c - 黎曼和,C 梯形法则

转载 作者:行者123 更新时间:2023-11-30 19:11:17 25 4
gpt4 key购买 nike

我一直在尝试编写一个程序,通过使用梯形法则来用 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。

最佳答案

sum 应该将参数的函数值从 p+h 添加到 p+(n-1)*h=q-h,即是,n-1 个函数值。此时您添加了 n 个函数值。

您不能在循环内加倍 n

最佳实现使用中点总和

M(k)= f(p+h/2)+f(p+3h/2)+...+f(p+(2n-1)*h/2)

其中n=2^k,h=(q-p)/2^k

然后是梯形和

T(k)=0.5*f(p)+f(p+h)+...+f(p+(n-1)*h)+0.5*f(q)  

满足递归

T(k+1) = T(k) + M(k)

T(0)=(f(p)+f(q))/2。积分近似当然是T(k)*(q-p)/2^k

关于c - 黎曼和,C 梯形法则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40420936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com