高斯-勒让德数值积分Matlab代码.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高斯-勒让德数值积分Matlab代码

高斯-勒让德数值积分Matlab 代码 [code]function [ql,Ak,xk]=guasslegendre(fun,a,b,n,tol) % 高斯-勒让德数值积分 % % 参数说明 % fun :积分表达式,可以是函数句柄、inline 函数、匿名函数、字符串表达式,但是必须可 以接受矢量输入 % a,b:积分上下限,注意积分区间太大会降低精度,此时建议使用复化求积公式,默认[-1 1] % n :积分阶数,可以任意正整数,但是不建议设置过大,大不一定能得到更好的精度,默 认7 % tol :积分精度,默认1e-6 % ql :积分结果 % Ak:求积系数 % xk :求积节点,满足ql=sum(Ak.*fun(xk)) % % 举例说明 % fun=@(x)exp(x).*cos(x); % 必须可以接受矢量输入 % quadl(fun,0,pi) % 调用MATLAB 内部积分函数检验 % [ql,Ak,xk]=guasslegendre(fun,0,pi) % % 高斯积分说明 % 1.高斯积分是精度最高的插值型数值积分,具有2n+1 阶精度,并且高斯积分总是稳定。 一般插值型数值积分精度为至少n 阶,且具有高阶不稳定性 % 2.高斯求积节点就是对应 n 阶正交多项式的根,构建首项系数为 1 的正交多项式参见 /thread-4798-1-1.html % 3.高斯求积系数,可以由Lagrange 多项式插值系数进行积分得到 % 4. 由高斯求积节点为根构成的多项式,与任何不超过n 阶的多项式正交 % % 勒让德正交多项式说明 % 1.区间[-1,1]上关于权rho(x)=1 的正交多项式系,满足 % |- 2/(2j+1) (i=j) % ∫(Pi(x)*Pj(x),-1,1)= | % |- 0 (i≠j) % 2.勒让德正交多项式的通式为:P0=1, Pn=1/(2^n*n!) * diff((x^2-1)^n,n) (n=1,2,...) % 3.关于高斯-勒让德的数值积分的求积系数和节点,由于表达式不便于书写,感兴趣的网 友可以参考相关书籍 % % by dynamic of Matlab 技术论坛 % see also % contact me matlabsky@ % 2010-01-15 23:05:33 % % 输入参数有效性检验 if nargin==1 a=-1;b=1;n=7;tol=1e-8; elseif nargin==3 n=7;tol=1e-8; elseif nargin==4 tol=1e-8; elseif nargin==2|nargin5 error(The Number of Input Arguments Is Wrong!); end % 计算求积节点 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);[/code] Matlab 只能直接计算内外积分限都是已知实数的二重积分 比如 INT_(a)^(b)INT_{c}^{d}f(x,y)dxdy,其中a,b,c,d 都是已知实数,则可以用 Matlab 指令: dblquad(f(x,y),c,d,a,d); 但如果内积分限是外积分的积分变量函数时,Matlab 不能直接运算。 比如INT_(a)^(b)INT_{g1(y)}^{g2(y)}f(x,y)dxdy, 其中外积分限a,b 都是已知实数, 而内积分限g1(y),

文档评论(0)

专注于电脑软件的下载与安装,各种疑难问题的解决,office办公软件的咨询,文档格式转换,音视频下载等等,欢迎各位咨询!

1亿VIP精品文档

相关文档