y1=[1:6]';
y=zeros(11);
y=sparse(y);
yc=[1 4 5 6 3 1]';
disp(y(y1,y1));
y(y1,y1)=y(y1,y1)+yc;
disp(y(y1,y1));

我想要让y的1到6行对角元素逐个加yc,但是非对角元素也会加,这是为啥
y1=[1:6]';
y=zeros(11);
y=sparse(y);
yc=[1 4 5 6 3 1]';
disp(y(y1,y1));
y(y1,y1)=y(y1,y1)+yc;
disp(y(y1,y1));

该回答引用自GPT-3.5,由博主GISer Liu编写:
问题分析:
根据你的描述,你希望将矩阵 y 的对角线上的元素依次加上向量 yc 的对应元素,并保持其他元素不变。但是在你的代码中,执行 y(y1,y1)=y(y1,y1)+yc; 这一行时,出现了非对角线元素也被修改的问题。
解决方案:
这个问题的原因在于 MATLAB 中的索引操作 y(y1, y1) 并不仅仅是选取了对角线上的元素,而是选取了矩阵 y 的 (y1, y1)
位置的元素,其中 y1 是一个列向量。因此,不仅会选取对角线上的元素,还会选取与 y1 中的元素有关的非对角线元素。
要解决这个问题,可以采用循环的方式逐个修改对角线上的元素,而不是使用索引操作。下面是修改后的代码:
matlab
Copy code
% 给对角线上的元素逐个加上向量 yc 的对应元素
for i = 1:length(y1)
y(y1(i), y1(i)) = y(y1(i), y1(i)) + yc(i);
end
% 显示修改后的对角线元素
disp(y(y1, y1));
这样就可以确保只有对角线上的元素被修改,而非对角线上的元素保持不变。
如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