主题:新手求教一个求定积分的问题 谢谢各位了
scenery
[专家分:0] 发布于 2010-04-21 14:50:00
请问下 我只是想求 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个回复)
沙发
liudan319 [专家分:3780] 发布于 2010-04-21 16:12:00
正确的,没错
板凳
liuf403 [专家分:120] 发布于 2010-04-21 17:01:00
是错误的.
当fun的参数大于(pai)/2时,fun的结果为负值了,这样加在一起,最后的结果应该为0了,所以必须分大于
(pai)/2和小于(pai)/2两种情况分开讨论了.
3 楼
scenery [专家分:0] 发布于 2010-04-21 19:41:00
定积分的值可以为负 如果下限是0 上限是2π的话 输出0那应该是对的 关键是它输出一个很怪的数字 你们运行试试啊.....
4 楼
雪光风剑 [专家分:27190] 发布于 2010-04-21 20:57:00
重复的帖子给你删了。你的fun怎么写的?
5 楼
scenery [专家分:0] 发布于 2010-04-21 22:15:00
我发完整的代码出来吧#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 楼
scenery [专家分:0] 发布于 2010-04-21 22:15:00
我发完整的代码出来吧#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 楼
scenery [专家分:0] 发布于 2010-04-21 22:15:00
我发完整的代码出来吧#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 楼
scenery [专家分:0] 发布于 2010-04-21 22:15:00
我发完整的代码出来吧#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 楼
scenery [专家分:0] 发布于 2010-04-21 22:15:00
我发完整的代码出来吧#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 楼
scenery [专家分:0] 发布于 2010-04-21 22:15:00
我发完整的代码出来吧#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;
}
我来回复