<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>R2S &#187; MATLAB</title> <atom:link href="http://www.road2stat.com/cn/tag/matlab/feed" rel="self" type="application/rss+xml" /><link>http://www.road2stat.com/cn</link> <description>江湖一散人</description> <lastBuildDate>Thu, 26 Jan 2012 08:18:36 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Ubuntu下安装UMFPACK的MATLAB接口</title><link>http://www.road2stat.com/cn/mathematics/ubuntu_umfpack_matlab.html</link> <comments>http://www.road2stat.com/cn/mathematics/ubuntu_umfpack_matlab.html#comments</comments> <pubDate>Sun, 24 Apr 2011 19:40:09 +0000</pubDate> <dc:creator>Xiao Nan</dc:creator> <category><![CDATA[数字之美]]></category> <category><![CDATA[MATLAB]]></category> <category><![CDATA[Ubuntu]]></category> <category><![CDATA[UMFPACK]]></category><guid isPermaLink="false">http://www.road2stat.com/cn/?p=646</guid> <description><![CDATA[求解大型稀疏矩阵线性方程组是一件很痛苦的事情，大型稀疏矩阵求逆是这个问题的特例。UMFPACK采用的是一种针对稀疏矩阵的LU分解方法，直接法，比较耗内存，提供了C/Fortran/MATLAB接口，如果内存够大，可以首先尝试一下，因为直接法较迭代法精度高一些。如果内存不够，一般首先进行预处理，然后选择一种迭代法进行求解，比方说基于Krylov子空间的方法。UMFPACK的Manual写得比较暧昧，下面记录一下其MATLAB接口的安装方式。虽然MATLAB这丫闭源，只叹人在江湖，身不由己 。。。不过这套SparseSuite倒是GPL的，要是真提供R接口就好了，和CSIE@UFL他家比较熟的童鞋，不妨建议一下 。。。 环境：Ubuntu 10.10 + MATLAB R2010b for UNIX 1. 从 http://www.cise.ufl.edu/research/sparse/ 下好UMFPACK本身及其依赖包（均属于所谓的 SparseSuite），平行放置于一个目录。理论上这些就足够： AMD CAMD CCOLAMD CHOLMOD COLAMD UFconfig UMFPACK 从 http://glaros.dtc.umn.edu/gkhome/metis/metis/download 下载metis-4.0，解压后同样放入上述目录。 2. 此时如果在MATLAB中进入UMFPACK/MATLAB目录执行 umfpack_make，会发现不能编译Mathworks他丫的MEX。提示： Warning: You are using gcc version "4.4.4-14ubuntu5)".  The version currently supported with &#8230; <a href="http://www.road2stat.com/cn/mathematics/ubuntu_umfpack_matlab.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>求解大型稀疏矩阵线性方程组是一件很痛苦的事情，大型稀疏矩阵求逆是这个问题的特例。UMFPACK采用的是一种针对稀疏矩阵的LU分解方法，直接法，比较耗内存，提供了C/Fortran/MATLAB接口，如果内存够大，可以首先尝试一下，因为直接法较迭代法精度高一些。如果内存不够，一般首先进行预处理，然后选择一种迭代法进行求解，比方说<a href="http://mail.ustc.edu.cn/~yuanjing/KrylovSubspceMethod.ppt" target="_blank">基于Krylov子空间的方法</a>。UMFPACK的Manual写得比较暧昧，下面记录一下其MATLAB接口的安装方式。虽然MATLAB这丫闭源，只叹人在江湖，身不由己 。。。不过这套SparseSuite倒是GPL的，要是真提供R接口就好了，和CSIE@UFL他家比较熟的童鞋，不妨建议一下 。。。</p><p>环境：Ubuntu 10.10 + MATLAB R2010b for UNIX</p><p>1. 从 <a href="http://www.cise.ufl.edu/research/sparse/" target="_blank">http://www.cise.ufl.edu/research/sparse/</a></p><p>下好UMFPACK本身及其依赖包（均属于所谓的 SparseSuite），平行放置于一个目录。理论上这些就足够：</p><p>AMD<br /> CAMD<br /> CCOLAMD<br /> CHOLMOD<br /> COLAMD<br /> UFconfig<br /> UMFPACK</p><p>从 <a href="http://glaros.dtc.umn.edu/gkhome/metis/metis/download" target="_blank">http://glaros.dtc.umn.edu/gkhome/metis/metis/download</a></p><p>下载metis-4.0，解压后同样放入上述目录。</p><p>2. 此时如果在MATLAB中进入UMFPACK/MATLAB目录执行 umfpack_make，会发现不能编译Mathworks他丫的MEX。提示：</p><blockquote><p>Warning: You are using gcc version "4.4.4-14ubuntu5)".  The version currently supported with MEX is "4.3.4".</p></blockquote><p>看来Ububtu 10.10自带的gcc版本太高，我们按照</p><p><a href="https://help.ubuntu.com/community/MATLAB" target="_blank">https://help.ubuntu.com/community/MATLAB</a></p><p>的MEX function一节的1 - 3步先安装一个gcc 4.3.4 。。。</p><p>3. root启动MATLAB，执行</p><blockquote><p>getenv('PATH')<br /> setenv('PATH',sprintf('/home/%s/.matlab/bin:%s',getenv('USER'),getenv('PATH')));</p></blockquote><p>再次 getenv('PATH') 发现环境变量已经修改成功，进入UMFPACK/MATLAB目录，执行 umfpack_make 即可。</p><p>要确认是否已经编译成功，执行 umfpack_demo 即可运行一个求解demo，还有一些对比内建浮点性能之类的信息，比较无聊。</p><p>&nbsp;</p><p>另外，直接法还有一个求解器PARDISO可以选择，但是好像授权很不友好，academical也只能试用30天，简直是让人发指 。。。没有做更多的尝试。</p> ]]></content:encoded> <wfw:commentRss>http://www.road2stat.com/cn/mathematics/ubuntu_umfpack_matlab.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>时间换空间/空间换时间？</title><link>http://www.road2stat.com/cn/mathematics/time_and_space_complexity_of_algorithms.html</link> <comments>http://www.road2stat.com/cn/mathematics/time_and_space_complexity_of_algorithms.html#comments</comments> <pubDate>Sun, 23 May 2010 20:57:43 +0000</pubDate> <dc:creator>Xiao Nan</dc:creator> <category><![CDATA[数字之美]]></category> <category><![CDATA[MATLAB]]></category> <category><![CDATA[Romberg's Method]]></category> <category><![CDATA[时间换空间]]></category> <category><![CDATA[空间换时间]]></category> <category><![CDATA[算法复杂度]]></category> <category><![CDATA[龙贝格算法]]></category><guid isPermaLink="false">http://www.road2stat.com/cn/?p=472</guid> <description><![CDATA[经常看到网上有人在讨论算法时用时间换空间/空间换时间的说法. 可惜神人们使用的例子都很专业, 再加上一两句晦涩而潇洒的写法, 我等凡人基本上就很难看懂了. 今天在实现数值积分中的龙贝格 (Romberg) 算法时, 算是遇到了一个这方面有点关系的问题, 简单记录一下. 首先上一段800字的原理说明: ...... 由于作者心里很清楚读者将会人肉Skip上面一段, 所以这里直接人肉省略其中的797字. 如果执意想看一下, 参考 Wikipedia 好了. 下面是一个很好懂的 MATLAB 实现: ?Download romberg.m1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 &#8230; <a href="http://www.road2stat.com/cn/mathematics/time_and_space_complexity_of_algorithms.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>经常看到网上有人在讨论算法时用时间换空间/空间换时间的说法. 可惜神人们使用的例子都很专业, 再加上一两句晦涩而潇洒的写法, 我等凡人基本上就很难看懂了. 今天在实现数值积分中的龙贝格 (Romberg) 算法时, 算是遇到了一个这方面有点关系的问题, 简单记录一下.</p><p>首先上一段800字的原理说明:</p><p>......</p><p>由于作者心里很清楚读者将会人肉Skip上面一段, 所以这里直接人肉省略其中的797字.</p><p>如果执意想看一下, 参考 <a href="http://en.wikipedia.org/wiki/Romberg%27s_method" target="_blank">Wikipedia</a> 好了.</p><p>下面是一个很好懂的 MATLAB 实现:</p><div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://www.road2stat.com/cn/wp-content/plugins/wp-codebox/wp-codebox.php?p=472&amp;download=romberg.m">romberg.m</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4723"><td class="line_numbers"><pre>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
</pre></td><td class="code" id="p472code3"><pre class="scilab" style="font-family:monospace;"><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> <span style="color: #009900;">&#91;</span> <span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> romberg<span style="color: #009900;">&#40;</span>aa<span style="color: #339933;">,</span> bb<span style="color: #339933;">,</span> kk<span style="color: #339933;">,</span> iter<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">%</span> Romberg Integral Method
<span style="color: #339933;">%</span> Coded by Nan.Xiao <span style="color: #cc66cc;">2010</span><span style="color: #339933;">-</span>05<span style="color: #339933;">-</span><span style="color: #cc66cc;">23</span>
<span style="color: #339933;">%</span> Step <span style="color: #cc66cc;">1</span>. Calc TrapeStep
<span style="color: #339933;">%</span> Step <span style="color: #cc66cc;">2</span>. Calc Romberg Method
<span style="color: #339933;">%</span> Step <span style="color: #cc66cc;">3</span>. Extract Diagnal <span style="color: #339933;">&amp;</span> Output
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> <span style="color: #009900;">&#91;</span> <span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> trapestep<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> k<span style="color: #009900;">&#41;</span>
    <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">format</span></a> long
