在MATLAB上求解方程组,当变量矩阵中存在常数时?

Solving system of equations on MATLAB, when a constant exists in variable matrix?

变量向量的一个元素是常量时,如何在 MATLAB 上求解以下方程组?如果可能的话,请提供代码。

更一般地说,如果解决方案是使用符号数学,我将如何在求解之前生成大量变量,比如 12 个(而不是两个)?

例如,使用syms创建多个符号变量,然后生成如下方程组。

syms a1 a2

A = [matrix]
x = [1;a1;a2];
y = [1;0;0];

eqs = A*x == y

sol = solve(eqs,[a1, a2])

sol.a1
sol.a2

如果你有一个有很多变量的系统,你可以使用syms定义所有的符号,然后像上面那样解决它。

您还可以使用 fminsearch 执行参数优化。首先,您必须在单独的函数文件中定义成本函数,在本例中称为 cost_fcn.m.

function J = cost_fcn(p)

    % make sure p is a vector
    p = reshape(p, [length(p) 1]);

    % system of equations, can be linear or nonlinear
    A = magic(12); % your system, I took some arbitrary matrix
    sol = A*p;

    % the goal of the system of equations to reach, can be zero, or some other
    % vector
    goal = zeros(12,1);

    % calculate the error
    error = goal - sol;

    % Use a cost criterion, e.g. sum of squares
    J = sum(error.^2);

end

此成本函数将包含您的方程组和目标解。这可以是任何类型的系统。向量 p 将包含正在估计的参数,这些参数将从一些初始猜测开始进行优化。要进行优化,您必须创建一个脚本:

% initial guess, can be zeros, or some other starting point
p0 = zeros(12,1);

% do the parameter optimization
p = fminsearch(@cost_fcn, p0);

在这种情况下,p0 是您提供给 fminsearch 的初始猜测。然后这个初始猜测的值将递增,直到找到成本函数的最小值。参数优化完成后,p 将包含使您的方程组误差最小的参数。然而,如果问题没有精确解,这可能是局部最小值。

您的系统过度约束,这意味着您的方程式多于未知数,因此您无法求解。您可以做的是使用 mldivide 找到最小二乘解。首先重新排列方程式,使等号右侧有所有常数项,然后使用 mldivide:

>> A = [0.0297 -1.7796; 2.2749 0.0297; 0.0297 2.2749]
A =

   0.029700  -1.779600
   2.274900   0.029700
   0.029700   2.274900

>> b = [1-2.2749; -0.0297; 1.7796]
b =

  -1.274900
  -0.029700
   1.779600

>> A\b
ans =

  -0.022191
   0.757299