Как мне использовать Solve [] для переменного числа уравнений? - PullRequest
2 голосов
/ 23 декабря 2011

Мне нужно решить большую систему линейных уравнений. Проблема заключается в том, что в зависимости от пользовательского ввода число уравнений будет различным.

В качестве конкретного примера, скажем, у меня есть два уравнения с двумя неизвестными. Я могу написать

Solve[{x+y==1&&2x+2y==3},{x,y}]

Есть ли способ, которым я могу обобщить вышеупомянутое решение для любого числа уравнений и переменных без необходимости явно вводить все? Мои уравнения и переменные хранятся в массивах.

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

Синтаксис будет зависеть от формы, в которой вы их храните. Если, например, у вас есть

eqns = {x - y == 1, 2 x + 2 y == 3, 5*x - 3*y - z == 2}
vars = {x, y, z}

тогда вы можете сделать

Solve[eqns, vars]
(*
{{x -> 5/4, y -> 1/4, z -> 7/2}}
*)

(спасибо Mr.Wizard за напоминание о правильном синтаксисе)

2 голосов
/ 23 декабря 2011

Помимо того, что написал Acl, вы можете использовать LinearSolve:

Я заимствую данные Acl

Remove["Global`*"];
eqns = {x - y == 1, 2 x + 2 y == 3, 5*x - 3*y - z == 2}
vars = {x, y, z}

A = CoefficientArrays[eqns, vars];
sol = LinearSolve[A[[2]], -A[[1]]]

, что дает

{5/4, 1/4, 7/2}

In[135]:= Thread[vars->sol]
Out[135]= {x->5/4,y->1/4,z->7/2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...