2016-05-31 8 views
0

Я пытаюсь найти неизвестные из нескольких уравнений, но есть больше неизвестных, чем число уравнений. Код что-то вроде этого:Решение уравнений с более неизвестными, чем уравнения

syms x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 

eqn1 = 0.04*x1 + 0.04*x2 + 0.2*x3 + 0.2*x4 + 2*x5 + 0.2*x6 + 0.2*x7 + 0.04*x8 + 0.04*x9 == 111; 
eqn2 = 0.04*x2 + 0.04*x3 + 0.2*x4 + 0.2*x5 + 2*x6 + 0.2*x7 + 0.2*x8 + 0.04*x9 + 0.04*x10 == 73; 
eqn3 = 0.04*x3 + 0.04*x4 + 0.2*x5 + 0.2*x6 + 2*x7 + 0.2*x8 + 0.2*x9 + 0.04*x10 + 0.04*x11 == 40; 
eqn4 = 0.04*x4 + 0.04*x5 + 0.2*x6 + 0.2*x7 + 2*x8 + 0.2*x9 + 0.2*x10 + 0.04*x11 + 0.04*x12 == 14; 
eqn5 = 0.04*x5 + 0.04*x6 + 0.2*x7 + 0.2*x8 + 2*x9 + 0.2*x10 + 0.2*x11 + 0.04*x12 + 0.04*x13 == 0; 
eqn6 = 0.04*x6 + 0.04*x7 + 0.2*x8 + 0.2*x9 + 2*x10 + 0.2*11 + 0.2*x12 + 0.04*x13 + 0.04*x14 == 191; 
eqn7 = 0.04*x7 + 0.04*x8 + 0.2*x9 + 0.2*x10 + 2*x11 + 0.2*x12 + 0.2*x13 + 0.04*x14 + 0.04*x15 == 153; 
eqn8 = 0.04*x8 + 0.04*x9 + 0.2*x10 + 0.2*x11 + 2*x12 + 0.2*x13 + 0.2*x14 + 0.04*x15 + 0.04*x16 == 362; 
eqn9 = 0.04*x9 + 0.04*x10 + 0.2*x11 + 0.2*x12 + 2*x13 + 0.2*x14 + 0.2*x15 + 0.04*x16 + 0.04*x17 == 471; 

[A,B] = equationsToMatrix([eqn1, eqn2, eqn3, eqn4, 5, eqn6, eqn7, eqn8, eqn9], [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17]) 

X = linsolve(A,B) 

Однако я получаю сообщение об ошибке:

Warning: The system is inconsistent. Solution does not exist. 
In symengine (line 57) 
In sym/privBinaryOp (line 903) 
In sym/linsolve (line 63) 
In solveLinEqn (line 15) 
X = 

Inf 
Inf 
. 
. 
. 
Inf 

Означает ли это, что существует бесконечное число решений с неизвестными? И есть ли какой-нибудь другой способ, чтобы помочь решить эту проблему? Благодаря!

+0

Это должно быть в http://math.stackexchange.com/ – eventHandler

+0

Что вы на самом деле пытаетесь сделать? Похоже, вы хотите сделать что-то подходящее, но тогда у вас есть лучшие варианты. – Bernhard

ответ

3

Любая система с более неизвестными, чем уравнения, создает недоопределенную систему с свободными переменными (# unknowns - #).

В качестве уравнения примера 1 и 2 неизвестных означает, что есть одна свободная переменная

у = 5х - 2

1

Если вы загляните в A матрице прямо перед вами называем linSolve(A,B) вы заметите, что это имеет ряд нулей:

[ 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0, 0, 0, 0, 0, 0, 0] 
[ 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0, 0, 0, 0, 0, 0] 
[ 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0, 0, 0, 0, 0] 
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[ 0, 0, 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 0, 1/5, 1/25, 1/25, 0, 0, 0] 
[ 0, 0, 0, 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0, 0] 
[ 0, 0, 0, 0, 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0] 
[ 0, 0, 0, 0, 0, 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25] 

Так что это значит?
Прежде чем мы углубимся в недоопределенные системы, перейдем к тому, что влечет за собой решение набора линейных уравнений. Для точного решения линейной системы Ax = b требуется матрица A, которая будет квадратной, т. Е. Такое же количество строк и столбцов и обратимо. Для решения такой системы требуется x = A-1 * b, что может скомпрометировать любое числовое программное обеспечение.

Учитывая вашу систему недоопределенного то есть больше неизвестных, что уравнения производит матрицу, где число столбцов в A является больше, чем число строк, таким образом, мы можем аппроксимировать только решение такой системы. Недоопределенная система имеет бесконечное число решений, так пусть x' быть решением системы Ax' = b теперь следует, что x' = ATw для некоторого вектора w. Затем мы можем выразить решение системы как

AATw = b => w = (AAT)-1b x' = ATw 
AAT известно как матрица Грамма, и, как видно выше, оно должно быть обратимым для того, чтобы система имела решение. Так как ваша A матрица имеет ряд нулей следует, что матрица Грамма AAT также будет иметь ряд нулей и, следовательно, это единственное число (не обратима):

[ 2604/625, 562/625, 109/125, 32/125, 0, 4/125, 11/625, 2/625, 1/625] 
[ 562/625, 2604/625, 562/625, 109/125, 0, 27/125, 4/125, 11/625, 2/625] 
[ 109/125, 562/625, 2604/625, 562/625, 0, 31/125, 27/125, 4/125, 11/625] 
[ 32/125, 109/125, 562/625, 2604/625, 0, 108/125, 32/125, 27/125, 4/125] 
[  0,  0,  0,  0, 0,  0,  0,  0,  0] 
[ 4/125, 27/125, 31/125, 108/125, 0, 2579/625, 312/625, 104/125, 27/125] 
[ 11/625, 4/125, 27/125, 32/125, 0, 312/625, 2604/625, 562/625, 109/125] 
[ 2/625, 11/625, 4/125, 27/125, 0, 104/125, 562/625, 2604/625, 562/625] 
[ 1/625, 2/625, 11/625, 4/125, 0, 27/125, 109/125, 562/625, 2604/625] 

TL; DR; Ваша матрица Gramm не обратима, поэтому система не имеет решения (aka как непоследовательная система), и именно поэтому вы получаете непоследовательное системное сообщение об ошибке.
Ссылки:
http://www.math.usm.edu/lambers/mat419/