yanyongju 发表于 2011-8-13 15:43

Guass积分点与权系数计算

【与大家分享一下】在计算过程中常用到Guass积分点的计算。程序grule(n),用于计算区间[-1,1]上的高斯点及其相应权系数。如果上下限为,积分变量为x,作变换为x=(a+b)/2+t*(b-a)/2,并在此基础上写了适用于任何区间的Guass积分计算程序,详见附件。

ChaChing 发表于 2011-8-15 23:59

这个可以配合
高斯积分点计算程序 http://forum.vibunion.com/thread-32381-1-1.html
是否有人能提供一下高斯积分表 http://forum.vibunion.com/thread-32144-1-1.html

lordgo 发表于 2011-8-18 13:28

谢谢楼主{:{39}:}

billy211 发表于 2011-12-24 23:46

垃圾~ 浪费了我很多财富,根本下载不下来

ChaChing 发表于 2011-12-24 23:54

billy211 发表于 2011-12-24 23:46 static/image/common/back.gif
垃圾~ 浪费了我很多财富,根本下载不下来

别生气, 体能还是很容易取得的!

billy211 发表于 2011-12-26 23:37

ChaChing 发表于 2011-12-24 23:54 static/image/common/back.gif
别生气, 体能还是很容易取得的!

谢谢您.
只是觉得不厚道,下载不了的还在这挂着。

bainhome 发表于 2011-12-27 00:17

本帖最后由 bainhome 于 2011-12-27 01:46 编辑

先看看自己的浏览器下载是不是被迅雷,快车之类给自动嗅探了,很多论坛不支持此类多线程下载,为此专门试了试:我这里下载正常。如果实在不会解除迅雷之类对页面资源的嗅探,不妨用【右键】该资源→【另存为】试试。
如果万一,我说万一...真是这样令人惊讶的低级错误,“垃圾”、“不厚道”之类说法可就有点丢人了哦。

billy211 发表于 2011-12-27 18:04

bainhome 发表于 2011-12-27 00:17 static/image/common/back.gif
先看看自己的浏览器下载是不是被迅雷,快车之类给自动嗅探了,很多论坛不支持此类多线程下载,为此专门试了 ...

你不用在这装清高,有可能是迅雷劫持,这个是有可能,但是右键是下载不下来。

bainhome 发表于 2011-12-27 20:23

本帖最后由 bainhome 于 2011-12-27 20:23 编辑

首先,我和放附件的楼主以及你都并不认识,所以客观地提醒一下:
我这里都下载并上传了,我想稍微有点脑子的都会意识到是自己电脑的问题。居然这么明显的情况,还死不要脸嘴硬,S*B到这个程度,只好给你无限真诚的祝福了。

ChaChing 发表于 2011-12-27 22:29

本帖最后由 ChaChing 于 2011-12-27 22:32 编辑

回复 8 # billy211 的帖子

汗, 我是不清楚"被迅雷,快车"是什麼意思? 又懒得google:@L
不过我使用ie点选或右键下载是没问题的! 其实其中主程序grule在2F的连接即有

最后别人的好意帮忙, 没感谢便罢, 也别当成...:@)

ChaChing 发表于 2011-12-28 00:43

回复 9 # bainhome 的帖子

喔, 不觉得尴尬!
基本上, 现在年轻人许多都是如此, 可能个人有点看多了
还有这位同学应该奖励下, 原因:逼高手出来! 你说对否!:@)

billy211 发表于 2012-1-3 21:28

bainhome 发表于 2011-12-27 20:23 static/image/common/back.gif
首先,我和放附件的楼主以及你都并不认识,所以客观地提醒一下:
我这里都下载并上传了,我想稍微有点脑子 ...

其实你就是一个名副其实的SB,你不是装清高是什么? 你自认为是刻薄,但实际上你是不知脸耻,不成自己是SB,装清高的二B。你牛逼什么?就是一个装清高的二百五。还厚颜无耻的在这说大道理。

billy211 发表于 2012-1-3 21:34

ChaChing 发表于 2011-12-27 22:29 static/image/common/back.gif
回复 8 # billy211 的帖子

汗, 我是不清楚"被迅雷,快车"是什麼意思? 又懒得google


我确实用右键没下载下来,我的浏览器GreenBrowser确实是没下载下来。
但是我不需要这种自命清高,装逼的人来解答。
牛逼什么牛逼!

ChaChing 发表于 2012-1-4 00:02

本帖最后由 ChaChing 于 2012-1-4 00:06 编辑

回复 13 # billy211 的帖子

这位仁兄, 可别忘记是你先用词不当的!
怎还火气这麼大, 还是该注意下!
以前个人脾气是会删帖禁言的

yanyongju 发表于 2012-1-4 09:40

没想到给大家添了这么多麻烦!
Gusssfun      ——    进行高斯积分的函数
Guass_Point   ——    区间内进行高斯积分的积分点
grule         ——    区间[-1,1]的高斯积分点
G_I             ——    进行高斯积分点调用格式function Y = Guassfun(u)

Y = [1 + exp(-u)*sin(4*u);
    sin(sqrt(u))];

