【问题标题】:Tridiagonal Matrix in MatlabMatlab中的三对角矩阵
【发布时间】:2014-05-31 05:08:07
【问题描述】:

任何人都知道在 matlab 中构建以下方阵的快速有效方法

 1    -1     0     0     0     0
-1     2    -1     0     0     0
 0    -1     2    -1     0     0
 0     0    -1     2    -1     0
 0     0     0    -1     2    -1
 0     0     0     0    -1     1

除了对角线的第一个和最后一个元素以及两个相邻对角线上的-1之外,对角线上有 2。

这是一个 6x6 的示例,我想在 Matlab nxn 中尽可能快速高效地生成一个示例。我尝试使用内置函数 kron 但无法摆脱它。

非常感谢

【问题讨论】:

  • 查看答案here。
  • @Naveh,虽然这不是同一个请求...
  • 我知道,只是觉得它可能有用。它不是重复的。

标签: matlab matrix toeplitz


【解决方案1】:

这是一种选择

function a = laplacianMatrix(n)

  a = toeplitz([2,-1,zeros(1,n-2)]);
  a([1,end]) = 1;

end

这个版本或使用gallery 的版本(参见 Sam Roberts 的回答)是否更快似乎取决于矩阵的大小。对于小型矩阵(在我的机器上最多约为 n = 200),使用 toeplitz 会更快。对于较大的矩阵,使用gallery 会更快。

【讨论】:

    【解决方案2】:

    这个怎么样:

    function mymatrix = makemymatrix(n)
    
    mymatrix = full(gallery('tridiag',n,-1,2,-1));
    mymatrix([1,end]) = 1;
    

    这对你有用吗?

    【讨论】:

      【解决方案3】:
      result = conv2(eye(6), [-1 2 -1],'same');
      result([1 end]) = 1;
      

      【讨论】:

        【解决方案4】:
        n=6;
        
        B=zeros(n);
        
        
        for i=1:n
        
            for j=1:n
                B(1,1)=1;
                if i==j
                B(i,j)=2;
                elseif i==j+1
                B(i,j)=-1;
                elseif j==i+1
                B(i,j)=-1
                else
                B(i,j)=0;
                end
                B(n,n)=1;
            end
        
        end;
         B
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-21
          • 1970-01-01
          • 1970-01-01
          • 2011-08-16
          • 1970-01-01
          相关资源
          最近更新 更多