<span style="color: #339933;">%</span>     <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> y <span style="color: #339933;">=</span> f<span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">%</span>         y<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">/</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">sqrt</span></a><span style="color: #009900;">&#40;</span>pi<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">exp</span></a><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">%</span>     <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<span style="color: #339933;">%</span>     Examples Can Also Be<span style="color: #339933;">:</span>
<span style="color: #339933;">%</span>     <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> y <span style="color: #339933;">=</span> f<span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">%</span>         y<span style="color: #339933;">=</span>x<span style="color: #339933;">*</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">sin</span></a><span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">%</span>     <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<span style="color: #339933;">%</span>     Or
    <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> y <span style="color: #339933;">=</span> f<span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span>
        y<span style="color: #339933;">=</span>x<span style="color: #339933;">*</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">sqrt</span></a><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">+</span>x.^<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
k1<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span>^<span style="color: #009900;">&#40;</span>k<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
temp<span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">zeros</span></a><span style="color: #009900;">&#40;</span>k<span style="color: #339933;">,</span>k1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
mysum<span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">zeros</span></a><span style="color: #009900;">&#40;</span>k<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
t<span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">zeros</span></a><span style="color: #009900;">&#40;</span>k<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>k
    <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> j<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>^<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    temp<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>j<span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span>f<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">*</span>j<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>b<span style="color: #339933;">-</span>a<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>^i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> p<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>k
    mysum<span style="color: #009900;">&#40;</span>p<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">sum</span></a><span style="color: #009900;">&#40;</span>temp<span style="color: #009900;">&#40;</span>p<span style="color: #339933;">,:</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
