MATLAB 错误:'Matrix must be square' - sym/det 函数修正
MATLAB 错误:'Matrix must be square' - sym/det 函数修正
在使用 MATLAB 的 sym/det 函数计算矩阵行列式时,可能会遇到“Matrix must be square”错误,提示矩阵必须是方阵。本文将分析该错误产生的原因,并提供修正代码。
错误代码:
clc;clear all;
syms x y z n
eq1 = x + n*y - n*z*(30/60) == 0; % 一个检票窗口情况下的方程
eq2 = x + 2*n*y - 2*n*z*(10/60) == 0; % 两个检票窗口情况下的方程
eq3 = x + n*y - 4*n*z == 0; % 4分钟内所有旅客检票完毕的方程
det_eq = det([coeffs(eq1, [x y z]), coeffs(eq2, [x y z]), coeffs(eq3, [x y z])]); % 方程组系数行列式
solve(det_eq == 0, n) % 求解方程组系数行列式为0的n的值,即需要开放的检票窗口数
错误原因:
代码中,det_eq 函数试图计算一个非方阵的行列式,导致了“Matrix must be square”错误。
修正代码:
clc;clear all;
syms x y z n
eq1 = x + n*y - n*z*(30/60) == 0; % 一个检票窗口情况下的方程
eq2 = x + 2*n*y - 2*n*z*(10/60) == 0; % 两个检票窗口情况下的方程
eq3 = x + n*y - 4*n*z == 0; % 4分钟内所有旅客检票完毕的方程
det_eq = det([coeffs(eq1, [x y z]); coeffs(eq2, [x y z]); coeffs(eq3, [x y z])]); % 方程组系数行列式
solve(det_eq == 0, n) % 求解方程组系数行列式为0的n的值,即需要开放的检票窗口数
修改说明:
- 将原来的
det函数改为det_eq函数,同时将矩阵的行列式改为列向量的行列式。
通过将 [coeffs(eq1, [x y z]), coeffs(eq2, [x y z]), coeffs(eq3, [x y z])] 改为 [coeffs(eq1, [x y z]); coeffs(eq2, [x y z]); coeffs(eq3, [x y z])], 我们获得了列向量而不是行向量,从而计算行列式。
总结:
在使用 sym/det 函数计算矩阵行列式时,需要确保矩阵是方阵。如果遇到“Matrix must be square”错误,可以通过修改代码将非方阵转换为方阵,或者使用其他函数计算行列式。
原文地址: https://www.cveoy.top/t/topic/oHbt 著作权归作者所有。请勿转载和采集!