为什么我的Matlab代码不能正常工作?

为什么我的Matlab代码不能正常工作?,matlab,debugging,Matlab,Debugging,我的代码 它应该做什么: b(abs(b(1:3:length(b))) > 0.75) = 0.75 这两个怎么不一样呢?索引部分b(1:3:end)返回一个由0和1组成的短向量,因此只会更改b的i(对于b的前三个ish中的i)如果第3*i+1条目的绝对值大于0.75 例如: b1 = b(1:3:end); b1(abs(b1)>0.75) = 0.75; b(1:3:end) = b1; 会回来吗 b = [-0.684; 0.941; 0.

我的代码

它应该做什么:

    b(abs(b(1:3:length(b))) > 0.75) = 0.75
这两个怎么不一样呢?

索引部分
b(1:3:end)
返回一个由0和1组成的短向量,因此只会更改
b
i
(对于
b
的前三个ish中的
i
)如果第
3*i+1
条目的绝对值大于
0.75

例如:

    b1 = b(1:3:end);
    b1(abs(b1)>0.75) = 0.75;
    b(1:3:end) = b1;
会回来吗

b = [-0.684; 0.941; 0.914; -0.029; 0.6; -0.716; -0.156; 0.831; 0.584; 0.919];
b_index = abs(b(1:3:length(b)))>0.75
b(b_指数)=0.75
b
的第四个条目更改为
0.75

作为一个班轮的一种方法是

b_index =

     0
     0
     0
     1
b(1:3:end)=b(1:3:end)。*(abs(b(1:3:end))0.75);

但是我认为三行代码更清晰一些。

三行exmaple的第一行代码没有任何功能。是的,它有功能。我要向量中的每三个位置。不,不是。它不意味着什么,也不把结果保存在任何地方。很可能你的意思是b1=b(1:3:end)哦,对不起,我忘了代码的一部分。
b(1:3:end) = b(1:3:end).*(abs(b(1:3:end))<=0.75)) + 0.75*((b(1:3:end)>0.75));