MATLAB - 转置运算符
MATLAB - 矩阵转置
Section titled “MATLAB - 矩阵转置”转置是一种基本的矩阵运算,它将矩阵的行与列互换。它广泛应用于线性代数、数据分析和许多科学计算任务中。本教程将介绍如何在 MATLAB 中执行转置操作,并强调在使用复数时的一个关键区别。
理解矩阵转置
Section titled “理解矩阵转置”矩阵 A 的转置表示为 AT。如果 A 是一个 m x n 矩阵,则 AT 将是一个 n x m 矩阵。原始矩阵中第 i 行、第 j 列的元素在转置矩阵中会移动到第 j 行、第 i 列。
例如,考虑以下 3x3 矩阵 M:
M = 1 2 3 4 5 6 7 8 9矩阵 M 的转置,表示为 M_T,将是:
M_T = 1 4 7 2 5 8 3 6 9一个重要的性质是,对矩阵进行两次转置会返回原始矩阵:** (AT)T = A**。
MATLAB 中的转置运算符
Section titled “MATLAB 中的转置运算符”MATLAB 提供了两个主要的转置运算符,理解它们的区别至关重要:
.'(点撇号):执行标准的非共轭转置。'(撇号):执行复共轭转置(也称为 Hermitian 转置或伴随转置)。
实数矩阵的转置
Section titled “实数矩阵的转置”对于只包含实数的矩阵,两个运算符(.' 和 ')产生相同的结果。
%% 创建一个实数矩阵realMatrix = [1, 2, 3; 4, 5, 6; 7, 8, 9];
%% 使用非共轭转置运算符 (.')transpose1 = realMatrix.';
%% 使用共轭转置运算符 (')transpose2 = realMatrix';
% 显示结果disp('Original Matrix:');disp(realMatrix);disp('Transpose using .'':');disp(transpose1);disp('Transpose using '':'');disp(transpose2);执行此代码将显示 transpose1 和 transpose2 是相同的:
Original Matrix: 1 2 3 4 5 6 7 8 9
Transpose using .': 1 4 7 2 5 8 3 6 9
Transpose using ': 1 4 7 2 5 8 3 6 9复数矩阵的转置:关键区别
Section titled “复数矩阵的转置:关键区别”当处理复数时,这两个运算符之间的区别变得显而易见。复数 a + bi 的共轭是 a - bi。
A.'(非共轭转置) 仅交换行和列。A'(复共轭转置) 交换行和列,并取每个元素的复共轭。
%% 创建一个复数矩阵complexMatrix = [1+2i, 3-4i; 5, 6+7i];
%% 执行非共轭转置nonConjugateT = complexMatrix.';
%% 执行复共轭转置conjugateT = complexMatrix';
% 显示结果disp('Original Complex Matrix:');disp(complexMatrix);disp('Non-Conjugate Transpose (. ''):');disp(nonConjugateT);disp('Complex Conjugate Transpose (''):');disp(conjugateT);输出清晰地显示了区别:
Original Complex Matrix: 1.0000 + 2.0000i 3.0000 - 4.0000i 5.0000 + 0.0000i 6.0000 + 7.0000i
Non-Conjugate Transpose (. '): 1.0000 + 2.0000i 5.0000 + 0.0000i 3.0000 - 4.0000i 6.0000 + 7.0000i
Complex Conjugate Transpose ('): 1.0000 - 2.0000i 5.0000 + 0.0000i 3.0000 + 4.0000i 6.0000 - 7.0000i最佳实践和常见陷阱
Section titled “最佳实践和常见陷阱”专业提示:除非您在数学算法中特别需要复共轭转置(例如,在线性代数中用于 Hermitian 矩阵),否则现代的最佳实践是默认使用点转置运算符 (.)。
这可以防止在您的代码意外接收到复数数据(例如,来自快速傅里叶变换 (FFT))时出现细微的错误。
基于函数的转置
Section titled “基于函数的转置”MATLAB 还提供了反映运算符行为的函数。虽然运算符在 MATLAB 代码中通常更符合习惯且更常见,但当将操作作为函数句柄传递时,这些函数会很有用。
transpose(A):等同于A.'(非共轭)。ctranspose(A):等同于A'(复共轭)。
%% 使用 transpose() 函数funcTranspose = transpose(complexMatrix);disp('Result from transpose() function:');disp(funcTranspose);
%% 使用 ctranspose() 函数funcCTranspose = ctranspose(complexMatrix);disp('Result from ctranspose() function:');disp(funcCTranspose);此代码的输出将与之前显示的基于运算符的结果相匹配。