利用matlab做以10为底的阶乘
今天白天在Bitunion上看到一个帖子,询问的原文内容是这样
0.01和10000之间以10倍递增来生成向量用什么命令?
好像可以用":"运算符的,忘记怎么用了
其实看到这个帖子的第一印象,我想到的是linspace做运算,不过打开Matlab看了一下,这个还是不行,linspace做的是在线性轴上作平均采样点。
然后问了一下CNan同学,她提出的是用相对linspace用法的另一个函数logspace。刚才考虑了一下,这个还是可行的。对应的代码如下所示:
然而已开始我所想到的是去DIY一个算法。就是利用其指数的线性递增关系,把指数用一个变量来描述出来,然后用10去与这个变量作指数运算,其代码如下:
a=-2:4;
b=10.^a
b=10.^a
其实个人认为这个还是比较容易理解的。但是对比两种描述方式不难发现,第一种虽然只需要一行代码,但需要先把上限与下限的指数差算出来,而后一种则在变量a中自动包含了这一条信息。
当然那个帖子讨论的范围也逐渐超出了LZ的问题。有人问到为什么出来的结果是这样呢?
b =
1.0e+004 *
0.0000 0.0000 0.0001 0.0010 0.0100 0.1000 1.0000
1.0e+004 *
0.0000 0.0000 0.0001 0.0010 0.0100 0.1000 1.0000
前两个数据为什么是零呢?
我觉得其实这是因为Matlab本身对数据的显示只保留小数点后4位,为什么总数要把小数点向左移动了4位,应该是取决于这一行数的最大值(10000)。
其实这些都称不上什么算法,本身并不难。不同的代码可以输出相同的结果,但各有优劣势。对比才能发现其中的差异,这样才能在使用的时候选择合适的代码。