Решение системы уравнений на MATLAB, когда константа существует в переменной матрице? - PullRequest
0 голосов
/ 13 ноября 2018

Как мне решить следующую систему уравнений в MATLAB, когда один из элементов переменного вектора является константой ? Пожалуйста, дайте код, если это возможно.

В более общем смысле, если решение состоит в том, чтобы использовать символическую математику, как я буду генерировать большое количество переменных, скажем 12 (а не только две), даже до их решения?

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Ваша система чрезмерно ограничена, то есть у вас больше уравнений, чем неизвестных, поэтому вы не можете ее решить. Что вы можете сделать, это найти решение наименьших квадратов, используя 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
0 голосов
/ 13 ноября 2018

Например, создайте ряд символических переменных, используя 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 будет содержать параметры, которые приведут к наименьшей ошибке для вашей системы уравнений. Однако возможно, что это локальный минимум, если нет точного решения проблемы.

...