回 帖 发 新 帖 刷新版面

主题:新手求教一个求定积分的问题  谢谢各位了

请问下  我只是想求 0到π这个范围下sinx的定积分  这是我的算法 
 double integral(double a,double b,double (*fun)(double))
{
const double n=1000.0;
double l,sum=0.0;
l=(b-a)/n;
for(int i=1;i<=n;i++)
sum+=l*fun(a+i*l);
return sum;
}   请问错在哪   谢谢了   a是函数的下限 b是函数的上限 l是分成1000等分 每一等分的长度  我是把图形分成1000个矩形 然后算矩形的面积和的方式求解的

回复列表 (共26个回复)

沙发

正确的,没错

板凳

是错误的.
当fun的参数大于(pai)/2时,fun的结果为负值了,这样加在一起,最后的结果应该为0了,所以必须分大于
(pai)/2和小于(pai)/2两种情况分开讨论了.

3 楼

定积分的值可以为负   如果下限是0 上限是2π的话 输出0那应该是对的 关键是它输出一个很怪的数字    你们运行试试啊.....

4 楼

重复的帖子给你删了。你的fun怎么写的?

5 楼

我发完整的代码出来吧#include <iostream>
#include <cmath>
using namespace std;
double integral(double a,double b,double (*fun)(double));
int main()
{
    double a,b;
    cout<<"输入函数的下限和上限:";
    cin>>a>>b;
    cout<<"sin函数在"<<a<<"到"<<b<<"范围内的定积分是:"<<integral(a,b,sin)<<endl;
    return 0;
}
double integral(double a,double b,double (*fun)(double))
{
    const double n=1000.0;
    double l,sum=0.0;
    l=(b-a)/n;
    for(int i=1;i<=n;i++)
        sum+=l*fun(a+i*l);
    return sum;
}

6 楼

我发完整的代码出来吧#include <iostream>
#include <cmath>
using namespace std;
double integral(double a,double b,double (*fun)(double));
int main()
{
    double a,b;
    cout<<"输入函数的下限和上限:";
    cin>>a>>b;
    cout<<"sin函数在"<<a<<"到"<<b<<"范围内的定积分是:"<<integral(a,b,sin)<<endl;
    return 0;
}
double integral(double a,double b,double (*fun)(double))
{
    const double n=1000.0;
    double l,sum=0.0;
    l=(b-a)/n;
    for(int i=1;i<=n;i++)
        sum+=l*fun(a+i*l);
    return sum;
}

7 楼

我发完整的代码出来吧#include <iostream>
#include <cmath>
using namespace std;
double integral(double a,double b,double (*fun)(double));
int main()
{
    double a,b;
    cout<<"输入函数的下限和上限:";
    cin>>a>>b;
    cout<<"sin函数在"<<a<<"到"<<b<<"范围内的定积分是:"<<integral(a,b,sin)<<endl;
    return 0;
}
double integral(double a,double b,double (*fun)(double))
{
    const double n=1000.0;
    double l,sum=0.0;
    l=(b-a)/n;
    for(int i=1;i<=n;i++)
        sum+=l*fun(a+i*l);
    return sum;
}

8 楼

我发完整的代码出来吧#include <iostream>
#include <cmath>
using namespace std;
double integral(double a,double b,double (*fun)(double));
int main()
{
    double a,b;
    cout<<"输入函数的下限和上限:";
    cin>>a>>b;
    cout<<"sin函数在"<<a<<"到"<<b<<"范围内的定积分是:"<<integral(a,b,sin)<<endl;
    return 0;
}
double integral(double a,double b,double (*fun)(double))
{
    const double n=1000.0;
    double l,sum=0.0;
    l=(b-a)/n;
    for(int i=1;i<=n;i++)
        sum+=l*fun(a+i*l);
    return sum;
}

9 楼

我发完整的代码出来吧#include <iostream>
#include <cmath>
using namespace std;
double integral(double a,double b,double (*fun)(double));
int main()
{
    double a,b;
    cout<<"输入函数的下限和上限:";
    cin>>a>>b;
    cout<<"sin函数在"<<a<<"到"<<b<<"范围内的定积分是:"<<integral(a,b,sin)<<endl;
    return 0;
}
double integral(double a,double b,double (*fun)(double))
{
    const double n=1000.0;
    double l,sum=0.0;
    l=(b-a)/n;
    for(int i=1;i<=n;i++)
        sum+=l*fun(a+i*l);
    return sum;
}

10 楼

我发完整的代码出来吧#include <iostream>
#include <cmath>
using namespace std;
double integral(double a,double b,double (*fun)(double));
int main()
{
    double a,b;
    cout<<"输入函数的下限和上限:";
    cin>>a>>b;
    cout<<"sin函数在"<<a<<"到"<<b<<"范围内的定积分是:"<<integral(a,b,sin)<<endl;
    return 0;
}
double integral(double a,double b,double (*fun)(double))
{
    const double n=1000.0;
    double l,sum=0.0;
    l=(b-a)/n;
    for(int i=1;i<=n;i++)
        sum+=l*fun(a+i*l);
    return sum;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册