t<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>f<span style="color: #009900;">&#40;</span>b<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> q<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">:</span>k<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span>
    t<span style="color: #009900;">&#40;</span>q<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">*</span>t<span style="color: #009900;">&#40;</span>q<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>b<span style="color: #339933;">-</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>mysum<span style="color: #009900;">&#40;</span>q<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>^<span style="color: #009900;">&#40;</span>q<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
    <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">format</span></a> long
trapestep<span style="color: #009900;">&#40;</span>aa<span style="color: #339933;">,</span> bb<span style="color: #339933;">,</span> kk<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
diagonal<span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">zeros</span></a><span style="color: #009900;">&#40;</span>kk<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tt<span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">zeros</span></a><span style="color: #009900;">&#40;</span>kk<span style="color: #339933;">,</span>kk<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> v<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>kk
    tt<span style="color: #009900;">&#40;</span>v<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span>t<span style="color: #009900;">&#40;</span>v<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> r<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">:</span>kk
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> s<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">:</span>r
    tt<span style="color: #009900;">&#40;</span>r<span style="color: #339933;">,</span>s<span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span>^<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>tt<span style="color: #009900;">&#40;</span>r<span style="color: #339933;">,</span>s<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>tt<span style="color: #009900;">&#40;</span>r<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span>s<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span>^<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">save</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'tt.txt'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tt'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'-ascii'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'-double'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #339933;">%</span> Save the Table
