2015-02-06 2 views
0

У меня есть система из 12 линейных уравнений с 13 неизвестными. Я хотел бы решить эту систему с помощью Matlab и выбрать переменную, которая параметризует решение.Matlab: Как решить систему уравнений и выбрать параметризацию решения

Я следую примеру, показывающему, как использовать linsolve, который, казалось бы, был тем, что я ищу. В частности, я ожидал, что решение будет параметризоваться неизвестным «i». Тем не менее, этот призыв к linsolve:

>> syms a b c d e f g h i w1 w2 w3 w4 

>> linsolve([i = w1, f = w1, c = -4*w1, g+i = w2, d+f = -0.5*w2, a+c = -1.5*w2, h+i = w3, e+f = -0.5*w3, b+c = 0.5*w3, g+h+i = w4, d+e+f = w4, a+b+c = 0], [a, b, c, d, e, f, g, h, w1, w2, w3, w4, i]) 

возвращается сообщение об ошибке:

Error: The expression to the left of the equals sign is not a valid target for an assignment. 

, где "знак равенства", указанного для окончательного уравнения: "а + Ь + с = 0".

Я полный новичок в Matlab. Я просто надеялся не решать эту систему вручную. Совет ценится.

+0

Просто проверьте, есть ли у вас символический набор инструментов? – paisanco

+0

@paisanco: Запуск 'ver' в командной строке дает:' Symbolic Math Toolbox Version 6.0 (R2014a) '. Так да? – Schemer

ответ

3

Ошибка выражения "слева от знака равенства" не является допустимой мишенью для назначения ", так как = зарезервирован для назначения и can't be overloaded; поэтому в символических уравнениях используется оператор равенства ==, чтобы выразить левую и правую стороны. Таким образом, все = должно быть ==.

linsolve решает уравнение A*X = B для X данного коэффициента матрицы A и правая B. Поскольку ваша проблема линейна, вы можете это сделать, но матрица коэффициентов может быть большой из-за количества неизвестных.

Альтернативой является использование функции solve, которая решает список уравнений для заданных неизвестных:

eqns = {i == w1, f == w1, c == -4*w1, g+i == w2, d+f == -0.5*w2,... 
     a+c == -1.5*w2, h+i == w3, e+f == -0.5*w3, b+c == 0.5*w3,... 
     g+h+i == w4, d+e+f == w4, a+b+c == 0}; 
vars = {a b c d e f g h w1 w2 w3 w4}; 
sol = solve(eqns{:},vars{:}); 

sol является структура которого имена полей совпадают с неизвестными и чьи записи содержат решение этой неизвестности:

>> sol.a 
ans = 
i 

>> sol.b 
ans = 
3*i 

Вы заметите, что я удалил i из списка переменных, так как он является параметром, а не то, чтобы быть решена.

+0

Большое спасибо. Это спасло меня так много времени. Очень признателен. – Schemer

Смежные вопросы