<?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; 算法复杂度</title> <atom:link href="http://www.road2stat.com/cn/tag/%e7%ae%97%e6%b3%95%e5%a4%8d%e6%9d%82%e5%ba%a6/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>时间换空间/空间换时间？</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> </channel> </rss>
