在MATLAB中使用矩阵求解线性方程组

时间:2013-04-23 16:12:32

标签: matlab variables for-loop matrix

我的脚本使用几个'for'循环创建一个矩阵和2个向量,作为示例,它们返回如下:

K =

  1.0e+006 *

    1.2409    0.6250    0.8153    0.1250
    0.6250    3.6591   -0.1250    3.5375
    0.8153   -0.1250    1.2409   -0.6250
    0.1250    3.5375   -0.6250    3.6591

F =

  1.0e+006 *

    0.1733
    1.3533
   -0.1066
    1.3371

U =

 u3
 v3
 u4
 v4

可以看出,'U'向量是一组变量,我需要为'K*U=F'中包含的变量求解'U'

当我尝试使用linsolvesolve时,我会得到意想不到的结果,并发出一条消息,表明矩阵的逆矩阵接近于奇异。

但是,当我制作另一个脚本并输入相同的矩阵和矢量BY HANDS时,一切正常,我无法弄清楚出了什么问题。

这是否与MATLAB存储由循环函数创建的矩阵的方式有关,我需要在循环之后将矩阵的状态更改为某些内容?

另外,当我手工放置矩阵时,它会显示它而前面没有1.0e+006乘数:

K11 =

     1240900      625000      815300      125000
      625000     3659100     -125000     3537500
      815300     -125000     1240900     -625000
      125000     3537500     -625000     3659100

可以相关吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

尝试使用反斜杠运算符:

U = K\F

请参阅this reference

答案 1 :(得分:2)

从前面的讨论可以清楚地看出,你的矩阵是单数的。这意味着您的方程不是线性独立的。当发生这种情况时,有两种可能性。您的系统可能不一致(过度约束),在这种情况下,没有解决方案存在。或者,它也可能意味着您的方程式受到约束,在这种情况下,存在无限的解。

要确定它是哪种情况,您可以使用 rref 来获取矩阵的“row reduce echelon form”。这样做如下:

 KF = [K,F]
 rref(KF)

如果最后一行完全变为零,那么你的约束不足,可以从简化矩阵中提取解集(但不是唯一解)。

在这种情况下,我得到一行[0 0 0 0 1],这使得系统过度约束,因此没有任何解决方案。