MATLAB如何提取矩阵公因子并输出对应简化矩阵?
Matlab 矩阵公因子提取方法
功能说明
给定任意矩阵,提取可整除所有元素的公因子,公因子支持实整数、虚数单位i两类,最终输出公因子及所有元素除以公因子后的简化矩阵。
实现代码
function [common_factor, simplified_matrix] = extract_common_factor(M) i = sqrt(-1); % 判断是否所有元素均为虚部为整数的纯虚数 is_all_pure_imag = all(all(real(M) == 0)); imag_parts = imag(M); is_imag_all_int = all(all(mod(imag_parts, 1) == 0)); imag_factor = 1; temp_mat = M; if is_all_pure_imag && is_imag_all_int imag_factor = i; temp_mat = imag_parts; end % 计算实整数矩阵所有元素的最大公约数 all_elems = temp_mat(:); real_gcd = all_elems(1); for k = 2:length(all_elems) real_gcd = gcd(real_gcd, all_elems(k)); end % 合并得到最终公因子,计算简化矩阵 common_factor = imag_factor * real_gcd; simplified_matrix = M / common_factor; end % 测试示例 i = sqrt(-1); % 示例1:实整数矩阵 M1 = [2 4 6; 8 10 12]; [f1, mat1] = extract_common_factor(M1); disp('示例1输出:'); disp(['公因子: ', num2str(f1)]); disp('矩阵: '); disp(mat1); % 示例2:纯虚数矩阵 M2 = [1*i 4*i 5*i; 8*i 7*i 12*i]; [f2, mat2] = extract_common_factor(M2); disp('示例2输出:'); disp(['公因子: ', num2str(f2)]); disp('矩阵: '); disp(mat2); % 示例3:无大于1实公因子的矩阵 M3 = [1 2 5; 4 8 1]; [f3, mat3] = extract_common_factor(M3); disp('示例3输出:'); disp(['公因子: ', num2str(f3)]); disp('矩阵: '); disp(mat3);
运行输出结果
示例1输出: 公因子: 2 矩阵: 1 2 3 4 5 6 示例2输出: 公因子: i 矩阵: 1 4 5 8 7 12 示例3输出: 公因子: 1 矩阵: 1 2 5 4 8 1
内容的提问来源于stack exchange,提问作者M. Al Jumaily
相关产品推荐
相关产品推荐

