我的脚本使用几个'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
时,我会得到意想不到的结果,并发出一条消息,表明矩阵的逆矩阵接近于奇异。
但是,当我制作另一个脚本并输入相同的矩阵和矢量BY HANDS时,一切正常,我无法弄清楚出了什么问题。
这是否与MATLAB存储由循环函数创建的矩阵的方式有关,我需要在循环之后将矩阵的状态更改为某些内容?
另外,当我手工放置矩阵时,它会显示它而前面没有1.0e+006
乘数:
K11 =
1240900 625000 815300 125000
625000 3659100 -125000 3537500
815300 -125000 1240900 -625000
125000 3537500 -625000 3659100
可以相关吗?
提前致谢。
答案 0 :(得分:3)
答案 1 :(得分:2)
从前面的讨论可以清楚地看出,你的矩阵是单数的。这意味着您的方程不是线性独立的。当发生这种情况时,有两种可能性。您的系统可能不一致(过度约束),在这种情况下,没有解决方案存在。或者,它也可能意味着您的方程式受到约束,在这种情况下,存在无限的集解。
要确定它是哪种情况,您可以使用 rref 来获取矩阵的“row reduce echelon form”。这样做如下:
KF = [K,F]
rref(KF)
如果最后一行完全变为零,那么你的约束不足,可以从简化矩阵中提取解集(但不是唯一解)。
在这种情况下,我得到一行[0 0 0 0 1],这使得系统过度约束,因此没有任何解决方案。