2016-05-31 77 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

任何比等式多未知的系统都会产生一个带有(#未知 - #等式)自由变量的欠定系统。

作为示例1的算式和2个未知数意味着有1和自由变量

Y = 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的确切解决方案要求矩阵是正方形的,即相同数量的行和列,并且是可逆的。解决这样一个系统需要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矩阵是不可逆的,因此系统没有解决方案(又名作为一个不一致的系统),这就是为什么你得到不一致的系统错误信息。
参考文献:
http://www.math.usm.edu/lambers/mat419/