Gauss 求积公式及代码

简介

Newton-Cotes 公式在构造时,限定积分区间的等分点作为求积节点,这样做在简化处理的同时也限制了代数精度。如果求积节点也可自由选择,即机械求积公式:
  ∫ a b f ( x ) d x ≈ ( b − a ) ∑ i = 0 n λ i f ( x i ) \ \int_a^b{f\left( x \right) dx\approx \left( b-a \right) \sum_{i=0}^n{\lambda _if\left( x_i \right)}}  abf(x)dx(ba)i=0nλif(xi)
中的 λ i , x i λ_i, x_i λi,xi共 2n + 2 个均为待定参数,适当选取这些参数可以使公式具有 2n + 1 次代数精度。这种高精度的求积公式称为Gauss 公式。

参数选择

在这里插入图片描述 在这里插入图片描述

代码

#include<iostream>
#include<math.h>
using namespace std;
double a,b;
double g[3][3]={{0},{-1/sqrt(3.0),-1/sqrt(3.0)},{-sqrt(3.0/5.0),0,sqrt(3.0/5.0)}};
double m[3][3]={{1},{0.5,0.5},{5.0/18.0,4.0/9.0,5.0/18.0}};

double f(double x){
	return x*x ; 
} 

double guassi( int n)
{
	double re = 0;
	double x = (a+b)/2.0, y = (b-a)/2.0;
	for(int i=0;i<n;i++)
	{
		re += m[n-1][i] * f( x + y*g[n-1][i] );
//		cout<<f( x + y*g[n-1][i] )<<endl;
//		cout<<re<<endl;
	}
	return re*(b-a);
}

int main()
{
	int n;
	cout<<"输入要积分的点的个数"<<endl;
	cin>>n;
	cout<<"输入积分区间"<<endl;
	cin>>a>>b;  
	double re = guassi( n);
	cout<<"结果是:"<<re<<endl;  
	return 0;
}

结果是(默认函数为 f ( x ) = x × x f(x) = x\times x f(x)=x×x):
在这里插入图片描述

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值