利用matlab做以10为底的阶乘

Corolla posted @ 2008年6月04日 14:11 in 未分类 with tags matlab linspace logspace 指数递增,线性递增 , 2622 阅读

 今天白天在Bitunion上看到一个帖子,询问的原文内容是这样

0.01和10000之间以10倍递增来生成向量用什么命令?
好像可以用":"运算符的,忘记怎么用了

其实看到这个帖子的第一印象,我想到的是linspace做运算,不过打开Matlab看了一下,这个还是不行,linspace做的是在线性轴上作平均采样点。

然后问了一下CNan同学,她提出的是用相对linspace用法的另一个函数logspace。刚才考虑了一下,这个还是可行的。对应的代码如下所示:

logspace(-2,4,7)  %-2代表10^(-2)为下限,而10^4则是上限,7代表在指数域中采7个点

 然而已开始我所想到的是去DIY一个算法。就是利用其指数的线性递增关系,把指数用一个变量来描述出来,然后用10去与这个变量作指数运算,其代码如下: 

a=-2:4;

b=10.^a

其实个人认为这个还是比较容易理解的。但是对比两种描述方式不难发现,第一种虽然只需要一行代码,但需要先把上限与下限的指数差算出来,而后一种则在变量a中自动包含了这一条信息。

当然那个帖子讨论的范围也逐渐超出了LZ的问题。有人问到为什么出来的结果是这样呢?

b =

  1.0e+004 *

    0.0000    0.0000    0.0001    0.0010    0.0100    0.1000    1.0000

前两个数据为什么是零呢?

我觉得其实这是因为Matlab本身对数据的显示只保留小数点后4位,为什么总数要把小数点向左移动了4位,应该是取决于这一行数的最大值(10000)。

其实这些都称不上什么算法,本身并不难。不同的代码可以输出相同的结果,但各有优劣势。对比才能发现其中的差异,这样才能在使用的时候选择合适的代码。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter