【问题标题】:Matlab: interpolation operator for multigrid methodsMatlab:多重网格方法的插值算子
【发布时间】:2017-03-30 19:06:54
【问题描述】:

我必须建立以下矩阵:

 1 2 1
     1 2 1
         1 2 1

我尝试了以下方法:

 N = 8;
 full( ( spdiags(repmat([1/4,1/2,1/4], N/2-1, 1), 0:2, N/2-1, N-1) ) )

但输出不是我想要的。

【问题讨论】:

  • N 应该是什么?
  • @Suever 嗨。我正在使用多网格方法来求解线性方程组,N 是原始系统的维数。但我不认为这会改变任何东西,我只是想建立那个矩阵。谢谢。

标签: matlab matrix sparse-matrix


【解决方案1】:

它不是干净,但无论如何它应该可以工作:

 N = 10;
 w(1, :) = [1, 2, 1, zeros(1, (N-1)-3)];
 for i = 1:(N/2-2)
     w(i+1, :) = [zeros(1, i*2), 1, 2, 1, zeros(1, (N-1)-(3+i*2))];
 end

【讨论】:

    【解决方案2】:

    我敢肯定这可以压缩一点,但这里有一个没有循环的解决方案。假设h 是网格间距,N=1/h-1 是奇数:

    wdiag = 2*ones(N,1);
    wsubsuperdiag = ones(N,1);
    w = spdiags([wsubsuperdiag wdiag wsubsuperdiag],[-2 -1 0],N,(N+1)/2-1);
    w = 1/2*cell2mat(arrayfun(@(k) circshift(w(:,k),k-1),1:(N+1)/2-1,'uni',0));
    

    感谢Jon

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-03
      • 2010-12-05
      • 1970-01-01
      • 2023-03-19
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多