如何在MATLAB中排除方阵的行和列

  • 本文关键字:方阵 排除 MATLAB matlab
  • 更新时间 :
  • 英文 :


我有一个用于域的10*10数组

TT=

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

,但我需要排除以域为中心的正方形,所以新域将是:

TT_new=

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0         0 0 0
0 0 0         0 0 0
0 0 0         0 0 0
0 0 0         0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

我将为域TT_new创建一个for循环,我如何在MATLAB中进行此操作?

澄清:我需要for循环通过";i、 j";新域的";TT_new";。

例如,对于U形板的稳态热传导问题,我有以下网格图:

2D图

3D绘图

我需要从图中排除紫色矩形,因为它不在计算域内。

你想过使用口罩吗?

你不能有带孔的矩阵,但如果你将原始数组与一个处处包含1、处处包含0的矩阵逐元素相乘,你的结果将是一个处处都包含原始数字的数组,但掩码中有零的地方是零。例如:

my_arr = reshape(1:30, 5, 6);
my_mask = ones(5, 6);
my_mask(1:3, 3:4) = 0;
masked_arr = my_arr .* my_mask;

这给出:

my_arr = 
1    6   11   16   21   26
2    7   12   17   22   27
3    8   13   18   23   28
4    9   14   19   24   29
5   10   15   20   25   30

my_mask = 
1   1   0   0   1   1
1   1   0   0   1   1
1   1   0   0   1   1
1   1   1   1   1   1
1   1   1   1   1   1
masked_arr = 
1    6    0    0   21   26
2    7    0    0   22   27
3    8    0    0   23   28
4    9   14   19   24   29
5   10   15   20   25   30

这是否适用于您的情况取决于您在计算中如何使用计算域的边界。与包含NaN的掩码相乘会将不需要的元素更改为NaN。

然后,您可以在每次迭代之前(或之后,或两者兼而有之(应用掩码,以确保不需要的元素设置为零(或NaN,但如果您将这些元素与任何元素相加/相减/相乘,可能会导致问题(。

domain_mask = ones(size(T));
domain_mask(7:16, 12:31) = 0;
domain_mask_small = domain_mask(2:end-1, 2:end-1);
zero_row = zeros(1, size(T, 2));
zero_col = zeros(size(T, 1), 1);
while error > tol
% Perform operations on the entire array
T_iplus1 = [T(2:end, :); zero_row];
T_iminus1 = [zero_row; T(1:end-1, :)];
T_jplus1 = [T(:, 2:end), zero_col];
T_jminus1 = [zero_col, T(:, 1:end-1)];

T_temp = 0.25 * (T_iplus1 + T_iminus1 + T_jplus1 + T_jminus1);
T(2:end-1, 2:end-1) = T_temp(2:end-1, 2:end-1) .* domain_mask_small;
% Do whatever else
end

相关内容

  • 没有找到相关文章

最新更新