【问题标题】:solving linear equations using matrices in MATLAB在 MATLAB 中使用矩阵求解线性方程
【发布时间】:2013-04-23 16:12:32
【问题描述】:

我的脚本使用多个“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' 向量是一组变量,我需要为'U' 中包含的变量求解'K*U=F'

当我尝试使用 linsolvesolve 执行此操作时,我得到了意想不到的结果和一条消息,表明我的矩阵的逆矩阵接近单数。

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

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

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

K11 =

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

这有关系吗??

提前致谢。

【问题讨论】:

  • 尝试以'format long'模式打印循环生成的矩阵。看来您的“手动”矩阵是四舍五入的,而实矩阵接近奇异。
  • 正如丹尼尔所说,当四舍五入到 4dp 时,您的矩阵是非奇异的,但缩放比例有些差,条件数约为 5E5。在四舍五入之前它可能实际上是单数的。我们需要查看在您的“循环”中生成的实际矩阵到更多的小数点以确认这一点。输入指令format long(回车),然后显示矩阵。
  • K11 = 1.0e+006 * [1.240863111684165 0.625000000000000 0.815316663596734 0.125000000000000; 0.625000000000000 3.659106956468349 -0.125000000000000 3.537522257014797; 0.815316663596734 -0.125000000000000 1.240863111684165 -0.625000000000000; 0.125000000000000 3.537522257014797 -0.625000000000000 3.659106956468349]
  • 不要认为四舍五入会改变很多情况
  • rcond(K)=1.6699e-006 - 对于舍入矩阵,rcond(K)=2.6514e-017 - 对于初始矩阵,您认为这是导致问题的原因吗?

标签: matlab variables for-loop matrix


【解决方案1】:

试试反斜杠操作符:

U = K\F

this reference

【讨论】:

  • 这里的主要问题是,如果我使用循环函数创建一个矩阵,而不是手动放入相同的矩阵,为什么 MATLAB 会给我不同的值
【解决方案2】:

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

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

 KF = [K,F]
 rref(KF)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多