我有以下问题:
编写一个程序:
首先通过键盘请求A矩阵。
- 醇>
接下来,如果A的列数是奇数,则必须添加最后一列额外的零。从这一矩阵开始,A具有偶数(n)列。
程序将输入矩阵分成两个子矩阵。
第一个子矩阵(A1)包含A的前n / 2列。第二个子矩阵(A2)包含最后n / 2列。
最后,程序必须在屏幕上计算并在屏幕上写入矩阵B,其中奇数行中的A1行和成对中的A2行。
< / LI> 醇>
A = input('Enter a matrix:')
% A = magic(5) % for example
[filA, colA] = size(A);
if rem(colA,2)==1
A = [A, zeros(filA,1)]
colA = colA + 1;
end
A1 = A(:, [1:colA/2])
A2 = A(:, [1+(colA/2):colA])
%B
答案 0 :(得分:1)
以下是我建议你的解决方案:
A = [1 2 3; 1 2 3; 1 2 3; 1 2 3];
[A_r,A_c] = size(A);
if (mod(A_c,2) ~= 0)
A = [A zeros(A_r,1)];
A_c = A_c + 1;
end
off = A_c / 2;
A1 = A(:,1:off);
A2 = A(:,(off+1):A_c);
B = reshape([A1(:) A2(:)].',2*A_r,[])
它使用reshape function来交错矩阵A1
和A2
的行。通过省略最后一行末尾的;
,让Matlab在控制台中打印最终计算的输出,即:
B =
1 2
3 0
1 2
3 0
1 2
3 0
1 2
3 0
使用逐步调试方法,您可以看到每个步骤的执行方式。
答案 1 :(得分:0)
clear all, clc;
A = input('Ingrese una matriz:')
[filA, colA] = size(A);
if rem(colA,2)==1
A = [A, zeros(filA,1)]
colA = colA + 1;
end
A1 = A(:, [1:colA/2])
A2 = A(:, [1+(colA/2):colA])
B = A2([1;1]*(1:size(A2,1)),:)
B(1:2:end,:) = A1