﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Change Dir-随笔分类-数学</title><link>http://www.blogjava.net/changedi/category/47324.html</link><description>先知cd——热爱生活是一切艺术的开始</description><language>zh-cn</language><lastBuildDate>Tue, 12 Nov 2013 06:17:38 GMT</lastBuildDate><pubDate>Tue, 12 Nov 2013 06:17:38 GMT</pubDate><ttl>60</ttl><item><title>基数估计</title><link>http://www.blogjava.net/changedi/archive/2013/11/12/406235.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Tue, 12 Nov 2013 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2013/11/12/406235.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/406235.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2013/11/12/406235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/406235.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/406235.html</trackback:ping><description><![CDATA[<p>问题的背景是在大数据冲击下，很多数据指标（尤其是涉及到去重的）的计算无法在合理的空间和时间内完成，比如uv的计算，数学原型问题等价于持续的向一个集合中写数，重复的不记，要求最终给出集合中不重复的元素的个数（集合的势）。而比较暴力的做法是随着数字增多不断的扩展集合的大小，让它放下所有的数，最终数出这个个数就OK。显然这样的空间复杂度在单机下是做不到的，所以多数做法是利用分布式原理将uv数据隔离到不同的计算节点，每个计算节点自行维护一个类似这样的集合（wdm实时里的布隆过滤器），然后分而治之，最后merge为一份结果数据。 </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基数估计的初衷就是为了解决在大数据的前提下，如何以低成本的空间复杂度去计算超大集合的势的问题，换句话说，通过基数估计，单机做到计算亿级别uv，误差在4%以内。解决思路主要是概率估计，具体原理和做法参看 blog和论文原文。 </p><p>&nbsp;&nbsp;&nbsp;&nbsp; 出于实验的目的，我简单实现了暴力做法bruteforce-bf，布隆过滤器-bbf，loglog-llc和hyperloglog-hllc四个算法，比较一下基数估计这个计算去重指标的逻辑是否可行（llc非常离谱，可能是我分桶数没有调整好，就不贴出结果了）。 </p><p>预处理方法：1-N生成随机uid，模拟N次（均匀分布），jvm启动-Xmx1024m。 </p><p>实验结果： </p><p><a href="http://www.blogjava.net/images/blogjava_net/changedi/WindowsLiveWriter/1f27c8e1c043_8EE3/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/changedi/WindowsLiveWriter/1f27c8e1c043_8EE3/image_thumb.png" width="244" height="77" /></a>&nbsp;&nbsp; <a href="http://www.blogjava.net/images/blogjava_net/changedi/WindowsLiveWriter/1f27c8e1c043_8EE3/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/changedi/WindowsLiveWriter/1f27c8e1c043_8EE3/image_thumb_1.png" width="244" height="77" /></a>  </p><p> 附加说明一下，期望值如何计算：其实这个实验的数学原型就是一个长度为k的均匀分布的（1-N)的随机数列，求不重复的元素个数的期望。我实验里k=n，这是一种极端情况（实验设计纯为方便计算，如果k较大会导致计算超慢，uv5000w时根本无法计算出来，增大k理论上会提高精度，我实验过的一组数据是100w uv 500wpv时 hllc的值是991234，误差&lt;1%），理论上k相当于pv，在递推公式中k趋于无穷时期望等于n。 </p><p>这个递推的计算可以通过组合分析推导，推导方法不详说了（当然我有可能推导错了~~数学功底 实在 不行了），通项公式见matlab代码。 </p><p> syms e n;<br /> e = n-(1/n)*((1-2*n+n*n)*((n-1)/n)^(n-2)+(1-n)*n+n*(n-1)); </p><p> vpa(subs(e,'n',1000000),10) </p><p>另外，我个人认为分布式布隆过滤器的方案是非常好的，因为空间和时间都比较均衡，且精确度高，基数估计的方法本质上空间复杂度O(1)，时间复杂度代码高效一点也可以非常快，但是缺点是精确度稍微欠缺，且不易分布式计算（因为它天生适合单进程，llc分桶均衡也是单进程做比较好，分布式完全是牛刀杀鸡）。 </p><p>ref blog: <a href="http://blog.codinglabs.org/articles/cardinality-estimate-exper.html#ref4">http://blog.codinglabs.org/articles/cardinality-estimate-exper.html#ref4</a> </p><p>算法实现的java代码可见github： <a href="https://github.com/changedi/card-estimate">https://github.com/changedi/card-estimate</a> </p><img src ="http://www.blogjava.net/changedi/aggbug/406235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2013-11-12 10:10 <a href="http://www.blogjava.net/changedi/archive/2013/11/12/406235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——聚类和回归</title><link>http://www.blogjava.net/changedi/archive/2011/01/01/342124.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Sat, 01 Jan 2011 10:35:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2011/01/01/342124.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/342124.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2011/01/01/342124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/342124.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/342124.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 聚类可以见我以前写过的聚类分析的文章。<br><br>回归是一个统计中非常重要的概念了。在Commons Math库中有一个regression的子包转么实现了线性回归的一些基本类型。在regression包中，有个基本接口就是MultipleLinearRegression，这个接口表达y=X*b+u这样的基本线性回归式。线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。简单看这个公式，y代表了一个n维的列向量（回归子），X代表了[n,k]大小的观测值矩阵（回归量），b是k维的回归参数，u是一个n维的剩余误差。回归分析干什么用的？具体讲就是预测。我们在数据挖掘中定义，定性的分析叫做分类，而定量的分析叫做回归。回归就是根据已有的观察值去预测未来的一个定量的指标。记得前一段阿里云到学院来做技术交流，讲到阿里和淘宝通过数据分析对中国商品交易（还是具体什么贸易，忘记了，尴尬）的预测就是工程师做的一个简单的线性回归分析，模型虽然简单，但是后来与实际数据一比较，预测值与实际值的曲线基本吻合。<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2011/01/01/342124.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/342124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2011-01-01 18:35 <a href="http://www.blogjava.net/changedi/archive/2011/01/01/342124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——随机生成和统计初步 </title><link>http://www.blogjava.net/changedi/archive/2011/01/01/342123.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Sat, 01 Jan 2011 10:30:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2011/01/01/342123.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/342123.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2011/01/01/342123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/342123.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/342123.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 概率统计最基本的前提就是有数据，而我们做模拟或者测试时总会用到大量的随机数据。我们知道绝对的随机是做不到的，但是可以利用算法来实现伪随机数的生成。Commons Math库提供了一个random的包，其中定义实现了很多可以用来生成随机数的类和接口。random包中定义了5个接口，分别是EmpiricalDistribution、NormalizedRandomGenerator、RandomData、RandomGenerator和RandomVectorGenerator。&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2011/01/01/342123.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/342123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2011-01-01 18:30 <a href="http://www.blogjava.net/changedi/archive/2011/01/01/342123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——分数和复数</title><link>http://www.blogjava.net/changedi/archive/2010/12/27/341639.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Mon, 27 Dec 2010 14:00:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/27/341639.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/341639.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/27/341639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/341639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/341639.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们讲到数学的计算，难免会遇到分数形式，因为实数的定义就是可以表示为一个分数的形式的数，而加入虚数的复数也是偶尔会遇到的。Commons Math包中的fraction和complex包就分别提供了方法来表示这两种数。<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2010/12/27/341639.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/341639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-27 22:00 <a href="http://www.blogjava.net/changedi/archive/2010/12/27/341639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——分布</title><link>http://www.blogjava.net/changedi/archive/2010/12/23/341408.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Thu, 23 Dec 2010 12:03:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/23/341408.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/341408.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/23/341408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/341408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/341408.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 概率分布是概率论的一个基础。<br><br>在Commons Math包中也专门有一个子包对概率分布进行了封装实现。在distribution包中，定义了一个基本接口Distribution。该接口只有两个方法，一个是double cumulativeProbability(double x)，一个是double cumulativeProbability(double x0, double x1)。前者对于服从某种分布的随机变量X，返回P(X<=x)；后者则返回P(x0<=X<=x1)。正如其名所示，这样也就得到了概率。<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2010/12/23/341408.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/341408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-23 20:03 <a href="http://www.blogjava.net/changedi/archive/2010/12/23/341408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——函数方程求解</title><link>http://www.blogjava.net/changedi/archive/2010/12/21/341256.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Tue, 21 Dec 2010 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/21/341256.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/341256.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/21/341256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/341256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/341256.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 函数方程求解，其实是函数的零点问题，也就是说函数的曲线与X轴的交点。对于线性方程，我们可以轻易的求解，对于线性方程组，利用前面讲过的的矩阵分解方法也可以求解。那么对于函数表达的很多非线性方程的求解。我们要依赖数值算法。Commons Math包中专门有一个analysis.solver包来解决这个问题。<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2010/12/21/341256.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/341256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-21 17:18 <a href="http://www.blogjava.net/changedi/archive/2010/12/21/341256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——函数积分</title><link>http://www.blogjava.net/changedi/archive/2010/12/19/341116.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Sun, 19 Dec 2010 13:27:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/19/341116.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/341116.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/19/341116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/341116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/341116.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 积分可以说是最常见的了，在函数的一节中我们讲过函数的微分和给定变量求值，这里我们讲讲通过函数求积分，具体的数值积分方法和应用。什么是数值积分？在数值分析中，数值积分是计算定积分数值的方法和理论。在数学分析中，给定函数的定积分的计算不总是可行的。许多定积分不能用已知的积分公式得到精确值。数值积分是利用黎曼积分等数学定义，用数值逼近的方法近似计算给定的定积分值。借助于电子计算设备，数值积分可以快速而有效地计算复杂的积分。Commons Math中的积分包analysis.integration提供了几种数值积分的实现，UnivariateRealIntegrator接口是积分包中的基础接口，该接口继承了math包中的ConvergingAlgorithm接口。具体定义了一系列方法，其中比较主要的有double integrate(UnivariateRealFunction f, double min, double max)方法，这个方法就是通过min和max设定积分区间，通过f设定被积函数，最后返回定积分值的方法。可以看到这个接口的实现是针对单变量实函数的。多元积分的实现，目前还没有看&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2010/12/19/341116.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/341116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-19 21:27 <a href="http://www.blogjava.net/changedi/archive/2010/12/19/341116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——函数插值 </title><link>http://www.blogjava.net/changedi/archive/2010/12/16/340932.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Thu, 16 Dec 2010 14:30:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/16/340932.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/340932.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/16/340932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/340932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/340932.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在Commons Math中的analysis.interpolation包中有所有的与函数插值相关的类和接口定义。这一篇主要从这个包分析，来研究一下函数插值的应用。在2.1的api doc中添加了很多新的接口和类实现，但是2.0的source code里还是只有少量的实现。这里以2.0的source code为标准，辅助以2.1的api doc（其实这都是不影响的）。<br><br>插值是数学领域数值分析中的通过已知的离散数据求未知数据的过程或方法。给定n个离散数据点（称为节点）(xk,yk)，k= 1,2,...,n。对于，求x所对应的y的值称为内插。f(x)为定义在区间[a,b]上的函数。x1,x2,x3...xn为[a,b]上n个互不相同的点，G为给定的某意函数类。若G上有函数g(x)满足： g(xi) = f(xi),k = 1,2,...n<br><br>则称g(x)为f(x)关于节点x1,x2,x3...xn在G上的插值函数<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2010/12/16/340932.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/340932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-16 22:30 <a href="http://www.blogjava.net/changedi/archive/2010/12/16/340932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——多项式函数</title><link>http://www.blogjava.net/changedi/archive/2010/12/15/340745.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Wed, 15 Dec 2010 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/15/340745.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/340745.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/15/340745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/340745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/340745.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在Commons Math中的analysis.polynomials包中有所有的与多项式函数相关的类和接口定义。这一篇主要从这个包分析，来研究一下多项式函数的应用。<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2010/12/15/340745.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/340745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-15 10:48 <a href="http://www.blogjava.net/changedi/archive/2010/12/15/340745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——函数</title><link>http://www.blogjava.net/changedi/archive/2010/12/14/340694.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Tue, 14 Dec 2010 11:39:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/14/340694.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/340694.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/14/340694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/340694.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/340694.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 向量和矩阵可以说是线性代数的代表，那么返还到高等数学中，函数就是我们最常用到的单位了，还有各种微积分和其他应用，都是建立在变量、函数的基础上的。Commons Math库的下一个研读部分就是针对函数这一块。在Commons Math中也单独有一个analysis包完成这部分实现。<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2010/12/14/340694.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/340694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-14 19:39 <a href="http://www.blogjava.net/changedi/archive/2010/12/14/340694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——矩阵分解</title><link>http://www.blogjava.net/changedi/archive/2010/12/13/340441.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Mon, 13 Dec 2010 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/13/340441.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/340441.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/13/340441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/340441.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/340441.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 补充上一次的矩阵知识，这次主要讲讲矩阵的一些分解运算——Matrix Decomposition：<br><br>矩阵分解主要有三种方式：LU分解，QR分解和奇异值分解。当然在Math的linear包中提供了对应的接口有CholeskyDecomposition、EigenDecomposition、LUDecomposition、QRDecomposition和SingularValueDecomposition这5种分解方式。<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2010/12/13/340441.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/340441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-13 09:39 <a href="http://www.blogjava.net/changedi/archive/2010/12/13/340441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——矩阵 </title><link>http://www.blogjava.net/changedi/archive/2010/12/11/340372.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Sat, 11 Dec 2010 13:12:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/11/340372.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/340372.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/11/340372.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/340372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/340372.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天来第二篇：矩阵——Matrix。<br><br>Math包org.apache.commons.math.linear里对矩阵的表示是有一个层次结构的。<br><br>最顶层的AnyMatrix是一个基本的interface。下面有3个sub interface：BigMatrix, FieldMatrix<T>, RealMatrix。而每个sub interface分别被相应的矩阵类实现。整个矩阵的层次结构也就出来了。不过其中的BigMatrix已经不用了。被Array2DRowFieldMatrix替代了。<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2010/12/11/340372.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/340372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-11 21:12 <a href="http://www.blogjava.net/changedi/archive/2010/12/11/340372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——向量 </title><link>http://www.blogjava.net/changedi/archive/2010/12/10/340286.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Fri, 10 Dec 2010 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/10/340286.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/340286.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/10/340286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/340286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/340286.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">看其他篇章到<a href="http://www.blogjava.net/changedi/archive/2010/12/10/340282.html">目录</a>选择。</span></p>
<p><span style="font-family: 宋体">首先从我们计算机人最熟悉的线性代数开始。</span></p>
<p><span style="font-family: 宋体">今天先写第一篇：向量——</span>vector<span style="font-family: 宋体">。另外补充一句，每一个具体类或者包的研究都是示例性质的，具体要用到什么类型的类或者接口，大家应该自己动手去翻阅</span>api doc<span style="font-family: 宋体">。</span></p>
<p>Vector<span style="font-family: 宋体">是一个普通的向量。在</span>math<span style="font-family: 宋体">包</span>org.apache.commons.math.linear<span style="font-family: 宋体">中有</span>RealVector<span style="font-family: 宋体">和</span>FieldVector<span style="font-family: 宋体">这两种向量，均是接口类型。前者是实数类型的向量，后者是场向量。以实数向量为例，</span>RealVector<span style="font-family: 宋体">有</span>AbstractRealVector, ArrayRealVector<span style="font-family: 宋体">。具体的结构类图见下：</span></p>
<div align="center"><img alt="" src="http://www.blogjava.net/images/blogjava_net/changedi/vector.jpg" border="0" /></div>
<br />
<p><span style="font-family: 宋体">这个结构可能会有些变化，因为在</span>doc<span style="font-family: 宋体">中，可以看到</span>ArrayRealVector<span style="font-family: 宋体">是继承</span>AbstractRealVector<span style="font-family: 宋体">的，而</span>2.0<span style="font-family: 宋体">的代码中</span>ArrayRealVector<span style="font-family: 宋体">还是直接实现了</span>RealVector<span style="font-family: 宋体">，且包中也没有</span>AbstractRealVector<span style="font-family: 宋体">。可见代码的变化和</span>doc<span style="font-family: 宋体">中的描述也有不同，虽然</span>doc<span style="font-family: 宋体">中说明了</span>AbstractRealVector<span style="font-family: 宋体">是</span>since 2.0<span style="font-family: 宋体">的，而且</span>ArrayRealVector<span style="font-family: 宋体">也是</span>since 2.0<span style="font-family: 宋体">的。呵呵，一个不一致。其实是</span>update date<span style="font-family: 宋体">的不同了。</span></p>
<p><span style="font-family: 宋体">向量这个概念是线性代数的基础。</span>RealVector<span style="font-family: 宋体">作为基本的接口，已经定义了基本所有的向量操作。比如向量的加减乘除运算、向量外积、向量内积、向量范数等等，当然</span>vector<span style="font-family: 宋体">的实现时基于数组类型的。</span>RealVector<span style="font-family: 宋体">的内部实现是</span>double []data;<span style="font-family: 宋体">。</span></p>
<p><span style="font-family: 宋体">需要重点解释的是一个操作</span>map***<span style="font-family: 宋体">：就像原来的</span>api<span style="font-family: 宋体">解释的&#8220;</span>The various mapXxx and mapXxxToSelf methods operate on vectors element-wise, i.e. they perform the same operation (adding a scalar, applying a function ...) on each element in turn. The mapXxx versions create a new vector to hold the result and do not change the instance. The mapXxxToSelf versions use the instance itself to store the results, so the instance is changed by these methods. In both cases, the result vector is returned by the methods<span style="font-family: 宋体">&#8221;。</span></p>
<p><span style="font-family: 宋体">具体是什么呢？很多的</span>map***<span style="font-family: 宋体">操作和</span>map***toself<span style="font-family: 宋体">操作就是对向量的每一个元素做固定操作的意思。而</span>map***<span style="font-family: 宋体">是返回新的实例的，而</span>map***toself<span style="font-family: 宋体">则返回自己。这个从源码可以看出，比如</span>mapAdd()<span style="font-family: 宋体">的实现：<br />
<br />
<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img id="Codehighlighter1_35_218_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_218_Open_Text.style.display='none'; Codehighlighter1_35_218_Closed_Image.style.display='inline'; Codehighlighter1_35_218_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_35_218_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_35_218_Closed_Text.style.display='none'; Codehighlighter1_35_218_Open_Image.style.display='inline'; Codehighlighter1_35_218_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;RealVector&nbsp;mapAdd(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;d)&nbsp;</span><span id="Codehighlighter1_35_218_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_35_218_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">[]&nbsp;out&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">[data.length];<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img id="Codehighlighter1_131_175_Open_Image" onclick="this.style.display='none'; Codehighlighter1_131_175_Open_Text.style.display='none'; Codehighlighter1_131_175_Closed_Image.style.display='inline'; Codehighlighter1_131_175_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_131_175_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_131_175_Closed_Text.style.display='none'; Codehighlighter1_131_175_Open_Image.style.display='inline'; Codehighlighter1_131_175_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;data.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_131_175_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_131_175_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;data[i]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;d;<br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayRealVector(out);<br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p><br />
<span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">而</span><span lang="EN-US" style="font-size: 10pt; color: black; mso-font-kerning: 0pt">mapAddToSelf()</span><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">的实现：</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img id="Codehighlighter1_41_157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_157_Open_Text.style.display='none'; Codehighlighter1_41_157_Closed_Image.style.display='inline'; Codehighlighter1_41_157_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_41_157_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_41_157_Closed_Text.style.display='none'; Codehighlighter1_41_157_Open_Image.style.display='inline'; Codehighlighter1_41_157_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;RealVector&nbsp;mapAddToSelf(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;d)&nbsp;</span><span id="Codehighlighter1_41_157_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_41_157_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img id="Codehighlighter1_89_134_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_134_Open_Text.style.display='none'; Codehighlighter1_89_134_Closed_Image.style.display='inline'; Codehighlighter1_89_134_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_89_134_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_89_134_Closed_Text.style.display='none'; Codehighlighter1_89_134_Open_Image.style.display='inline'; Codehighlighter1_89_134_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;data.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_89_134_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_89_134_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;data[i]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;d;<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">区别显然了，一个返回</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">new </span>ArrayRealVector<span style="font-family: 宋体">，一个返回</span>this<span style="font-family: 宋体">。</span></p>
<p><span style="font-family: 宋体">具体见代码：</span></p>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_0_10_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_10_Open_Text.style.display='none'; Codehighlighter1_0_10_Closed_Image.style.display='inline'; Codehighlighter1_0_10_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_10_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_10_Closed_Text.style.display='none'; Codehighlighter1_0_10_Open_Image.style.display='inline'; Codehighlighter1_0_10_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_10_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_0_10_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;algorithm.math;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.commons.math.linear.ArrayRealVector;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.commons.math.linear.RealVector;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_143_187_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_187_Open_Text.style.display='none'; Codehighlighter1_143_187_Closed_Image.style.display='inline'; Codehighlighter1_143_187_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_143_187_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_143_187_Closed_Text.style.display='none'; Codehighlighter1_143_187_Open_Image.style.display='inline'; Codehighlighter1_143_187_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_143_187_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_143_187_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">10</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Jia&nbsp;Yu<br />
</span><span style="color: #008080">11</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;@date&nbsp;2010-11-18<br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_213_2166_Open_Image" onclick="this.style.display='none'; Codehighlighter1_213_2166_Open_Text.style.display='none'; Codehighlighter1_213_2166_Closed_Image.style.display='inline'; Codehighlighter1_213_2166_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_213_2166_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_213_2166_Closed_Text.style.display='none'; Codehighlighter1_213_2166_Open_Image.style.display='inline'; Codehighlighter1_213_2166_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;VectorTest&nbsp;</span><span id="Codehighlighter1_213_2166_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_213_2166_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_217_240_Open_Image" onclick="this.style.display='none'; Codehighlighter1_217_240_Open_Text.style.display='none'; Codehighlighter1_217_240_Closed_Image.style.display='inline'; Codehighlighter1_217_240_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_217_240_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_217_240_Closed_Text.style.display='none'; Codehighlighter1_217_240_Open_Image.style.display='inline'; Codehighlighter1_217_240_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_217_240_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_217_240_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">16</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
</span><span style="color: #008080">17</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img id="Codehighlighter1_282_334_Open_Image" onclick="this.style.display='none'; Codehighlighter1_282_334_Open_Text.style.display='none'; Codehighlighter1_282_334_Closed_Image.style.display='inline'; Codehighlighter1_282_334_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_282_334_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_282_334_Closed_Text.style.display='none'; Codehighlighter1_282_334_Open_Image.style.display='inline'; Codehighlighter1_282_334_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_282_334_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_282_334_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000"><br />
</span><span style="color: #008080">20</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector();<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img id="Codehighlighter1_367_2163_Open_Image" onclick="this.style.display='none'; Codehighlighter1_367_2163_Open_Text.style.display='none'; Codehighlighter1_367_2163_Closed_Image.style.display='inline'; Codehighlighter1_367_2163_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_367_2163_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_367_2163_Closed_Text.style.display='none'; Codehighlighter1_367_2163_Open_Image.style.display='inline'; Codehighlighter1_367_2163_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;vector()&nbsp;</span><span id="Codehighlighter1_367_2163_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_367_2163_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000"><br />
</span><span style="color: #008080">25</span><span style="color: #008000"><img id="Codehighlighter1_424_437_Open_Image" onclick="this.style.display='none'; Codehighlighter1_424_437_Open_Text.style.display='none'; Codehighlighter1_424_437_Closed_Image.style.display='inline'; Codehighlighter1_424_437_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_424_437_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_424_437_Closed_Text.style.display='none'; Codehighlighter1_424_437_Open_Image.style.display='inline'; Codehighlighter1_424_437_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">[]&nbsp;vec1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_424_437_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_424_437_Open_Text"><span style="color: #000000">{&nbsp;1d,&nbsp;2d,&nbsp;3d&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img id="Codehighlighter1_458_471_Open_Image" onclick="this.style.display='none'; Codehighlighter1_458_471_Open_Text.style.display='none'; Codehighlighter1_458_471_Closed_Image.style.display='inline'; Codehighlighter1_458_471_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_458_471_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_458_471_Closed_Text.style.display='none'; Codehighlighter1_458_471_Open_Image.style.display='inline'; Codehighlighter1_458_471_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">[]&nbsp;vec2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_458_471_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_458_471_Open_Text"><span style="color: #000000">{&nbsp;4d,&nbsp;5d,&nbsp;6d&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayRealVector&nbsp;v1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayRealVector(vec1);<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayRealVector&nbsp;v2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayRealVector(vec2);<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;output&nbsp;directly</span><span style="color: #008000"><br />
</span><span style="color: #008080">31</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">v1&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1);<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;dimension&nbsp;:&nbsp;size&nbsp;of&nbsp;vector</span><span style="color: #008000"><br />
</span><span style="color: #008080">33</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">size&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.getDimension());<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;add</span><span style="color: #008000"><br />
</span><span style="color: #008080">35</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">v1&nbsp;+&nbsp;v2&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.add(v2));<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">v1&nbsp;+&nbsp;v2&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.add(vec2));<br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;substract</span><span style="color: #008000"><br />
</span><span style="color: #008080">38</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">v1&nbsp;-&nbsp;v2&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.subtract(v2));<br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;element&nbsp;by&nbsp;element&nbsp;multiply</span><span style="color: #008000"><br />
</span><span style="color: #008080">40</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">v1&nbsp;*&nbsp;v2&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.ebeMultiply(v2));<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;element&nbsp;by&nbsp;element&nbsp;divide</span><span style="color: #008000"><br />
</span><span style="color: #008080">42</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">v1&nbsp;/&nbsp;v2&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.ebeDivide(v2));<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;get&nbsp;index&nbsp;at&nbsp;1</span><span style="color: #008000"><br />
</span><span style="color: #008080">44</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">v1[1]&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.getEntry(</span><span style="color: #000000">1</span><span style="color: #000000">));<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;append</span><span style="color: #008000"><br />
</span><span style="color: #008080">46</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RealVector&nbsp;t_vec&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;v1.append(v2);<br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">v1&nbsp;append&nbsp;v2&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;t_vec);<br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;distance</span><span style="color: #008000"><br />
</span><span style="color: #008080">49</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">distance&nbsp;between&nbsp;v1&nbsp;and&nbsp;v2&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.getDistance(v2));<br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">L1&nbsp;distance&nbsp;between&nbsp;v1&nbsp;and&nbsp;v2&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.getL1Distance(v2));<br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;norm</span><span style="color: #008000"><br />
</span><span style="color: #008080">54</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">norm&nbsp;of&nbsp;v1&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.getNorm());<br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;dot&nbsp;product</span><span style="color: #008000"><br />
</span><span style="color: #008080">56</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">dot&nbsp;product&nbsp;of&nbsp;v1&nbsp;and&nbsp;v2&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.dotProduct(v2));<br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;outer&nbsp;product</span><span style="color: #008000"><br />
</span><span style="color: #008080">58</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">outer&nbsp;product&nbsp;of&nbsp;v1&nbsp;and&nbsp;v2&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.outerProduct(v2));<br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;orthogonal&nbsp;projection</span><span style="color: #008000"><br />
</span><span style="color: #008080">61</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">hogonal&nbsp;projection&nbsp;of&nbsp;v1&nbsp;and&nbsp;v2&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.projection(v2));<br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;map&nbsp;operations</span><span style="color: #008000"><br />
</span><span style="color: #008080">64</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Map&nbsp;the&nbsp;Math.abs(double)&nbsp;function&nbsp;to&nbsp;v1&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.mapAbs());<br />
</span><span style="color: #008080">66</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1.mapInvToSelf();<br />
</span><span style="color: #008080">67</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Map&nbsp;the&nbsp;1/x&nbsp;function&nbsp;to&nbsp;v1&nbsp;itself&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1);<br />
</span><span style="color: #008080">68</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;vector&nbsp;get&nbsp;sub&nbsp;vector</span><span style="color: #008000"><br />
</span><span style="color: #008080">69</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">sub&nbsp;vector&nbsp;of&nbsp;v1&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;v1.getSubVector(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">));<br />
</span><span style="color: #008080">70</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">71</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">72</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">73</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<p>对应的输出：<br />
<span style="font-family: 宋体"><br />
v1 is {1; 2; 3}<br />
size is 3<br />
v1 + v2 = {5; 7; 9}<br />
v1 + v2 = {5; 7; 9}<br />
v1 - v2 = {-3; -3; -3}<br />
v1 * v2 = {4; 10; 18}<br />
v1 / v2 = {0.25; 0.4; 0.5}<br />
v1[1] = 2.0<br />
v1 append v2 is {1; 2; 3; 4; 5; 6}<br />
distance between v1 and v2 is 5.196152422706632<br />
L1 distance between v1 and v2 is 9.0<br />
norm of v1 is 3.7416573867739413<br />
dot product of v1 and v2 is 32.0<br />
outer product of v1 and v2 is Array2DRowRealMatrix{{4.0,5.0,6.0},{8.0,10.0,12.0},{12.0,15.0,18.0}}<br />
hogonal projection of v1 and v2 is {1.66; 2.08; 2.49}<br />
Map the Math.abs(double) function to v1 is {1; 2; 3}<br />
Map the 1/x function to v1 itself is {1; 0.5; 0.33}<br />
sub vector of v1 is {1; 0.5}<br />
<br />
向量是一个基础数学结构，以后还会大量的提到。</span>Commons Math<span style="font-family: 宋体">库为我们提供了这样方便的向量表示，在用</span>Java<span style="font-family: 宋体">写起程序来也是得心应手。</span></p>
<p><span style="color: black; font-family: 宋体">当然所有的研究要以文档为主，参看文档写代码这是必须做到的事情。所以，不要嫌麻烦，赶紧把</span><span style="color: black; font-family: 'Courier New'">api doc</span><span style="color: black; font-family: 宋体">放到桌面上，开始</span><span style="color: black; font-family: 'Courier New'">coding</span><span style="color: black; font-family: 宋体">吧。</span></p>
&nbsp;
<p><span style="font-family: 宋体">相关资料：</span></p>
<p><span style="font-family: 宋体">向量定义：</span><a href="http://zh.wikipedia.org/zh/%E7%9F%A2%E9%87%8F">http://zh.wikipedia.org/zh/%E7%9F%A2%E9%87%8F</a></p>
<p>Commons math<span style="font-family: 宋体">包：</span><a href="http://commons.apache.org/math/index.html">http://commons.apache.org/math/index.html</a></p>
</span>
<img src ="http://www.blogjava.net/changedi/aggbug/340286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-10 17:46 <a href="http://www.blogjava.net/changedi/archive/2010/12/10/340286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Math学习笔记——目录（随时更新）</title><link>http://www.blogjava.net/changedi/archive/2010/12/10/340282.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Fri, 10 Dec 2010 09:41:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/12/10/340282.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/340282.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/12/10/340282.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/340282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/340282.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;以前学习笔记的整理，没有完成的部分以后会更新，每天放上来一点点~~<br />
<h3><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录</span></h3>
<p><span style="font-family: 宋体">今天开始着手对</span>commons math 2.1<span style="font-family: 宋体">库的研究，标准的名字应该是</span>The Apache Commons Mathematics Library<span style="font-family: 宋体">。</span><span style="font-family: 宋体">上网一查，没查到相关的学习资料，没办法，自己对着代码一点点啃吧。正好打发闲散时光，还可以回顾复习一些数学知识，其实一个主要原因是本人本硕阶段均未学习过任何数值分析方面的课程，实在悲哀，于是萌发了研究</span>Math<span style="font-family: 宋体">库的热情。当然这份文档记录也可以为以后要用</span>Java<span style="font-family: 宋体">写数学代码的同学提供一点参考。</span></p>
<p><span style="font-family: 宋体">先列出一个目录：（这个目录是根据</span>commons math 2.1<span style="font-family: 宋体">库的结构设计的）</span></p>
<p>Section 1 linear algebra <span style="font-family: 宋体">线性代数（矩阵为主）</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">1）&nbsp;<a href="http://www.blogjava.net/changedi/archive/2010/12/10/340286.html">Vector </a><span style="font-family: 宋体">向量</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">2）&nbsp;<a href="http://www.blogjava.net/changedi/archive/2010/12/11/340372.html">Matrix </a><span style="font-family: 宋体">矩阵</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">3）&nbsp;<a href="http://www.blogjava.net/changedi/archive/2010/12/13/340441.html">Matrix Decomposition </a><span style="font-family: 宋体">矩阵分解</span></p>
<p>Section 2 analysis <span style="font-family: 宋体">数学分析（函数为主）</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">1）&nbsp;<a href="http://www.blogjava.net/changedi/archive/2010/12/14/340694.html">Function </a><span style="font-family: 宋体">函数</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">2）&nbsp;<a href="http://www.blogjava.net/changedi/archive/2010/12/15/340745.html">Polynomial </a><span style="font-family: 宋体">多项式函数</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">3）&nbsp;<a href="http://www.blogjava.net/changedi/archive/2010/12/16/340932.html">Interpolation </a><span style="font-family: 宋体">插值</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">4）&nbsp;<a href="http://www.blogjava.net/changedi/archive/2010/12/19/341116.html">Integration </a><span style="font-family: 宋体">积分</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">5）&nbsp;<a href="http://www.blogjava.net/changedi/archive/2010/12/21/341256.html">Solver </a><span style="font-family: 宋体">求解</span></p>
<p>Section 3 Probabilityand Statistics <span style="font-family: 宋体">概率和统计</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<span style="font-family: 宋体">）</span><a href="http://www.blogjava.net/changedi/archive/2010/12/23/341408.html">distribution </a><span style="font-family: 宋体">分布</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<span style="font-family: 宋体">）</span><a href="http://www.blogjava.net/changedi/archive/2010/12/27/341639.html">fraction and complex</a> <span style="font-family: 宋体">分数和复数</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<span style="font-family: 宋体">）</span><a href="http://www.blogjava.net/changedi/archive/2011/01/01/342123.html">random and statistics</a> <span style="font-family: 宋体">随机生成和统计初步<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;4）<a href="http://www.blogjava.net/changedi/archive/2011/01/01/342124.html">cluster and regression</a>聚类和回归</span></p>
<img src ="http://www.blogjava.net/changedi/aggbug/340282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-12-10 17:41 <a href="http://www.blogjava.net/changedi/archive/2010/12/10/340282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>