Bivariate Gaussian Quadrature

版本 1.0.2 (2.6 KB) 作者: zhang
A function implementing first, second and third order Gaussian qudrature in 2d cases with a test and illustration script attached.
4.0 次下载
更新时间 2024/4/10

查看许可证

For quadrature order over 3, symbolic toolbox is required to calculate the Gauss points and weights using Legendre Polynomials.
function quadrature = gaussianQuadrature2D(func, xmin, xmax, ymin, ymax, order)
%GAUSSIANQUADRATURE2D Perform a 2D Gaussian quadrature over a specified range.
% QUADRATURE = GAUSSIANQUADRATURE2D(FUNC, XMIN, XMAX, YMIN, YMAX, ORDER)
% performs a 2D Gaussian quadrature numerical integration on a bivariate
% function FUNC of order ORDER, over the range [XMIN, XMAX] and [YMIN, YMAX].
% Algebra accuracy of ORDER-k Gaussian quadrature is (2*k - 1).
%
% Inputs:
% FUNC - a function handle to the integrand, supposed to be bivariate
% XMIN, XMAX - the lower and upper bounds of the x range
% YMIN, YMAX - the lower and upper bounds of the y range
% ORDER - the order of Gaussian quadrature, determining the number of
% sample points and weights
%
% Outputs:
% QUADRATURE - the result of the numerical integration
A simple demo and test script:
% test_gauss_quad.m
clear
clc
% example 1
n = 10;
[xmin, xmax, ymin, ymax] = deal(-1.5, 2, -1, 0.5);
result = zeros(n, 5);
for k = 1:n
func = @(x, y) (x + 0.5).^k .* (y - 0.3).^k + 1;
% Gaussian quadrature with 1st/2nd/5th order
gaussQuad1 = gaussianQuadrature2D(func, xmin, xmax, ymin, ymax, 1);
gaussQuad2 = gaussianQuadrature2D(func, xmin, xmax, ymin, ymax, 2);
gaussQuad3 = gaussianQuadrature2D(func, xmin, xmax, ymin, ymax, 5);
% reference solution using built-in `integral2` function
normalQuad = integral2(func, xmin, xmax, ymin, ymax);
% logging result
result(k, :) = [k, gaussQuad1, gaussQuad2, gaussQuad3, normalQuad];
end
% show result:
% k-th order gaussian handles (2k-1) or lower polynomials accurately.
result = array2table(result); ...
result.Properties.VariableNames = ...
{'Poly.Order', 'Gauss-1', 'Gauss-2', 'Gauss-5', 'Ref.Sol.'};
disp(result);
result:
Poly.Order Gauss-1 Gauss-2 Gauss-5 Ref.Sol.
__________ _______ _______ _______ ________
1 3.0844 3.0844 3.0844 3.0844
2 6.1433 9.3231 9.3231 9.3231
3 4.8815 -1.5406 -1.5406 -1.5406
4 5.402 17.027 19.903 19.903
5 5.1873 -15.115 -27.349 -27.349
6 5.2759 40.493 83.539 83.539
7 5.2393 -55.736 -189.11 -189.11
8 5.2544 110.78 504.8 504.8
9 5.2482 -177.37 -1309.3 -1309.3
10 5.2507 321.27 3534.2 3536.7

引用格式

zhang (2024). Bivariate Gaussian Quadrature (https://www.mathworks.com/matlabcentral/fileexchange/163096-bivariate-gaussian-quadrature), MATLAB Central File Exchange. 检索来源 .

MATLAB 版本兼容性
创建方式 R2023b
兼容任何版本
平台兼容性
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
版本 已发布 发行说明
1.0.2

Arbitrary order is supported

1.0.1

arbitrary range of x, y

1.0.0