用于将数组中的最大数量调整为第二个数组中的最小数量的逻辑

时间:2011-04-27 07:43:51

标签: arrays matlab logic numeric numerical-methods

问候所有

用于将数组中的最大数量调整为第二个数组中的最小数量的逻辑

我有一个数组“A”

A=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1]

我希望第二个数组朝着“相反”的方向前进,所以当数组“A”中的数字变高时,数组“B”中的数字应该变低

数组“B”应该是什么样子的例子(和A再次作为参考)

B=[1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1 0 .1 .2 .3 .4 .5 .6 .7 .8 .9]
A=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1]

我尝试使用这种逻辑,但它当然使一切都是积极的

arrayB=-abs(arrayA).+abs(max(arrayA));

但这不起作用我正在使用matlab但如果有人知道正确的逻辑我可以通过matlab语法转换它

TIA

数字表示信号的不同幅度,因此当一个信号阵列A的幅度上升时,另一个信号阵列B应该下降。有“重叠”

4 个答案:

答案 0 :(得分:0)

瑞克,

是否像B [i] = 1 - abs(A [i])一样简单......或者我错过了什么?

否定者很快就会停止排队,这使得很难看到这种关系。

干杯。基思。


编辑:不,这不是那么简单!

没有“普通计算”会产生这些结果。

这一切都很好,直到我们到达.1 0 -.1 ...产生-.9 -1 -.9

我猜你必须在10点之后“走过它”,在每10点之后交换结果的符号。

A=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1  .9  .8  .7  .6  .5  .4  .3  .2  .1  0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1]
B=[1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1  0  .1  .2  .3  .4  .5  .6  .7  .8  .9]

这有什么意义吗?你可以看出为什么我没有做更高级别的数学。

干杯。基思。

答案 1 :(得分:0)

以下代码是否或多或少地符合您的要求?

Ad = diff(A);
B = cumsum([max(A) -Ad]);

答案 2 :(得分:0)

您的标题和说明非常令人困惑,我无法告诉他们您要做什么。但是,查看要从输入数组B生成的所需输出数组A,我可以为您提供一些操作,为您进行转换:

B = max(A)-cumsum([0 abs(diff(A))].*sign(A+eps));

这会在数组A的值中找到absolute differences,将这些差异乘以A元素的sign(将0视为正数)通过向信号添加EPS,获取这些值的cumulative sum,然后从A中的maximum value中减去它们。

在这种情况下,另一种解决方案就是使用array indexing创建A的循环移位。例如,移动数组A使其最大值位于数组的开头将为您提供所需的数组B

[~,maxIndex] = max(A);
B = A([maxIndex:end 1:maxIndex-1]);

答案 3 :(得分:0)

这也将创建正确的答案

A=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1]';

B=circshift(A,30)