用牛顿柯特斯方法求积分∫sin(x)/xdx,其中-1=<x<=1,要求误差不超过10的-3次方!!!要编程,用C语言表示!!!!很重要,谢谢大家了!
将Simpson一元函数积分**************
//***************拓展到任意一个牛顿柯特斯积分****
#include<iostream>
#include<math.h>
using namespace std;
//设置全局数组——牛顿 科特斯公式系数表
double C[6][7]={{1.0/2,1.0/2},{1.0/6,4.0/6,1.0/6},{1.0/8,3.0/8,3.0/8,1.0/8},
{7.0/90,16.0/45,2.0/15,16.0/45,7.0/90},
{19.0/288,25.0/96,25.0/144,25.0/144,25.0/96,19.0/188},
{41.0/840,9.0/35,9.0/280,34.0/105,9.0/280,9.0/35,41.0/840}};
int main()
{
double a=0.0,b=0.0,Cotes=0.0;
int n=0;
cout<<"请分别输入积分段的下届和上届:"<<endl;
cin>>a>>b;
cout<<"请输入您想设置的分段数(节点数-1):"<<endl;
cin>>n;
//检测输入
while(!(n>=1&&n<=6))
{
cout<<"分段数最多为6,请重新输入"<<endl;
cin>>n;
}
//计算科特斯公式的值
for(int j=0;j<=n;j++)
Cotes=Cotes+C[n-1][j]*log((j*(b-a)/n)+a); //函数f(x)为f(x)=ln x 这里你可以自己改为你想要的函数 当然也可以像你的代码一样通过函数指针传递f(x)表达式~~
Cotes=(b-a)*Cotes;
cout<<"牛顿—柯特斯公式计算积分的结果是"<<Cotes<<endl;
return 0;
//***************拓展到任意一个牛顿柯特斯积分****
#include<iostream>
#include<math.h>
using namespace std;
//设置全局数组——牛顿 科特斯公式系数表
double C[6][7]={{1.0/2,1.0/2},{1.0/6,4.0/6,1.0/6},{1.0/8,3.0/8,3.0/8,1.0/8},
{7.0/90,16.0/45,2.0/15,16.0/45,7.0/90},
{19.0/288,25.0/96,25.0/144,25.0/144,25.0/96,19.0/188},
{41.0/840,9.0/35,9.0/280,34.0/105,9.0/280,9.0/35,41.0/840}};
int main()
{
double a=0.0,b=0.0,Cotes=0.0;
int n=0;
cout<<"请分别输入积分段的下届和上届:"<<endl;
cin>>a>>b;
cout<<"请输入您想设置的分段数(节点数-1):"<<endl;
cin>>n;
//检测输入
while(!(n>=1&&n<=6))
{
cout<<"分段数最多为6,请重新输入"<<endl;
cin>>n;
}
//计算科特斯公式的值
for(int j=0;j<=n;j++)
Cotes=Cotes+C[n-1][j]*log((j*(b-a)/n)+a); //函数f(x)为f(x)=ln x 这里你可以自己改为你想要的函数 当然也可以像你的代码一样通过函数指针传递f(x)表达式~~
Cotes=(b-a)*Cotes;
cout<<"牛顿—柯特斯公式计算积分的结果是"<<Cotes<<endl;
return 0;
温馨提示:答案为网友推荐,仅供参考