高斯型求积公式是数值积分中一个比较成熟的想法. 速度快, 精度高, 公式优雅.
一般Gauss-Legendre求积公式
对于一般的Gauss型求积公式

取权函数

, 积分区间设定为
![\left[-1, 1\right]](http://www.road2stat.com/cn/wp-content/cache/tex_52e0f4e8efc463057bb180a1d986b979.png)
, 则得到一般的Gauss-Legendre求积公式

取Legendre多项式的零点作为Gauss点, 通过计算得到Gauss点个数

和

时的求积公式

以及
变量替换方法
上述分析中, 积分区间固定为
, 实际应用时做变量替换

将被积区间
![\left[a, b\right]](http://www.road2stat.com/cn/wp-content/cache/tex_36fe749312d270b1265ba9a4446866e3.png)
化为
复化Gauss-Legendre求积公式
将被积区间m等分, 记
,
作变换
在每个小区间上应用Gauss-Legendre公式, 累加即得复化Gauss-Legendre求积公式
不妨设
则有:
Gauss点个数
时,
Gauss点个数
时,
总结复化Gauss-Legendre求积过程如下:
1. 分割区间, 记录区间端点值;
2. 通过查表或求解非线性方程组, 在所有小区间上, 将Gauss系数和Gauss点的值代入变量替换后的公式;
3. 将所有区间的结果累加, 即得到整个区间上的积分近似值.
针对Gauss点个数
和
的复化Gauss-Legendre求积公式编写的一个简单的MATLAB函数 compgauss() 如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| function [ ] = compgauss(a, b, n)
% Composite Gauss Integration
% Equation Type: n=2, n=3
% Coded by Nan.Xiao 2010-05-25
% Step.1 Divide Interval
% Step.2 Calculate
% Step.3 Sum Results
format long
f = @(x) exp(x).*sin(x);
h=(b-a)/n;
xk=zeros(n+1,1);
xk(1,1)=a;
xk(n+1,1)=b;
fk1=zeros(n,1);
fk2=zeros(n,1);
for i=1:n-1
xk(i+1,1)=a+h*i;
end
for j=1:n
fk1(j)=f((xk(j)+xk(j+1))/2+(h/2)*(-1/sqrt(3)))+...
f((xk(j)+xk(j+1))/2+(h/2)*(1/sqrt(3)));
end
for r=1:n
fk2(r)=(5/9)*f((xk(r)+xk(r+1))/2+(h/2)*(-sqrt(15)/5))+...
(8/9)*f((xk(r)+xk(r+1))/2+(h/2)*(0))+...
(5/9)*f((xk(r)+xk(r+1))/2+(h/2)*(sqrt(15)/5));
end
mysum1=h*sum(fk1)/2;
mysum2=h*sum(fk2)/2;
disp('Result of 2 Nodes:')
disp(mysum1);
disp('Result of 3 Nodes:')
disp(mysum2);
end |
总结
1. Gauss求积公式较一般的机械求积公式的进步之处, 在于其针对插值型求积公式进行了改进. Gauss公式将插值节点设为未知, 成功地将代数精度由
次提高到
次. 计算过程简单, 速度快, 达到要求精度所需步骤较少.
2. (复化) Gauss 求积的一个问题在于, 增加Gauss点个数, 继续求解Gauss系数和Gauss点值时, 需要解一系列非线性方程组. 其解析解较难求得. 而取数值解作为公式中的参数, 不如解析解理想.
经常看到网上有人在讨论算法时用时间换空间/空间换时间的说法. 可惜神人们使用的例子都很专业, 再加上一两句晦涩而潇洒的写法, 我等凡人基本上就很难看懂了. 今天在实现数值积分中的龙贝格 (Romberg) 算法时, 算是遇到了一个这方面有点关系的问题, 简单记录一下.
首先上一段800字的原理说明:
……
由于作者心里很清楚读者将会人肉Skip上面一段, 所以这里直接人肉省略其中的797字.
如果执意想看一下, 参考 Wikipedia 好了.
下面是一个很好懂的 MATLAB 实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| function [ ] = romberg(aa, bb, kk, iter)
% Romberg Integral Method
% Coded by Nan.Xiao 2010-05-23
% Step 1. Calc TrapeStep
% Step 2. Calc Romberg Method
% Step 3. Extract Diagnal & Output
function [ ] = trapestep(a, b, k)
format long
% function y = f(x)
% y=(2/sqrt(pi))*exp(-x);
% end
% Examples Can Also Be:
% function y = f(x)
% y=x*sin(x);
% end
% Or
function y = f(x)
y=x*sqrt(1+x.^2);
end
k1=2^(k-1);
temp=zeros(k,k1);
mysum=zeros(k,1);
t=zeros(k+1,1);
for i=1:k
for j=1:(2^(i-1))
temp(i,j)=f(a+(((2*j-1)*(b-a))/(2^i)));
end
end
for p=1:k
mysum(p,1)=sum(temp(p,:));
end
t(1,1)=0.5*(f(a)+f(b));
for q=2:k+1
t(q,1)=(0.5*t(q-1,1))+(((b-a)*mysum(q-1,1))/(2^(q-1)));
end
end
format long
trapestep(aa, bb, kk);
diagonal=zeros(kk,1);
tt=zeros(kk,kk);
for v=1:kk
tt(v,1)=t(v,1);
end
for r=2:kk
for s=2:r
tt(r,s)=((4^(s-1)*tt(r,s-1))-tt(r-1,s-1))/(4^(s-1)-1);
end
end
save('tt.txt', 'tt', '-ascii', '-double'); % Save the Table
% Extract Table Diagonals
for w=1:kk
diagonal(w,1)=tt(w,w);
end
disp('Romberg Table Diagonals:')
disp(diagonal);
% Output Final Result
cc=2;
while abs(diagonal(cc,1)-diagonal(cc-1,1))>=iter || abs(diagonal(cc+1,1)-diagonal(cc,1))>=iter
cc=cc+1;
end
disp('The Final Result is:');
disp(diagonal(cc,1));
end |
与网上其他程序不同, 我在这里没有做太多的判断, 将二分的次数k作为一个参数手动设定, 是为了观察计算的具体过程. 同时, 为了方便移植, 仅使用最基本的矩阵操作语句, 没有使用 MATLAB 中的 feval() 函数, 要改变被积函数, 直接修改函数体. 最终目的是, 我要取得计算产生的含有
的表格, 以方便完成笔头的作业. 懒到一定程度了是不是?
继续阅读’时间换空间/空间换时间?’
发表于:
2010年02月9日 分类:
数字之美 标签: 3D, Cardioid, heart, love, MATLAB, Visualization, 三维, 可视化, 心形, 心形线, 绘图, 隐函数.
You don’t have to believe in God, but you should believe in The Book.
——P. Erdos
即日启程, 在接下来几天没有网络的日子里, 我深信亲情能够温暖人心. 临行前突然又想写点东西. 标题的前半句出自《圣经》, 后半句与本文有点关系, 似乎还是王小帅一部电影的英文名. 中间还少了一环, 这环就是数学. 大神P.Erdos[1] 不太相信上帝, 但他相信世界上有一本超穷的“天书”(The Book), 那里包含了所有数学定理最简洁、最漂亮、最优雅的证明. 他对一个证明的最高赞誉就是:
It is from The Book!
按照God→Math→Love的逻辑, 爱亦应有自己的数学表述. 有了数学表述自然要可视化一下. 笛卡尔心形线令人心碎的爱情故事不知其真实程度, 不过确实够浪漫的. 不过这隐函数都学完了还画心形线就太out了, 今天咱也浪漫一把, 画个隐函数方程生成的三维心. 不知此图能否有幸入选The Book的图形部分?

图1: MATLAB生成三维心形
原始方程:

自己画一个?
1
2
3
4
5
| [x,y,z]=meshgrid(linspace(-3,3,120));
f=(x.^2+(9*y.^2)./4+z.^2-1).^3-((9*y.^2).*(z.^3))./80-(x.^2).*(z.^3);
p=patch(isosurface(x,y,z,f,0));
set(p, 'FaceColor', 'r', 'EdgeColor', 'n');
daspect([1 1 1]);view(3);camlight('right');lighting phong |
[1] P.Erdos (1913-1996), 当代最伟大的数学家之一, 他一生中同485位合作者发表了1475篇数学论文. Erdos的研究领域主要是数论和组合数学, 但他的论文中涵盖的学科有逼近论、初等几何、集合论、概率论、数理逻辑、格与序代数结构、线性代数、群论、拓扑群、多项式、测度论、单复变函数、差分方程与函数方程、数列、Fourier分析、泛函分析、一般拓扑、代数拓扑、统计、数值分析、计算机科学、信息论等等. 美国数学学会(AMS)的《数学评论》杂志曾把数学划分为约六十个分支, Erdos的论文涉及了约40%.
斯人已逝, 思想长存.
2010年春节前
雪夜哈尔滨
发表于:
2009年06月16日 分类:
数字之美 标签: F22, Lockheed Martin, 中南, 卷土重来, 变形金刚, 宿命, 望生塔, 望生塔上的歌, 超音速巡航, 选专业, 选择, 顾术理.
顾术理,在上海复兴中学上高三时参加了新概念作文比赛,写了一篇文章,《望生塔上的歌》,不见太多技巧,记忆犹新,摘录其中一节如下:
八十年的车票
梦中,我上了一列火车,在车上遇到一位白胡子老人。我问老人:“这列火车开往何方?”
老人说:“终点站。”
我又问:“还有多久能到终点?”
老人说:“我快到了,你还有六十多年。”
“六十多年?”我惊讶地问。
老人说:“每个人都拿着一张火车票,期限都是八十年。”
“那我可以中途下车吗?”我问。
老人笑着说:“可以,路途中有无数站,你可以从任何一站下去,从任何一站上来,也可以换车,但这些车都开往同一个终点。”
我好奇地问:“您去过多少个站?还想去哪些站?”
老人笑笑:“这个问题我从来不想,我乘车时,总是看见话多乘客一直在问这个问题,根本没有注意到时间就这样逝去,一转眼便到了终点。他们总是背负着过去,期盼着未来,却偏偏忘记了现在。”
“您老是说乘车时不问前程后路,只问是否活在当时?”我问。
老人微笑颔首。
我要在中途一站下车了,老人抚摸着胡子笑道:“记住,不要握着车票在站台上前瞻后顾,登上一列你认为应该上的火车。否则,你会错过沿途许多美丽的风景。
否则,你会错过沿途许多美丽的风景。 寓言式的答案。

就像选专业吧,两个都不错,各有长处,各有短板。让自己纠结了好一阵子。让命运来决定,也许是一个不错的想法,但是也有了一些宿命论的味道。联想到自己现在的状态,确实说的太多,做得太少,没了高中时那么明确的目标。总是想,是时候踏踏实实做一些事情了,可什么时候是时候呢?比如刚刚考完的数学分析,闭区间单调必可积。作为一个人,我们时刻都要做出选择,都有做出选择的权利,现在有的选择,那时没的选择。但是有的选不一定就比没的选好出许多。就像你把单选题的选项全部排除那么鱼闷。选择的意义何在?《The Matrix》表达了一种选择论和因果论相调和的观点。设计者Architect和先知,同Zion里的人类还有Matrix一样,都无法参透选择的奥妙。正如 我们曾经无话不说,所以现在无话可说。就让C++程序设计基础来的更猛烈些吧。

不过有一个基本点倒是让人欣慰,既然做出了选择,做下去总没有错了。在挫折和斗志重燃的过程中建立起自己对人生的一点思考,也不是很坏呀。就像Weierstrass把分析严密化的过程,很吐很不开心,但是结果很美。确实,美是唯一标准。
看到Revenge of the Fallen的OST出来了,《New Divide》of Linkin,虽然有点单纯延续前作之嫌,也无妨让我们一起Across This New Divide. 2009年6月24日,见证Michael Bay这小子的坏笑。

Lockheed Martin公司生产的F22 Raptor,第四代战机。成本1.377亿美元/架,气动外形设计先进,拥有超音速巡航能力。
(本文最初发表于xiaonei.com)
第一节课刚下课,我就迫不及待写个小日志赞一下何伟老师,在第一堂课上,讲到了数学建模,图片数字化,MATLAB,矩阵,集合论的危机,范畴论,控制论,自动化,小孔成像 ..
爱死你了!
第二节课又讲到了三次数学危机,拓扑,博弈论,纳什平衡,公理化数学,陈省身,吴文俊,非欧几何,泰勒公式,逻辑,量变质变,泛函分析!哈哈,巨合俺的口味!
(本文最初发表于xiaonei.com)