使用两个矩阵中的备用行创建矩阵[MATLAB]

时间:2018-02-02 00:49:07

标签: matlab sorting if-statement matrix

我有以下问题:

  

编写一个程序:

     
    
        
  1. 首先通过键盘请求A矩阵。

  2.     
  3. 接下来,如果A的列数是奇数,则必须添加最后一列额外的零。从这一矩阵开始,A具有偶数(n)列。

  4.        

程序将输入矩阵分成两个子矩阵。

  
    
        
  1. 第一个子矩阵(A1)包含A的前n / 2列。第二个子矩阵(A2)包含最后n / 2列。

  2.     
  3. 最后,程序必须在屏幕上计算并在屏幕上写入矩阵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

2 个答案:

答案 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来交错矩阵A1A2的行。通过省略最后一行末尾的;,让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