1

我的脚本使用几个“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'.

当我尝试使用linsolve或者solve我得到意想不到的结果和我的矩阵的逆接近奇异的消息时。

但是,当我制作另一个脚本并手动输入相同的矩阵和向量时,一切正常,我不知道出了什么问题。

这是否与 MATLAB 存储循环函数创建的矩阵的方式有关,并且我需要在循环之后将矩阵的状态更改为某种东西?

此外,当我用手放置矩阵时,它会在没有1.0e+006乘数的情况下显示它:

K11 =

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

能有关系吗??

提前致谢。

4

2 回答 2

3

试试反斜杠运算符:

U = K\F

请参阅此参考

于 2013-04-23T16:21:21.113 回答
2

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

要确定是哪种情况,您可以使用rref来获取矩阵的“行减少梯队形式”。执行以下操作:

 KF = [K,F]
 rref(KF)

如果最后一行完全归零,那么您的约束不足并且可以从您的简化矩阵中提取解决方案集(但不是唯一解决方案)。

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

于 2013-04-23T17:42:26.197 回答