<span style="color: #339933;">%</span> Extract Table Diagonals
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> w<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>kk
    diagonal<span style="color: #009900;">&#40;</span>w<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span>tt<span style="color: #009900;">&#40;</span>w<span style="color: #339933;">,</span>w<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">disp</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'Romberg Table Diagonals:'</span><span style="color: #009900;">&#41;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">disp</span></a><span style="color: #009900;">&#40;</span>diagonal<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">%</span> Output Final Result
cc<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">while</span></a> <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">abs</span></a><span style="color: #009900;">&#40;</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;=</span>iter <span style="color: #339933;">||</span> <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">abs</span></a><span style="color: #009900;">&#40;</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;=</span>iter
    cc<span style="color: #339933;">=</span>cc<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">disp</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'The Final Result is:'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">disp</span></a><span style="color: #009900;">&#40;</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a></pre></td></tr></table></div><p>与网上其他程序不同, 我在这里没有做太多的判断, 将二分的次数k作为一个参数手动设定, 是为了观察计算的具体过程. 同时, 为了方便移植, 仅使用最基本的矩阵操作语句, 没有使用 MATLAB 中的 feval() 函数, 要改变被积函数, 直接修改函数体. 最终目的是, 我要取得计算产生的含有<span class='MathJax_Preview'><img src='http://www.road2stat.com/cn/wp-content/plugins/latex/cache/tex_4457b0e2fc3d33294979a989a1dc08e9.gif' style='vertical-align: middle; border: none; ' class='tex' alt="T_m^{(k)}" /></span>的表格, 以方便完成笔头的作业. 懒到一定程度了是不是?<br /> <span id="more-472"></span><br /> 如果我们把前两个作为Example的被积函数注释掉, 计算第三个积分<span class='MathJax_Preview'><img src='http://www.road2stat.com/cn/wp-content/plugins/latex/cache/tex_0870249e58ae0c035ff0d97b6bae428b.gif' style='vertical-align: middle; border: none; ' class='tex' alt="int_0^3 xsqrt{1+x^2},dx" /></span>, 设定iter=1e-6, 将 k 值提高至23, 输入语句 romberg(0, 3, 23, 1e-6), 将会华丽地出现如下错误：</p><p><code>Out of memory. Type HELP MEMORY for your options.</code></p><p>这是因为, 变步长梯形法的递推公式<br /><p style='text-align:center;'><span class='MathJax_Preview'><img src='http://www.road2stat.com/cn/wp-content/plugins/latex/cache/tex_8290fc0e66eacbbb34efc4162fe65dca.gif' style='vertical-align: middle; border: none;' class='tex' alt="T_{2n}=frac{1}{2}T_n+frac{h}{2}sum_{k=0}^{n-1}f(x_{k+frac{1}{2}})" /></span></p><br /> 在懒人版的 trapestep() 函数中实现时, 将直接去生成一个 k 行, 2^(k-1) 列的矩阵. 而 2^(23-1)=4194304, MATLAB 觉得似乎没那么大的内存来生成一个有着四百万列的矩阵(64位版本未测).</p><p>好, 大不了不生成了, 改掉上面完全不管内存的写法, 特别是改写 25-27 行的 for 循环:</p><div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://www.road2stat.com/cn/wp-content/plugins/wp-codebox/wp-codebox.php?p=472&amp;download=romberg2.m">romberg2.m</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4724"><td class="line_numbers"><pre>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
