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