Gauss积分matlab的程序?

Gauss积分matlab的程序?,第1张

% 高斯-勒让德数值积分

fun=@(x)sin(x).*x.^3 % fun:积分表达式

% a,b:积分上下限

a = 0

b = pi

tol=1e-8 % tol:积分精度,默认1e-6

% 计算求积节点

syms x

p=sym2poly(diff((x^2-1)^(n+1),n+1))/(2^n*factorial(n))

tk=roots(p)% 求蠢扰积节点

% 计算求积系数

Ak=zeros(n+1,1)

for i=1:n+1

xkt=tk

xkt(i)=[]

pn=poly(xkt)

fp=@(x)polyval(pn,x)/polyval(pn,tk(i))

Ak(i)=quadl(fp,-1,1,tol)% 求积系数

end

% 积分变量猛档穗代换,将[a,b]变换到[-1,1]

xk=(b-a)/2*tk+(b+a)/2

% 检验积分函数fun有效性

fun=fcnchk(fun,'枝卜vectorize')

% 计算变量代换之后积分函数的值

fx=fun(xk)*(b-a)/2

% 计算积分值

ql=sum(Ak.*fx)

quadl(fun,0,pi) % 调用MATLAB内部积分函数检验

积分区间呢?

%%%==========

a1=0.3826

b1=452.1

c1=9.185

a2=0.5569

b2=455

c2=18.23

a3=-0.03431

b3=497.9

c3=11.48

a4=0.2741

b4=554.2

c4=85.93

%积分上下限

x0=1

x1=3

%高斯银虚积分哪搏肢点以及权系数

gx=[-0.9061799,-0.5384693,0,0.5384693,0.9061799]

gweight=[0.2369269,0.4786287,0.5688889,0.4786287,0.2369269]

intf=0

for i=1:5

x=(x0+x1)/2+(x1-x0)/2*gx(i)

intf=intf+gweight(i)*(a1*exp(-((x-b1)/c1).^2)+a2*exp(-((x-b2)/c2).^2)+a3*exp(-((x-b3)/c3).^2)+a4*exp(-((x-b4)/c4).^2))

end

intf=intf*(x1-x0)/李世2

intf

应该用误差函数erf来求。

1、首先,积分上下限:

∫(-∞,x)应分成∫(-∞,0)+∫(0,x)=-∫(0,-∞凳没陆)+∫(0,x)

2、被积变量t应作变换:

t1=t/σ

t=σ*t1

相应的积分限x变为x/σ

3、系数枣顷:

dt=σ*dt1,σ和原系数分母中的σ约分,余下1/√(2π),与erf函数的系数对察陪照,应该乘以1/(2√2)

综上,原表达式的计算如下(σ的取值自定):

x=-255:255

sigma=100

f=1/(2*(2)^0.5)

*

(

erf(x/sigma)-erf(-inf)

)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12520640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存