倔强青铜铜 2024-05-04 19:34 采纳率: 76.5%
浏览 4
已结题

matlab某些对角元素加完一个向量发现非对角元素也加了


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));

img


我想要让y的1到6行对角元素逐个加yc,但是非对角元素也会加,这是为啥

  • 写回答

1条回答 默认 最新

  • GISer Liu 2024-05-04 19:59
    关注

    该回答引用自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));
    

    这样就可以确保只有对角线上的元素被修改,而非对角线上的元素保持不变。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月5日
  • 已采纳回答 5月5日
  • 创建了问题 5月4日