我决定看看两个函数linspace和logspace。下面我给出两个例子,一个使用MATLAB的内置linspace,另一个用于logspace,以及它们的手工实现。在第一种情况下,内置函数linspace和手工代码都给出了相同的结果。但是,在检查logspace函数时,情况并非如此。你能帮我找出手工代码中的错误吗?
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谢谢!
发布于 2015-11-23 18:50:53
linspace和logspace的唯一不同之处在于,它们更进一步,对linspace数组中的每个元素提高了10的幂。
因此,您只需取您生成的linspace的方程,得到结果并将其提高到10的幂。然而,使用您的代码,您依赖的是先前的结果,而该结果已经提升到10的幂。因此,您需要将反日志转换回线性形式,然后使用相同的逻辑生成linspace,然后将其提高到10的幂。因此,关系是:
xx[n] = 10^(log10(xx[n-1]) + ((b-a)/(n-1))) 您当然可以简化这一点,利用10^(log10(z)) = z这个事实,就像z > 0一样。我们还可以使用10^(m + n) = (10^m) * (10^n)的属性来拆分电源中的术语。因此:
xx[n] = xx[n-1] * (10^((b-a)/(n-1)))因此,只需使用前面的结果乘和10^((b-a)/(n-1))
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我们得到了x和xx
>> 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 100000https://stackoverflow.com/questions/33877659
复制相似问题