关于在VC++中编写MATLAB中积分函数的问题,谢谢~

各位大侠好!我现在想在VC++中编写MATLAB中一些积分函数,比如说:int(),quad2d(),integral2()这三个函数,请大侠指点一下,谢谢!

第1个回答  2013-06-12

    都是比较复杂的函数,可以先借助help、type和edit命令查看函数源代码;数学三大库GNU的GSL,blitz++以及MTL对积分也有支持;

    要实现像matlab一样输入灵活的函数,个人感觉还是很不容易的,但是面向具体的业务问题,在函数及条件给定前提下获得符号积分、数值积分近似解的实现还不是很难的,因为流程不外乎就是矩形法、梯形法和抛物线法,eg:用梯形法(1000等份)求以下三个函数的定积分(当然如果作为工业使用这个for循环需要解决累加溢出和性能问题):

    f1(x)=1+x*x(积分区间0到1)

    f2(x)=1+x+x*x+x*x*x(积分区间0到2)
    f3(x)=x/(1+x*x)(积分区间0到3.5)

    #include "iostream.h"
    #define N 1000
    double f1(double x)//f1(x)=1+x*x
    {
     return(1+x*x);
    }
    double f2(double x)//f2(x)=1+x+x*x+x*x*x
    {
    return(1+x+x*x+x*x*x);
    }
    double f3(double x)//f3(x)=x/(1+x*x)
    {
    return(x/(1+x*x));
    }
    double integral(double(* fun)(double),double a,double b)//求fun在a,b区间定积分
    {
    double s,h;
    int i;
    s=((* fun)(a)+(* fun)(b))/2.0;
    h=(b-a)/N;
    for(i=1;i<N;i++)
     s+=(*fun)(a+i*h);
    return(s*h);
    }
    main()
    {
    double y1,y2,y3;
    y1=integral(f1,0.0,1.0);
    y2=integral(f2,0.0,2.0);
    y3=integral(f3,0.0,3.5);
    cout<<"y1= "<<y1<<"; y2= "<<y2<<"; y3= "<<y3<<endl;
    return 0;
    }

    还可以参考课本上的这些积分算法:

常用数值积分算法实现:
   1 梯形求积法(TRAPZD->QTRAP)
   2 辛普森(Simpson)求积法(QSIMP)
   3 龙贝格(Romberg)求积法(QROMB)
   4 反常积分(MIDPNT, MIDINF, MIDSQL, MIDEXP->QROMO)
   5 高斯求积法(QGAUS, GAULEG)
   6 三重积分(QUAD3D)

 

相似回答