如何在Matlab中声明含子矩阵的RHS矩阵以求解线性方程组
在MATLAB中存储子矩阵并求解多个线性方程组
嘿,我明白你遇到的问题了——在MATLAB里直接用方括号拼接多个矩阵会把它们扁平化(flatten)成一个单一矩阵,而不是保留每个子矩阵的独立性。要实现你想要的“矩阵的矩阵”,你需要用细胞数组(Cell Array),这是MATLAB专门用来存储不同大小或类型元素的容器。
步骤1:用细胞数组存储子矩阵
你之前的写法[[1, 3; -1, 2]; [0, 4; 1, -1]; [2, 1; -1, 1]]会触发MATLAB的矩阵拼接逻辑,把所有元素合并成一个6×2的大矩阵。正确的做法是用大括号{}来包裹每个子矩阵,将它们作为独立元素存入细胞数组:
syms X Y Z MatrizCoeficientes = [-1, 1, 2; -1, 2, 3; 1, 4, 2]; MatrizVariables = [X; Y; Z]; % 用细胞数组存储3个独立的2×2子矩阵 MatrizResultados = {[1, 3; -1, 2], [0, 4; 1, -1], [2, 1; -1, 1]};
- 你可以通过
MatrizResultados{1}访问第一个子矩阵,MatrizResultados{2}访问第二个,以此类推; - 如果希望子矩阵垂直排列(3行1列的细胞数组),可以写成:
MatrizResultados = {[1, 3; -1, 2]; [0, 4; 1, -1]; [2, 1; -1, 1]};
步骤2:遍历细胞数组求解每个线性方程组
现在你可以循环遍历MatrizResultados中的每个子矩阵,逐个求解MatrizCoeficientes * MatrizVariables = 子矩阵这个方程组。这里提供两种解法:符号解法和数值解法(如果系数矩阵可逆):
符号解法(保留符号变量形式)
% 创建细胞数组存储每个方程组的解 Soluciones = cell(size(MatrizResultados)); for i = 1:length(MatrizResultados) % 求解当前子矩阵对应的方程组 sol = solve(MatrizCoeficientes*MatrizVariables == MatrizResultados{i}, [X,Y,Z]); % 将解整理为列向量形式存入细胞数组 Soluciones{i} = [sol.X; sol.Y; sol.Z]; end % 查看第一个方程组的解 disp('第一个方程组的符号解:'); disp(Soluciones{1});
数值解法(如果系数矩阵可逆,更快)
Soluciones = cell(size(MatrizResultados)); for i = 1:length(MatrizResultados) % 直接用linsolve求解线性方程组 Soluciones{i} = linsolve(MatrizCoeficientes, MatrizResultados{i}); end % 查看第二个方程组的数值解 disp('第二个方程组的数值解:'); disp(Soluciones{2});
关键注意点
- 细胞数组的访问:
MatrizResultados(i)返回的是一个细胞对象(容器),而MatrizResultados{i}才会返回里面存储的矩阵内容,这是新手容易混淆的地方; - 如果你的子矩阵大小统一,也可以考虑用三维数组存储,但细胞数组的灵活性更高,支持不同大小的子矩阵。
内容的提问来源于stack exchange,提问作者JuMoGar
相关产品推荐
相关产品推荐