</pre></td><td class="code" id="p472code4"><pre class="scilab" style="font-family:monospace;"><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> <span style="color: #009900;">&#91;</span> <span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> romberg2<span style="color: #009900;">&#40;</span>aa<span style="color: #339933;">,</span> bb<span style="color: #339933;">,</span> kk<span style="color: #339933;">,</span> iter<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">%</span> Romberg Integral Method
<span style="color: #339933;">%</span> Coded by Nan.Xiao <span style="color: #cc66cc;">2010</span><span style="color: #339933;">-</span>05<span style="color: #339933;">-</span><span style="color: #cc66cc;">23</span>
<span style="color: #339933;">%</span> Step <span style="color: #cc66cc;">1</span>. Calc TrapeStep
<span style="color: #339933;">%</span> Step <span style="color: #cc66cc;">2</span>. Calc Romberg Method
<span style="color: #339933;">%</span> Step <span style="color: #cc66cc;">3</span>. Extract Diagnal <span style="color: #339933;">&amp;</span> Output
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> <span style="color: #009900;">&#91;</span> <span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> trapestep2<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> k<span style="color: #009900;">&#41;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">format</span></a> long
      <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> y <span style="color: #339933;">=</span> f<span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span>
          y<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">/</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">sqrt</span></a><span style="color: #009900;">&#40;</span>pi<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">exp</span></a><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<span style="color: #339933;">%</span>     Examples Can Also Be<span style="color: #339933;">:</span>
<span style="color: #339933;">%</span>     <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> y <span style="color: #339933;">=</span> f<span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">%</span>         y<span style="color: #339933;">=</span>x.<span style="color: #339933;">*</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">sin</span></a><span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">%</span>     <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<span style="color: #339933;">%</span>     Or
<span style="color: #339933;">%</span>     <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000000; font-weight: bold;">function</span></a> y <span style="color: #339933;">=</span> f<span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">%</span>         y<span style="color: #339933;">=</span>x<span style="color: #339933;">*</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">sqrt</span></a><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">+</span>x.^<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">%</span>     <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
temp<span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">zeros</span></a><span style="color: #009900;">&#40;</span>k<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
t<span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">zeros</span></a><span style="color: #009900;">&#40;</span>k<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>k
    <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> j<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>^<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    temp<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span>temp<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>f<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">*</span>j<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>b<span style="color: #339933;">-</span>a<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>^i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
mysum<span style="color: #339933;">=</span>temp<span style="color: #339933;">;</span>
t<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>f<span style="color: #009900;">&#40;</span>b<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> q<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">:</span>k<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span>
    t<span style="color: #009900;">&#40;</span>q<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">*</span>t<span style="color: #009900;">&#40;</span>q<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>b<span style="color: #339933;">-</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>mysum<span style="color: #009900;">&#40;</span>q<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>^<span style="color: #009900;">&#40;</span>q<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
    <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">format</span></a> long
trapestep2<span style="color: #009900;">&#40;</span>aa<span style="color: #339933;">,</span> bb<span style="color: #339933;">,</span> kk<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
diagonal<span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">zeros</span></a><span style="color: #009900;">&#40;</span>kk<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tt<span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">zeros</span></a><span style="color: #009900;">&#40;</span>kk<span style="color: #339933;">,</span>kk<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> v<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>kk
    tt<span style="color: #009900;">&#40;</span>v<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span>t<span style="color: #009900;">&#40;</span>v<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> r<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">:</span>kk
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> s<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">:</span>r
    tt<span style="color: #009900;">&#40;</span>r<span style="color: #339933;">,</span>s<span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span>^<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>tt<span style="color: #009900;">&#40;</span>r<span style="color: #339933;">,</span>s<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>tt<span style="color: #009900;">&#40;</span>r<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span>s<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span>^<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">save</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'tt.txt'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'tt'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'-ascii'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'-double'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #339933;">%</span> Save the Table
<span style="color: #339933;">%</span> Extract Table Diagonals
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">for</span></a> w<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>kk
    diagonal<span style="color: #009900;">&#40;</span>w<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span>tt<span style="color: #009900;">&#40;</span>w<span style="color: #339933;">,</span>w<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">disp</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'Romberg Table Diagonals:'</span><span style="color: #009900;">&#41;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">disp</span></a><span style="color: #009900;">&#40;</span>diagonal<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">%</span> Output Final Result
