большое количество линейных уравнений в MATLAB - PullRequest
0 голосов
/ 20 января 2020

Я хочу использовать solve() для решения большой системы линейных уравнений. Функция solve() нуждается в уравнениях и переменных. Я использую al oop для генерации уравнений, а мои переменные содержатся в большом массиве. Это простой код того, что я пытаюсь сделать:

x = sym('x',[1 3])
eqn = sym('eqn', [1,3])
eqn1 = 2*x1 + x2 + x3 - 2 == 0
eqn2 = 2*x2 -x2 -x1- x3 == 3
eqn3 = 2*x2+ x1 + 3*x3 == -10
Y = solve(eqn, x)

MATLAB не распознает мою переменную x1. Я решил ту же систему, используя следующий код:

syms x1 x2 x3
eqn1 = 2*x1 + x2 + x3 == 2
eqn2 =   2*x2 -x2 -x1 - x3 == 3
eqn3 = 2*x2+ x1 + 3*x3 == -10
X = solve([eqn1, eqn2, eqn3, eqn4], [x1 x2 x3])
structfun(@subs,X)

Но это бесполезно для очень большого числа уравнений. Что я делаю не так?

1 Ответ

1 голос
/ 20 января 2020

Для этого вам не нужны символы c (syms). Это стандартная линейная система уравнений, которая может быть представлена ​​в виде: Ax = b, где A = [2 1 1; -1 1 -1; 1 2 3], x = [x1; x2; x3] и b = [0; 3; -10]

Чтобы решить для x, вы должны сначала определить

A = [2 1 1; -1 1 -1; 1 2 3]

и

b = [0; 3; -10]

и затем решите, используя

x = A\b

PS. Есть некоторые странные вещи в вашем вопросе, например. в уравнении 2 eqn2 = 2*x2 -x2 -x1- x3 == 3 я предполагаю, что вы не указали упрощение до -x1 +x2 -x3 ==3.

PS2. Это довольно стандартный Matlab, вы можете найти много информации по стандартной mldivide page в документации вместе со многими похожими вопросами здесь на SO.

...