数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: awei

【求助】各位老师倒数函数曲线长度怎么积分

[复制链接]
发表于 2019-5-5 03:50 | 显示全部楼层
用复化梯形公式法积分得14.608591
回复 支持 反对

使用道具 举报

发表于 2019-5-5 04:03 | 显示全部楼层
//Visual C++复化梯形公式法与复化simpson法求曲线f(x)=10/x在区间[1,10]上的长度//
#include <math.h>
#include <stdio.h>
double trapezia(double a,double b,double (*fun)(double),int n)//复化梯形公式法//
{
        double Tn=0.0;
        double h;
        int k;
        h=(b-a)/n;
        for(k=1;k<n;k++)
                Tn+=(*fun)(a+k*h);
        Tn=(*fun)(a)+(*fun)(b)+2*Tn;
        Tn=h*Tn/2;
        return Tn;
}
double simpson(double a, double b, double (*fun)(double), int n)//复化simpson法//
{        double T2n,Tn;
        Tn=trapezia(a,b,fun,n);
        T2n=trapezia(a,b,fun,2*n);
        return (4*T2n-Tn)/3;
}

double fun1(double x)
{
        return sqrt(1.0000+100.0000/(x*x*x*x));
}

main()
{
        double a=1,b=10,c;
        int i,n;
        double (* p[2])(double);
        p[1]=fun1;

        printf("请输入要分的区间数:");
        scanf("%d",&n);
       
        {  
                printf("第%d个函数积分,步长为:%g\n",1,(b-a)/n);
                printf("用复化simpson公式积分得: ");
                c=simpson(a,b,p[1],n);
            printf("%f\n",c);
                printf("用复化梯形公式积分得: ");
            c=trapezia(a,b,p[1],n);
        printf("%f\n",c);
        }

}
结果:区间划分为1000000份。
复化梯形公式法:14.608456;
复化simpson法:14.608456。精度足够。eps<0.00001.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-8-4 04:22 , Processed in 0.087984 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表