cc<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">while</span></a> <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">abs</span></a><span style="color: #009900;">&#40;</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;=</span>iter <span style="color: #339933;">||</span> <a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">abs</span></a><span style="color: #009900;">&#40;</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;=</span>iter
    cc<span style="color: #339933;">=</span>cc<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">disp</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'The Final Result is:'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">disp</span></a><span style="color: #009900;">&#40;</span>diagonal<span style="color: #009900;">&#40;</span>cc<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #b1b100;">end</span></a></pre></td></tr></table></div><p>理论上只要CPU时间足够, 这样做基本上可以得出正确结果. 我们需要的计算过程保存在 tt.txt 中.</p><p>写这个小函数的时候, 还遇到了一个有意思的事情. 在使用 while 语句判断哪个是最终积分结果时, 不仅要与前一项作差, 还要与后一项作差, 否则, 一旦遇到前两项之差较小, 但与真实值相差很大的情况时将判断失误. 试一下第二个被积函数就知道了. 计算过程大致是这样的:</p><p><code><br /> -0.000000000000001<br /> 0.000000000000001<br /> -7.018385351885766<br /> -6.266954014124826<br /> -6.283266463460164<br /> -6.283185210826781<br /> -6.283185307207264<br /> -6.283185307179584</p><p> ......</code></p><p>如果作的是前一种简单判断, 显然将输出 0.000000000000001 作为最终积分结果.</p><p>如果你有兴趣的话, 这里附上一份 <a href="http://www.road2stat.com/cn/attachments/2010/05/romberg.pdf">Dirty Work</a>.</p><p>写程序是一门艺术, 而不仅仅是一门技术(又有几人能够达到大神的Literate Programming境界呢？), 在这方面, 用一句名言来形容一下自己, 仍然是 Too simple, sometimes naive.</p> ]]></content:encoded> <wfw:commentRss>http://www.road2stat.com/cn/mathematics/time_and_space_complexity_of_algorithms.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>In god we trust, or in love?</title><link>http://www.road2stat.com/cn/mathematics/in_god_we_trust_or_in_love.html</link> <comments>http://www.road2stat.com/cn/mathematics/in_god_we_trust_or_in_love.html#comments</comments> <pubDate>Mon, 08 Feb 2010 19:17:15 +0000</pubDate> <dc:creator>Xiao Nan</dc:creator> <category><![CDATA[数字之美]]></category> <category><![CDATA[3D]]></category> <category><![CDATA[Cardioid]]></category> <category><![CDATA[heart]]></category> <category><![CDATA[love]]></category> <category><![CDATA[MATLAB]]></category> <category><![CDATA[Visualization]]></category> <category><![CDATA[三维]]></category> <category><![CDATA[可视化]]></category> <category><![CDATA[心形]]></category> <category><![CDATA[心形线]]></category> <category><![CDATA[绘图]]></category> <category><![CDATA[隐函数]]></category><guid isPermaLink="false">http://www.road2stat.com/cn/?p=375</guid> <description><![CDATA[You don't have to believe in God, but you should believe in The Book. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;——P. Erdos 即日启程, 在接下来几天没有网络的日子里, 我深信亲情能够温暖人心. 临行前突然又想写点东西. 标题的前半句出自《圣经》, 后半句与本文有点关系, 似乎还是王小帅一部电影的英文名. 中间还少了一环, 这环就是数学. 大神P.Erdos[1] 不太相信上帝, 但他相信世界上有一本超穷的“天书”(The Book), 那里包含了所有数学定理最简洁、最漂亮、最优雅的证明. 他对一个证明的最高赞誉就是: It is from The Book! 按照God→Math→Love的逻辑, 爱亦应有自己的数学表述. 有了数学表述自然要可视化一下. 笛卡尔心形线令人心碎的爱情故事不知其真实程度, &#8230; <a href="http://www.road2stat.com/cn/mathematics/in_god_we_trust_or_in_love.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p style="text-align: center;"><em>You don't have to believe in God, but you should believe in The Book.</em></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;——P. Erdos</p><p>即日启程, 在接下来几天没有网络的日子里, 我深信亲情能够温暖人心. 临行前突然又想写点东西. 标题的前半句出自《圣经》, 后半句与本文有点关系, 似乎还是王小帅一部电影的英文名. 中间还少了一环, 这环就是数学. 大神P.Erdos[1] 不太相信上帝, 但他相信世界上有一本超穷的“天书”(The Book), 那里包含了所有数学定理最简洁、最漂亮、最优雅的证明. 他对一个证明的最高赞誉就是:</p><p style="text-align: center;"><em>It is from The Book!</em></p><p>按照God→Math→Love的逻辑, 爱亦应有自己的数学表述. 有了数学表述自然要可视化一下. 笛卡尔心形线令人心碎的爱情故事不知其真实程度, 不过确实够浪漫的. 不过这隐函数都学完了还画心形线就太out了, 今天咱也浪漫一把, 画个隐函数方程生成的三维心. 不知此图能否有幸入选The Book的图形部分?</p><p><a href="http://www.road2stat.com/cn/attachments/2010/02/MATLAB_3D_heart.png"><img class="aligncenter size-full wp-image-376" title="MATLAB_3D_heart" src="http://www.road2stat.com/cn/attachments/2010/02/MATLAB_3D_heart.png" alt="MATLAB_3D_heart" width="490" height="400" /></a></p><p style="text-align: center;">图1: MATLAB生成三维心形</p><p>原始方程:</p><p><a href="http://www.road2stat.com/cn/attachments/2010/02/MATLAB_3D_heart_formula.png"><img class="aligncenter size-full wp-image-377" title="MATLAB_3D_heart_formula" src="http://www.road2stat.com/cn/attachments/2010/02/MATLAB_3D_heart_formula.png" alt="MATLAB_3D_heart_formula" width="400" height="95" /></a><br /> 自己画一个?</p><div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p375code6'); return false;">View Code</a> SCILAB</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3756"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p375code6"><pre class="scilab" style="font-family:monospace;"><span style="color: #009900;">&#91;</span>x<span style="color: #339933;">,</span>y<span style="color: #339933;">,</span>z<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">meshgrid</span></a><span style="color: #009900;">&#40;</span><a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">linspace</span></a><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">120</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
