Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中用矩阵求解线性方程组_Matlab_Variables_For Loop_Matrix - Fatal编程技术网

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

在MATLAB中用矩阵求解线性方程组,matlab,variables,for-loop,matrix,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.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
 KF = [K,F]
 rref(KF)
可以看出,“U”向量是一组变量,我需要为“U”中包含的变量解“K*U=F”

当我尝试使用linsolve或solve进行此操作时,我得到了意想不到的结果和一条消息,即我的矩阵的逆矩阵接近奇异值

然而,当我制作另一个脚本并手动放入相同的矩阵和向量时,一切都很好,我无法找出哪里出了问题

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

此外,当我用手放置矩阵时,它会显示它,但前面没有1.0e+006乘法器:

K11 =

     1240900      625000      815300      125000
      625000     3659100     -125000     3537500
      815300     -125000     1240900     -625000
      125000     3537500     -625000     3659100
这有关系吗


提前感谢。

尝试反斜杠操作符:

U = K\F

请参阅。

尝试使用反斜杠运算符:

U = K\F

参见。

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

要确定是哪种情况,可以使用rref获得矩阵的行缩减梯队形式。按以下步骤执行此操作:

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
 KF = [K,F]
 rref(KF)
如果最后一行完全变为零,那么您的约束不足,可以从简化矩阵中提取解决方案集,但不能提取唯一的解决方案


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

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

要确定是哪种情况,可以使用rref获得矩阵的行缩减梯队形式。按以下步骤执行此操作:

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
 KF = [K,F]
 rref(KF)
如果最后一行完全变为零,那么您的约束不足,可以从简化矩阵中提取解决方案集,但不能提取唯一的解决方案


但在本例中,我得到一行[01],这使得系统受到过度约束,因此没有任何解决方案。

这里的主要问题是,如果我使用循环函数创建一个矩阵,与同一个矩阵相比,MATLAB会给我不同的值,但是用手输入。这里的主要问题是,如果我使用循环函数创建一个矩阵,与同一个矩阵相比,MATLAB会给我不同的值相同的矩阵,但手工输入。尝试以“格式长”模式打印循环生成的矩阵。看起来你的“手动”矩阵是四舍五入的,而实际矩阵几乎是单数。正如Danil所说,当四舍五入到4dp时,你的矩阵是非单数的,但比例有点差,条件数约为5E5。在四舍五入之前,它可能实际上是单数的。我们需要看到在循环中生成的实际矩阵的小数点数更高,以确认这一点。输入指令格式long Enter,然后显示矩阵。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]不要认为取整会改变muchrcondK=1.6699e-006的条件——对于取整矩阵,rcondK=2.6514e-017——对于初始矩阵,你认为这就是导致问题的原因吗?尝试以“格式长”模式打印循环生成的矩阵。看起来你的“手动”矩阵是取整的,而实际矩阵几乎是奇异的。正如Danil所说,你的矩阵是什么n四舍五入到4dp是非奇异的,但比例有点不好,条件数约为5E5。在四舍五入之前,它可能实际上是奇异的。我们需要查看循环中生成的实际矩阵,以更高的小数点数来确认这一点。输入指令格式long Enter,然后显示矩阵。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]不认为四舍五入会改变muchrcondK=1.6699e-006的条件——对于四舍五入矩阵,rcondK=2.6514e-017——对于初始矩阵,你认为这就是问题的原因吗?