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的值,即需要开放的检票窗口数

修改说明:

  1. 将原来的 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”错误,可以通过修改代码将非方阵转换为方阵,或者使用其他函数计算行列式。

MATLAB 错误:'Matrix must be square' - sym/det 函数修正

原文地址: https://www.cveoy.top/t/topic/oHbt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录