精华内容
下载资源
问答
  • C语言求定积分

    千次阅读 2019-03-13 16:49:42
    那现在就用这种方法,利用C语言求定积分。 下面附上代码: #include <stdio.h> #include <stdlib.h> #include <iostream> #include &...

    这里以函数f=sinx为例子,首先思路:求定积分用的是元素法,把面积分为一个个的小矩形,分的越密集,则结果越正确。那现在就用这种方法,利用C语言求定积分。
    下面附上代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <string.h>
    #include <math.h>
    using namespace std;
    int main()
    {
        int i;
        double a,b;
        double wide=0.001;//wide表示划分的单位宽度,wide越小结果越精确,n是积分中矩形的宽
        printf("please input a,b:\n");
        scanf("%lf%lf",&a,&b);
        int n=(b-a)/wide;//a,b为积分的上限和下限
        double s=0;//s为所有小矩形面积的和,即积分的值
        for(i=0; i<n; i++)
        {
            s+=sin(a+i*wide)*wide;//a+i*wide是横坐标的值
        }
        printf("%.2lf\n",s);
        return 0;
    }
    

    下面做一下升级,方便函数变化时,灵活运用。

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <string.h>
    #include <math.h>
    using namespace std;
    double fun(double x)
    {
        return sin(x);
    }
    double jifen(double a,double b,double (*p)(double))//(*p)(double)为指向函数的指针,相当于一个函数的名字作为形参了
    {
        int i;
        double wide=0.001;//wide表示划分的单位宽度,wide越小结果越精确,n是积分中矩形的宽
        dint n=(b-a)/wide;//a,b为积分的上限和下限
        double s=0;//s为所有小矩形面积的和,即积分的值
        for(i=0;i<n;i++)
        {
            s+=(*p)(a+i*wide)*wide;//a+i*wide是横坐标的值
        }
        return s;
    }
    int main()
    {
    
        double a,b;
        printf("please input a,b:\n");
        scanf("%lf%lf",&a,&b);
        printf("%.2lf\n",jifen(a,b,fun));
        return 0;
    }
    
    

    注意:double (*p)(double)表示p是指向函数的指针,被指的函数是一个实型函数,有一个实型的形参,p是指向函数的指针变量。同以往的指针不同的是,p指向的是一个函数,代表一个函数的地址,p就代表这个函数的名字。(p)(a+widei)相当于sin(a+widei)。这样jifen函数就是一个通用求定积分的函数了。里面的函数定义随意变,而所需改变的代码很少。这样大大提高了效率

    展开全文
  • C语言用六种方法求定积分C语言实验报告求定积分班级 10信息与计算科学一班姓名 戴良伟学号 2010750221描述问题利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson公式,⑥Gauss积分公式求解...

    C语言用六种方法求定积分

    C语言实验报告

    求定积分

    班级 10信息与计算科学一班

    姓名 戴良伟

    学号 2010750221

    描述问题

    利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson公式,⑥Gauss积分公式求解定积分。

    分析问题

    2.1定积分

    21.1定积分的定义

    定积分就是求函数在区间中图线下包围的面积。即所包围的面积。这个图形称为曲边梯形,特例是曲边梯形。

    (图1)

    设一元函数,在区间内有定义。将区间分成个小区间。设,取区间中曲线上任意一点记做,和式

    若记λ为这些小区间中的最长者。当时,若此和式的极限存在,则称这个和式是函数 在区间上的定积分。

    记:  其中称为积分下限,为积分上限,为被积函数, 为被积式,∫ 为积分号。

    之所以称其为定积分,是因为它积分后得出的值是确定的,是一个而不是一个函数。x轴、函数f(x)的图形及两条直线x=a,x=bx轴上方的面积取正号;在x轴下方的面积取负号。如图

    2.2言实现定积分计算的算法

    22.1利用复合梯形公式实现定积分的计算

    假设被积函数为,积分区间为,把区间等分成个小区间,各个区间的长度为,即,称之为“步长”。根据定积分的定义及几何意义,定积分就是求函数在区间中图线下包围的面积等分,各子区间的面积近似等于梯形的面积,面积的计算运用梯形公式求解,再累加各区间的面积,所得的和近似等于被积函数的积分值,越大,所得结果越精确。以上就是利用复合梯形公式实现定积分的计算的算法思想。

    复合梯形公式:

    [2]

    具体算法如下:

    算法一

    1:输入积分区间的端点值和;

    2:输入区间的等分个数(要求尽可能大,以保证程序运行结果有较高的精确度);

    3:计算步长;

    4:对累加和赋初值;

    5:计算累加和

    6:算出积分值;

    7:输出积分近似值,完毕。

    1.2.2利用Smpson公式实现定积分的计算

    假设被积函数为,积分区间为,把区间等分成个小区间,各个区间的长度为。在复合梯形公式的基础上,构造出一种加速计算积分的方法。作为一种外推算法, 它在不增加计算量的前提下提高了误差的精度。

    具体算法如下:

    算法二

    1:输入积分上限和下限;

    2:输入区间的等分个数(要求尽可能大,以保证程序运行结果有较高的精确度);

    3:利用辛甫生公式:[2],实现对定积分的求解(其中,均为梯形公式计算所得的结果,由此可见辛甫生公式是以梯形公式为基础的);

    4:算出积分值;

    5:输出积分近似值,完毕。

    1.2.3利用Guass公式实现定积分计算

    Guass型求积公式是构造高精度差值积分的最好方法之一。他是通过让节点和积分系数待定让函数f(x)以此取i=0,1,2....n次多项式使其尽可能多的能够精确成立来求出积分节点和积分系数。高斯积分的代数精度是2n-1,而且是最高的。通常运用的是-1---+1的积分节点和积分系数,其他积分域是通过变换x=(b-a)t/2 +(a+b)/2 变换到-1到1之间积分。和下限;

    2:利用Guass公式,求定积分

    4:算出积分值;

    5:输出积分近似值,完毕。

    程序的编写

    3.1程序一(左矩形公式)

    3.1.1源程序

    #include

    #include

    void main()

    {double f(double x);

    /*f(x)为函数举例,即被积函数*/

    int i,n;

    /*n为区间等分的个数,应尽可能大*/

    double a,b,h,;

    /*a为积分下限,b为积分上限,h为步长*/

    printf(" a:\n");

    scanf("%lf",&a);

    printf("积分上限 b:\n");

    scanf("%lf",&b);

    printf("区间等分个数 n :\n");

    scanf("%d",&n);

    h=(b-a)/n; /*步长的计算*/for(i=1;i

    {s=s+f(a+i*h)*h;

    }

    printf("函数 f(x) 的积分值为 s=%10.6f\n",s);

    }

    /*以下为被积函数的定义,即函数举例*/

    double f(double x)

    {double y;

    y=;

    return (y);}

    3.1.2程序一的编译运行

    被积函数为f(x)=sqrt4-(x*x)的情况

    先编译,再运行,屏幕显示及操作如下:

    输入0+回车

    输入2+回车

    输入1000+回车

    3.2程序二(中矩形公式)

    3.2.1源程序

    #include

    #include

    void main()

    {double f(double x);

    /*f(x)为函数举例,即被积函数*/

    int i,n;

    /*n为区间等分的个数,应尽可能大*/

    dou

    展开全文
  • 利用梯形法计算定积分 其中, 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。

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

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

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

    不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~

    【值得关注】我的 编程学习交流俱乐部!【点击进入】

    全栈程序员正在等你加入~

    展开全文
  • [size=24px][/size]比如用梯形法函数 f=X²在区间(1,5)之间的近似值,用n等分区间,eps来确定精确度。例如s1表示用n来等分区间时求得的值,s2表示用2n等分区间时求得的值,当s1与s2之间的差值小于我设定的精度...
  • 主要介绍了C语言实现求定积分的方法,涉及C语言操作相关数学函数的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 本文为大家分享了C语言使用矩形法求定积分的通用函数,供大家参考,具体内容如下要求:写一个用矩形法求定积分的通用函数,分别:sin(x),cos(x),e^x 。分析:矩形法,学过高等数学就知道化曲为直的思想。将定积分...

    本文为大家分享了C语言使用矩形法求定积分的通用函数,供大家参考,具体内容如下

    要求:

    写一个用矩形法求定积分的通用函数,分别求:sin(x),cos(x),e^x 。

    分析:

    矩形法,学过高等数学就知道化曲为直的思想。将定积分化为多个函数连续的和。基本思想是将区间[a,b]化成n等分,当n越大的时候结果越准确。图形化成一小块一小块的矩形。底边长都为(b-a)/n.高为每个等分点的函数值。然后将每个矩形的面积相加即为所求。

    如:

    y=x;

    ba4a74474d8ec9761bdcbc6e8f292a5f.png

    可以通过矩形的方法来无限逼近定积分的求解,如下:

    1d9a228261d1836d5ffbd1ec66bddf52.png

    因为被分成n等分,就可以认为每一等分是一个矩形,那么每一矩形的面积为: 每一个矩形面积为:***Sn=f(x)(b-a)/n 总面积为:****S=S1+S2+…+Sn

    #include

    #include

    #include //引入sin x,cos x,e^x的库

    //使用指向函数的指针变量来复用一个通用函数

    int main()

    {

    int i,j,k,n,m;

    float res;

    float (*fun)(float);//定义指向函数的指针变量

    float integral (float a,float b,float (*fun)(float),int n);//n为将积分区间(b-a)分成n等分,当n的值越大的时候结果越精确,数学上的定义是取无穷大

    float fsin(float);//sin x函数的声明

    float fcos(float);//cos x函数的声明

    float fexp(float);//e^x 函数的声明

    printf ("请输入积分的下限\n");

    scanf ("%d",&m);

    printf ("请输入积分的上限\n");

    scanf ("%d",&n);

    printf("请输入你要计算的函数的具体函数\n");

    printf("1.sin(x) 2.cos(x) 3.e^x\n");

    scanf ("%d",&i);

    switch(i)

    {

    case 1:

    fun=fsin;//函数地址(入口)交给指针变量,灵活性强

    break;

    case 2:

    fun=fcos;

    break;

    case 3:

    fun=fexp;

    }

    res=(fun)(2.00);

    //printf("xxxx=%f\n",res);

    printf ("计算的结果为\n");

    res=integral(m,n,fun,200000);

    printf("res=%f",res);

    return 0;

    }

    float fsin(float x)

    {

    // printf("fsinx=%f\n",x);

    return sin(x);

    }

    float fcos(float x)

    {

    //printf("fcosx=%f\n",x);

    return cos(x);

    }

    float fexp(float x)

    {

    //getchar();

    //printf("fexp=%f\n",x);

    return exp(x);

    }

    float integral(float a,float b,float (*fun)(float),int n)

    {

    //矩形法计算,定积分转换为连续求和的形式

    int i=0;

    float x=a,s=0;

    float h=(b-a)/n;

    for (i=1;i<=n;i++)

    {

    x=x+h;

    s=s+((*fun)(x)*h);

    }

    return s;

    }

    结果:

    b31482f64b3b99ab72eda3848fafc20b.png

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

    展开全文
  • C语言求定积分,对任意一个函数,本代码实现对其求定积分,可以改变积分上下限和步长
  • 本文章是关于C语言实现定积分求解方法。
  • 主要为大家详细介绍了C语言求解定积分的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 求定积分近似值试求定积分 的近似值(积分限a,b从键盘输入)。算法分析如下:求定积分的近似值常有矩形法与梯形法,其实质都是面积求和。 矩形法是把所要求的面积垂直x轴分成n个小矩形,然后把这n个小矩形的面积相加,...
  • 本文实例为大家分享了C语言程序实现黎曼和求定积分,供大家参考,具体内容如下通过黎曼和解定积分既是把在xy平面中函数曲线与x轴区间区域划分成多个矩形并它们的面积之和,矩形数量越多,得出的面积越精确。...
  • s=(sin(a+n*i)+sin(a+n*(i+1)))*n/2+s; // (sin(a+n*i)是梯形的上底,sin(a+n*(i+1))是下底printf("用梯形法求得该...}三.(综合)写一个用矩形法和梯形法求定积分的通用函数,分别sin(x)在(0,1)上、cos(x)在(-1,...
  • C语言__用六种方法求定积分C语言__用六种方法求定积分描述问题利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson公式,⑥Gauss积分公式求解定积分。分析问题2.1定积分21.1定积分的定义定积分...
  • 主要为大家详细介绍了用C语言程序实现黎曼和求定积分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • c语言实现求定积分

    千次阅读 2015-02-08 18:21:32
    #include #include double dj(double Min,double Max,double flags=0.00001)//最大值,最小值,精度 ... //这里的是sin的 } return j; } int main() { printf("%.6lf",dj(0,3.1415926)); }
  • 满意答案chenan2242089推荐于 ...fsimpf 积分函数a,b 积分下上限,eps 精度。#include#include double fsimpf(double x){return sin(x) ;}double fsimp(double a,double b,double eps){int n,k;double h,t1,t2,s1,s...
  • 主要为大家详细介绍了C语言使用矩形法求定积分的通用函数,分别求解sinx, cosx,e^x,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 定积分的 sin (x)若要使用实用程序,用户必须输入两个值: b 和 c,在指定的范围 [b、 c]∫ 将计算 sin (x) dx。必须为弧度,不度输入 b 和 c请注意,对间隔的作用负积分也是否定的。例如,从 0 到 π 这个函数的积分...
  • 矩形法求定积分及其程序与程序框图的实现――实例探索定积分思想,切实提高课堂效果王亮 佛冈县第一中学 数学科【摘 要】定积分“四部曲”思想,对高中生来说不易接受,教学上用计算机来演示矩形法求定积分的过程,...
  • 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;      /*辛普生公式*/    ...
  • 思路分析 代码实现 #include <stdio.h> float DefiniteIntegral(float x,float y,float (*f)(float)); float Fun(float x);... 功能描述:计算定积分的函数 形参列表:上限x 下限y 被积函数f 注意事

空空如也

空空如也

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

c语言求定积分

c语言 订阅