在MATLAB中用矩阵求解线性方程组
我的脚本使用几个“for”循环创建一个矩阵和2个向量,作为示例,它们返回如下:在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
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——对于初始矩阵,你认为这就是问题的原因吗?