% Y=[1 + u.^2 - 3 * u.^3 + 4 * u.^5, 1 + u.^2 - 3 * u.^3 ;
%    1 + u.^2 - 3 * u.^3, u.^2 - 3 * u.^3 + 4 * u.^5;
%    ];

endfunction = grule(n)

% -------------------------------------------------------------------------
% This code is obtained by "Google" %
% -------------------------------------------------------------------------

%=grule(n)
%This function computes Gauss base points and weight factors
%using the algorithm given by Davis and Rabinowitz in
%'Methods of Numerical Integration', page 365, Academic Press, 1975.

%Input: n - the number of Guass integraltion points   
%Output: bp - the value of Guass integration points
%          wf - the value of Guass integration weights

bp = zeros(n,1); wf = zeros(n,1);
iter = 2; m = fix((n+1)/2); e1 = n*(n+1);
mm = 4*m-1; t = (pi/(4*n+2))*(3:4:mm); nn = (1-(1-1/n)/(8*n*n));
xo = nn*cos(t);
for j = 1:iter
   pkm1 = 1; pk = xo;
   for k = 2:n
      t1 = xo.*pk;
      pkp1 = t1-pkm1-(t1-pkm1)/k+t1;
      pkm1 = pk; pk = pkp1;
   end
   den = 1.-xo.*xo; d1 = n*(pkm1-xo.*pk); dpn = d1./den;
   d2pn = (2.*xo.*dpn-e1.*pk)./den;
   d3pn = (4*xo.*d2pn+(2-e1).*dpn)./den;
   d4pn = (6*xo.*d3pn+(6-e1).*d2pn)./den;
   u = pk./dpn; v = d2pn./dpn;
   h = -u.*(1+(.5*u).*(v+u.*(v.*v-u.*d3pn./(3*dpn))));
   p = pk+h.*(dpn+(.5*h).*(d2pn+(h/3).*(d3pn+.25*h.*d4pn)));
   dp = dpn+h.*(d2pn+(.5*h).*(d3pn+h.*d4pn/3));
   h = h-p./dp; xo = xo+h;
end
bp = -xo-h;
fx = d1-h.*e1.*(pk+(h/2).*(dpn+(h/3).*(d2pn+(h/4).*(d3pn+(.2*h).*d4pn))));
wf = 2*(1-bp.^2)./(fx.*fx);
if (m+m) > n, bp(m)=0; end
if ~((m+m) == n), m=m-1; end
jj = 1:m; n1j = (n+1-jj);
bp(n1j) = -bp(jj); wf(n1j) = wf(jj);

% -------------------------------------------------------------------------
end
function varginout = Guass_Point(n,a,b)

% -------------------------------------------------------------------------
%
% Guass_Int.m
%
% Calculate the value of Guass integration points and weights for arbitrary interzone
%
% Input :    n - the number of Guass integraltion points
%            a - the low boundary of intergral interzone
%            b - the up boundary of intergral interzone
% Output:   varginout{1} = bp - the value of Guass integration points
%         varginout{2} = wf - the value of Guass integration weights
%
% Written by Yan - 21/3/2011
% Contact: yanyongju@ase.buaa.edu.cn
%
% -------------------------------------------------------------------------

% -------------------------------------------------------------------------
%The Guass integral function can only used within the interzone [-1,1],
%If we want to get the integration from integral boundary a to b, as
%we can tranform the to [-1,1] with the equation
%                a + b       b - a
%         s = -------+------- * t      
%                  2         2
%where t is in the interzone [-1,1], while s in

%so we can get
%                   / a + b   b - a   \   b - a
%      f(s)ds = f| ------- + ------- * t | -------dt
%                   \   2         2       /   2
% -------------------------------------------------------------------------

if nargin == 1
    a = -1;
    b = 1;
end

= grule(n);

sp = size(bp);

gpoint = (a+b)/2*ones(sp) + (b-a)/2 * bp;
wpoint = (b-a)/2 * wf;

varginout = {gpoint, wpoint};

% -------------------------------------------------------------------------
end
function val = G_I(a,b,N)
% a = 0; b = 1; N = 10;
%
% -------------------------------------------------------------------------
%
% Guass_Int.m
%
% Calculate the value of @Guassfun by Guass intergraltion
%
% Input :fun - the function of Guass integraltion
%            N - the number of Guass integraltion points
%            a - the low boundary of intergral interzone
%            b - the up boundary of intergral interzone
% Output:val - the value of Guass integraltion
%
% Written by Yan - 21/3/2011
% Contact: yanyongju@ase.buaa.edu.cn
%
% -------------------------------------------------------------------------

par = Guass_Point(N,a,b);

point = par{1}; weight = par{2};

% -------------------------------------------------------------------------
% func = Guassfun(point);
% % func = feval('Guassfun',point);
%
% = size(func);
%
% for i = 1:m
%   for j = 1:n
%         val(i,j) = dot(func{i,j},weight);
%   end
% end
% -------------------------------------------------------------------------
val = 0.0;
for k = 1:N   
    func = Guassfun(point(k));
    val = val + func * weight(k);   
end
% -------------------------------------------------------------------------
end
页: [1] 2
查看完整版本: Guass积分点与权系数计算