首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MATLAB中定制的行空间和日志空间

在MATLAB中定制的行空间和日志空间
EN

Stack Overflow用户
提问于 2015-11-23 18:09:38
回答 1查看 1.4K关注 0票数 1

我决定看看两个函数linspacelogspace。下面我给出两个例子,一个使用MATLAB的内置linspace,另一个用于logspace,以及它们的手工实现。在第一种情况下,内置函数linspace和手工代码都给出了相同的结果。但是,在检查logspace函数时,情况并非如此。你能帮我找出手工代码中的错误吗?

代码语言:javascript
复制
a = 1; b = 5; n = 7;
y = linspace(1,5,7);
yy = zeros(1,n); yy(1) = a;
for i=2:n
    yy(i) = yy(i-1) + (b-a)/(n-1); 
end

x = logspace(1,5,7);
xx = zeros(1,n); xx(1) = 10^a;
for i=2:n
    xx(i) = xx(i-1) + (10^b-10^a)/(n-1); 
end

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-23 18:50:53

linspacelogspace的唯一不同之处在于,它们更进一步,对linspace数组中的每个元素提高了10的幂。

因此,您只需取您生成的linspace的方程,得到结果并将其提高到10的幂。然而,使用您的代码,您依赖的是先前的结果,而该结果已经提升到10的幂。因此,您需要将反日志转换回线性形式,然后使用相同的逻辑生成linspace,然后将其提高到10的幂。因此,关系是:

代码语言:javascript
复制
xx[n] = 10^(log10(xx[n-1]) + ((b-a)/(n-1))) 

您当然可以简化这一点,利用10^(log10(z)) = z这个事实,就像z > 0一样。我们还可以使用10^(m + n) = (10^m) * (10^n)的属性来拆分电源中的术语。因此:

代码语言:javascript
复制
xx[n] = xx[n-1] * (10^((b-a)/(n-1)))

因此,只需使用前面的结果10^((b-a)/(n-1))

代码语言:javascript
复制
a = 1; b = 5; n = 7;

x = logspace(1,5,7);
xx = zeros(1,n); xx(1) = 10^a;
for i=2:n
    xx(i) = xx(i-1)*(10^((b-a)/(n-1))); %// Change 
end

我们得到了xxx

代码语言:javascript
复制
>> format long g;
>> x

x =

  Columns 1 through 4

                        10          46.4158883361278          215.443469003188                      1000

  Columns 5 through 7

          4641.58883361278          21544.3469003189                    100000

>> xx

xx =

  Columns 1 through 4

                        10          46.4158883361278          215.443469003188                      1000

  Columns 5 through 7

          4641.58883361278          21544.3469003188                    100000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33877659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档