You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:47:34