精华内容
下载资源
问答
  • 本文章是关于C语言实现定积分求解方法。
  • c语言实现定积分求解

    万次阅读 多人点赞 2018-05-30 22:30:42
    /*辛普生公式求定积分,公式为:S[n]=(4*T[2*n]-T[n])/3,其中T[2n],T[n]为梯形公式计算结果*/   double  Simposn( double  down,  double  up,  int  n)  {    double  s;      /*辛普生公式*/    ...
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3. #include <math.h>  
    4. #include <time.h>  
    5.   
    6. #define N       3  
    7.   
    8. double fun(double x)  
    9. {  
    10.     double y;  
    11.       
    12.     y = sqrt(4-(x)*(x));  
    13.     //y = sin(x);  
    14.       
    15.     return y;  
    16. }  
    17.   
    18. /*随机点法求定积分*/  
    19. double Darts(int n)  
    20. {  
    21.     double x, y;  
    22.     time_t t;  
    23.     int i = 0;  
    24.     int count = 0;  
    25.       
    26.     srand((unsigned)time(&t));  
    27.       
    28.     for (i=0; i<n; i++)  
    29.     {  
    30.         x = rand()%100/100.0;  
    31.         y = rand()%100/100.0;  
    32.           
    33.         if (y <= 1-pow(x,2))  
    34.         {  
    35.             count++;      
    36.         }     
    37.     }  
    38.       
    39.     return (double)count/(double)n;  
    40. }  
    41.   
    42. /*左矩形法求定积分*/  
    43. double LeftRect(double down, double up, int n)  
    44. {  
    45.     double h, s;  
    46.     int i;  
    47.       
    48.     /*计算步长*/  
    49.     h = (up-down)/n;  
    50.       
    51.     s = fun(down)*h;  
    52.       
    53.     for (i=1; i<n; i++)  
    54.     {  
    55.         s = s + fun(down+i*h)*h;      
    56.     }   
    57.       
    58.     return s;  
    59. }  
    60.   
    61. /*梯形公式求定积分*/  
    62. double Trape(double down, double up, int n)  
    63. {  
    64.     double h, s;  
    65.     int i = 0;  
    66.       
    67.     /*计算步长*/  
    68.     h = (up-down)/n;  
    69.       
    70.     s = 0.5*(fun(down)+fun(down+h))*h;  
    71.       
    72.     for (i=1; i<n; i++)  
    73.     {  
    74.         s = s + 0.5 * (fun(down+i*h) + fun(down+(i+1)*h))*h;  
    75.     }  
    76.       
    77.     return s;     
    78. }   
    79.   
    80. /*复合梯形公式*/  
    81. double T(double x, double y, int z)  
    82. {  
    83.     double h, Tn;  
    84.     int i = 0;  
    85.       
    86.     h = (y-x)/z;  
    87.     Tn = (fun(x)+fun(y))/2;  
    88.       
    89.     for (i=0; i<z; i++)  
    90.     {  
    91.         Tn = Tn+fun(x+i*h);   
    92.     }     
    93.       
    94.     Tn = Tn*h;  
    95.       
    96.     return Tn;  
    97. }   
    98.   
    99. /*辛普生公式求定积分,公式为:S[n]=(4*T[2*n]-T[n])/3,其中T[2n],T[n]为梯形公式计算结果*/  
    100. double Simposn(double down, double up, int n)  
    101. {  
    102.     double s;  
    103.       
    104.     /*辛普生公式*/  
    105.     s = (4*T(down, up, 2*n) - T(down, up, n))/3;  
    106.       
    107.     return s;     
    108. }  
    109.   
    110. /*高斯公式求定积分*/  
    111. double Gass(double (*func)(double x), double a, double b, int n)  
    112. {  
    113.     int i = 0;  
    114.       
    115.     //高斯点及其求积系数列表  
    116.     float x1[1]={0.0};                                                    
    117.     float A1[1]={2};  
    118.     float x2[2]={-0.5573503,0.5573503};                                  
    119.     float A2[2]={1,1};  
    120.     float x3[3]={-0.7745967,0.0,0.7745967};                               
    121.     float A3[3]={0.555556,0.888889,0.555556};  
    122.     float x4[4]={0.3399810,-0.3399810,0.8611363,-0.8611363};              
    123.     float A4[4]={0.6521452,0.6521452,0.3478548,0.3478548};  
    124.     float x5[5]={0.0,0.5384693,-0.5384693,0.9061799,-0.9061799};         
    125.     float A5[5]={0.5688889,0.4786287,0.4786287,0.2369269,0.2369269};     
    126.   
    127.   
    128.     float *p, *t;  
    129.     switch (n)  
    130.     {  
    131.         case 1:            
    132.             p = x1;  
    133.             t = A1;  
    134.             break;  
    135.         case 2:            
    136.             p = x2;  
    137.             t = A2;  
    138.             break;  
    139.         case 3:            
    140.             p = x3;  
    141.             t = A3;  
    142.             break;  
    143.         case 4:            
    144.             p = x4;  
    145.             t = A4;  
    146.             break;  
    147.         case 5:            
    148.             p = x5;  
    149.             t = A5;  
    150.             break;  
    151.         default :     
    152.             printf("intput wrong!");  
    153.     }  
    154.       
    155.     float g = 0;  
    156.     for (i=0; i<n; i++)  
    157.     {  
    158.         g += (*func)((b-a)*p[i]/2+(a+b)/2)*t[i];  
    159.     }   
    160.     g *= (b-a)/2;  
    161.       
    162.     return g;  
    163. }  
    164.   
    165. int main(int argc, char *argv[])  
    166. {  
    167.     printf("随机点法积分值%f\n", Darts(10000));  
    168.       
    169.     double down, up;  
    170.     int n;  
    171.     double sum = 0;  
    172.       
    173.     printf("积分下限:\n");  
    174.     scanf("%lf", &down);  
    175.     printf("积分上限:\n");  
    176.     scanf("%lf", &up);  
    177.     printf("分隔数目:\n");  
    178.     scanf("%d", &n);  
    179.       
    180.     sum = LeftRect(down, up, n);  
    181.     printf("左矩形法积分值为:%f\n", sum);  
    182.       
    183.     sum = Trape(down, up, n);  
    184.     printf("梯形公式积分值为:%f\n", sum);  
    185.       
    186.     sum = Simposn(down, up, n);  
    187.     printf("辛普生公式积分值为:%f\n", sum);  
    188.       
    189.     sum = Gass(fun, down, up, N);  
    190.     printf("高斯公式积分值为:%f\n", sum);  
    191.       
    192.     return 0;  
    193. }  
    展开全文
  • 主要介绍了C语言实现定积分的方法,涉及C语言操作相关数学函数的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 本文实例为大家分享了C语言程序实现黎曼和求定积分,供大家参考,具体内容如下通过黎曼和解定积分既是把在xy平面中函数曲线与x轴区间区域划分成多个矩形并求它们的面积之和,矩形数量越多,得出的面积越精确。...

    本文实例为大家分享了C语言程序实现黎曼和求定积分,供大家参考,具体内容如下

    通过黎曼和解定积分既是把在xy平面中函数曲线与x轴区间区域划分成多个矩形并求它们的面积之和,矩形数量越多,得出的面积越精确。

    #include

    #include

    #include

    #include

    int main(){

    float function1(float); //函数f(x)1

    float function2(float); //函数f(x)2

    float function3(float); //函数f(x)3

    void integration(float f(float),float,float); //求定积分方法,参数为,函数fx,区间[a,b]的两个点

    int result_a=integration(function1,1,0);

    int result_b=integration(function2,1,-1);

    int result_c=integration(function3,2,0);

    }

    void integration(float f(float),float endPos,float startPos) //求定积分方法,参数为,函数fx,区间[a,b]的两个点

    {

    float x;

    float totalArea=0; //totalArea,所有矩形的总面积

    float n=1000; //将函数曲线下方划为n个矩形,n值越大,精确值越高

    float width; //单个矩形宽度

    float area=0; //单个矩形面积

    width=(endPos-startPos)/n; //求单个矩形宽度,既是函数总长度除以矩形数量

    for(float i=1;i<=n;i++) //计算每个矩形的面积

    {

    x=startPos+width*i; //转入到xy平面, 通过i的递增,得出每个矩形底部x的值,以求矩形高度

    area=f(x)*width; //用x做实参调用函数进一步求出y值,既矩形的高度,再用底乘高得出面积

    totalArea=totalArea+area; //各个矩形面积相加

    }

    printf("the value of function is %f",t2);

    }

    float function1(float x){ //函数f(x)1

    float y;

    y=sin(x);

    return y;

    }

    float function2(float x){ //函数f(x)2

    float y;

    y=cos(x);

    return y;

    }

    float function3(float x){ //函数f(x)3

    float y;

    y=exp(x);

    return y;

    }

    1190fe1b08236e4183c77ec295c0bac1.png

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    时间: 2020-02-26

    展开全文
  • 主要为大家详细介绍了用C语言程序实现黎曼和求定积分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • c语言实现定积分

    千次阅读 2015-02-08 18:21:32
    #include #include double dj(double Min,double Max,double flag=0.00001)//最大值,最小值,精度 { double i,j=0;
    #include <cmath>
    #include <cstdio>
    double dj(double Min,double Max,double flags=0.00001)//最大值,最小值,精度
    {
    	double i,j=0;
    	if(Min>Max)return 0;
    	for(i=Min;i<Max;i+=flags)
    	{
    		j+=sin(flags); //这里求的是sin的
    	}
    	return j;
    }
    int main()
    {
    	printf("%.6lf",dj(0,3.1415926));
    }

    展开全文
  • C语言定积分

    2021-09-21 22:24:27
    利用梯形法计算定积分 其中, f(x)=x3+3x2-x+2。 算法思想 根据定积分的定义分析可得:[x0,x1],[x1,x2],···,[xn-1,xn],将定积分的区间 [a,b] 分成 n 个子区间,其中: 若右边的极限存在,其极限值即...

    利用梯形法计算定积分

    其中, f(x)=x3+3x2-x+2。

    算法思想

    根据定积分的定义分析可得:[x0,x1],[x1,x2],···,[xn-1,xn],将定积分的区间 [a,b] 分成 n 个子区间,其中:


    若右边的极限存在,其极限值即为定积分的值。理论上区间分得越细,越逼近定积分实际的值,一般采用梯形法近似计算定积分的值,把区间 [a,6] 划分成 n 等份,则任意第 f 个小梯形的面积为 (上底+下底)×高/2,si=H×[f(xi)-1)+f(xi)]/2,其中 xi+1=a+(i+1)×H;xi=a+i×H;H=(b-a)/n。该实例问题实际上转换为求 n 等份梯形的面积累计和。

    程序

    #include <stdio.h>
    #include <math.h>
    float collect(float s,float t,int m,float (*p)(float x));
    float fun1(float x);
    float fun2(float x);
    float fun3(float x);
    float fun4(float x);
    int main()
    {
        int n,flag;
        float a,b,v=0.0;
        printf("Input the count range(from A to B)and the number of sections.\n");
        scanf("%f%f%d",&a,&b,&n);
        printf("Enter your choice:'1' for fun1,'2' for fun2,'3' for fun3,'4' for fun4==>");
        scanf("%d",&flag);
        if(flag==1)
            v=collect(a,b,n,fun1);
        else if(flag==2)
            v=collect(a,b,n,fun2);
        else if(flag==3)
            v=collect(a,b,n,fun3);
        else
            v=collect(a,b,n,fun4);
        printf("v=%f\n",v);
        return 0;
    }
    float collect(float s,float t,int n,float (*p)(float x))
    {
        int i;
        float f,h,x,y1,y2,area;
        f=0.0;
        h=(t-s)/n;
        x=s;
        y1=(*p)(x);
        for(i=1;i<=n;i++)
        {
            x=x+h;
            y2=(*p)(x);
            area=(y1+y2)*h/2;
            y1=y2;
            f=f+area;
        }
        return (f);
    }
    float fun1(float x)
    {
        float fx;
        fx=x*x-2.0*x+2.0;
        return(fx);
    }
    float fun2(float x)
    {
        float fx;
        fx=x*x*x+3.0*x*x-x+2.0;
        return(fx);
    }
    float fun3 (float x)
    {
        float fx;
        fx=x*sqrt(1+cos(2*x));
        return(fx);
    }
    float fun4(float x)
    {
        float fx;
        fx=1/(1.0+x*x);
        return(fx);
    }

    调试运行结果

    程序运行结果如下所示:

    Input the count range(from A to B)and the number of sections.
    0 1 100
    Enter your choice:'1' for fun1,'2' for fun2,'3' for fun3,'4' for fun4==>2
    v=2.750073

    总结

    ① 定义 collect() 函数时,函数的首部 “float collect(float s,float t,int n,float (*p)(float x))” 中的 “float (*p)(float x)” 表示 p 是指向函数的指针变量,该函数的形参为实型。在 main() 函数的 if 条件结构中调用 collect() 函数时,除了将 a,b,n 作为实参传给 collect 的形参 s,n,t 外,还必须将函数名 fun1,fun2,fun3,fun4 作为实参将其入口地址传递给 collect() 函数中的形参 p。

    ② 函数也是有地址的,函数名作为函数的首地址。可以定义一个指向函数的指针变量,将函数入口地址赋予指针变量,然后通过指针变量调用函数,这样的指针变量即称为指向函数的指针。

    ③ 函数指针也是指针变量,可以实现指针变量的运算,但不能进行算术运算,因为函数指针的移动是毫无意义的,不同于数组指针变量,加减一个整数可以使指针指向后面或前面的数组元素。

    ④ 在函数调用中 “(* 指针变量名)” 两边的括号不可少,其中此处为一种表示符号,而不是求值运算。

    展开全文
  • 本人想通过如下方式实现,但有个error 这种错误应该怎么消除
  • 定积分C语言实现

    千次阅读 多人点赞 2018-09-24 15:41:04
    想到求积分,我们第一步...这里我们就要回到定积分的最原始的定义,一切从定义出发就一定能算出来。 这篇我们先看一重的情况,对于二重积分,请参见https://blog.csdn.net/weixin_42612337/article/details/8289...
  • C语言——定积分的计算

    千次阅读 2020-08-14 17:30:00
    思路分析 代码实现 #include <stdio.h> float DefiniteIntegral(float x,float y,float (*f)(float)); float Fun(float x);... 功能描述:计算定积分的函数 形参列表:上限x 下限y 被积函数f 注意事
  • 龙贝格求积公式 c语言实现 数值积分
  • C语言实现龙贝格积分

    千次阅读 2017-12-08 20:54:12
    用Romberg算法求下列积分,允许误差eps=0.00001 /***************************************************************** 《数值分析》实验习题2 机械工程 现代制造技术教育部重点实验室 ************************...
  • [C] 纯文本查看 复制代码#include #include void main( ){float f1(float x);float f2(float x);float f3(float x);float s1 = 0;float s2 = 0;float s3 = 0;... // 积分范围int i; // 循环变量prin...
  • 复化梯形求积公式 c语言实现 数值积分
  • 变步长梯形求积公式 c语言实现 数值积分
  • 本文实例为大家分享了C语言程序实现黎曼和求定积分,供大家参考,具体内容如下通过黎曼和解定积分既是把在xy平面中函数曲线与x轴区间区域划分成多个矩形并求它们的面积之和,矩形数量越多,得出的面积越精确。...
  • int y),并在主程序中实现输入输出4、编写计算学生年龄的递归函数5、编写递归函数实现Ackman函数一、实验目的与要求1、利用复化梯形公式计算定积分掌握C语言中定义函数的方法掌握通过“值传递”调用函数的方法2、...
  • 复化辛普森Simpson求积公式 c语言实现 数值积分
  • C语言定积分,对任意一个函数,本代码实现对其求定积分,可以改变积分上下限和步长
  • C语言用六种方法求定积分C语言实验报告求定积分班级 10信息与计算科学一班姓名 戴良伟学号 2010750221描述问题利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson公式,⑥Gauss积分公式求解...
  • 假设被积函数为   f x ,积分区间为   , a b ,把区间   ...根据定积分的定义及几 ...何意义,定积分就是求函数   f x 在区间   , a b 中图线下包围的...
  • C语言__用六种方法求定积分C语言__用六种方法求定积分描述问题利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson公式,⑥Gauss积分公式求解定积分。分析问题2.1定积分21.1定积分的定义定积分...
  • c语言实现积分运算

    万次阅读 2018-10-24 21:24:44
    用指针实现,最好先明白*p[4]和(*p)[4]的区别 int *p[4]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。 int (*p)[4]; //定义一个数组指针,该指针指向含4个元素...
  • C语言程序实现黎曼和求定积分

    千次阅读 2015-10-01 00:55:58
    通过黎曼和解定积分既是把在xy平面中函数曲线与x轴区间区域划分成多个矩形并求它们的面积之和,矩形数量越多,得出的面积越精确。 #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include ...
  • 定积分的 sin (x)若要使用实用程序,用户必须输入两个值: b 和 c,在指定的范围 [b、 c]∫ 将计算 sin (x) dx。必须为弧度,不度输入 b 和 c请注意,对间隔的作用负积分也是否定的。例如,从 0 到 π 这个函数的积分...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,658
精华内容 1,863
关键字:

c语言实现定积分

c语言 订阅