f<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span>x.^<span style="color: #cc66cc;">2</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">*</span>y.^<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span>.<span style="color: #339933;">/</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">+</span>z.^<span style="color: #cc66cc;">2</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>.^<span style="color: #cc66cc;">3</span><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">*</span>y.^<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span>.<span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>z.^<span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #339933;">/</span><span style="color: #cc66cc;">80</span><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span>x.^<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span>.<span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>z.^<span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
p<span style="color: #339933;">=</span>patch<span style="color: #009900;">&#40;</span>isosurface<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span>y<span style="color: #339933;">,</span>z<span style="color: #339933;">,</span>f<span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm"><span style="color: #000066;">set</span></a><span style="color: #009900;">&#40;</span>p<span style="color: #339933;">,</span> <span style="color: #ff0000;">'FaceColor'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'r'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'EdgeColor'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'n'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
daspect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>view<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>camlight<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'right'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>lighting phong</pre></td></tr></table></div><p>[1] P.Erdos (1913-1996), 当代最伟大的数学家之一, 他一生中同485位合作者发表了<strong>1475</strong>篇数学论文. Erdos的研究领域主要是数论和组合数学, 但他的论文中涵盖的学科有逼近论、初等几何、集合论、概率论、数理逻辑、格与序代数结构、线性代数、群论、拓扑群、多项式、测度论、单复变函数、差分方程与函数方程、数列、Fourier分析、泛函分析、一般拓扑、代数拓扑、<strong>统计</strong>、数值分析、计算机科学、信息论等等. 美国数学学会(AMS)的《数学评论》杂志曾把数学划分为约六十个分支, Erdos的论文涉及了约40%.</p><p>斯人已逝, 思想长存.</p><p style="text-align: right;">2010年春节前</p><p style="text-align: right;">雪夜哈尔滨</p> ]]></content:encoded> <wfw:commentRss>http://www.road2stat.com/cn/mathematics/in_god_we_trust_or_in_love.html/feed</wfw:commentRss> <slash:comments>10</slash:comments> </item> </channel> </rss>
