0

大家好

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

我有一个数组“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语法

蒂亚

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

4

4 回答 4

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)
于 2011-04-27T19:17:18.380 回答
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]

这有任何意义吗?你可以看到为什么我没有做更高层次的数学。

干杯。基思。

于 2011-04-27T07:49:17.473 回答
0

您的标题和描述非常混乱,我无法从他们那里看出您要做什么。但是,查看B您想要从输入数组生成的所需输出数组A,我可以为您提供一些将为您进行转换的操作:

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

这会找到沿 array 的值的绝对 A,将这些差乘以元素的符号(通过将EPS添加到信号A将 0 计数为正),获取这些值的累积和,然后从 中的最大值中减去它们。A

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

[~,maxIndex] = max(A);
B = A([maxIndex:end 1:maxIndex-1]);
于 2011-04-27T14:52:46.943 回答
0

下面的代码或多或少是你想要的吗?

Ad = diff(A);
B = cumsum([max(A) -Ad]);
于 2011-04-27T08:34:43.117 回答