【发布时间】: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'。
当我尝试使用 linsolve 或 solve 执行此操作时,我得到了意想不到的结果和一条消息,表明我的矩阵的逆矩阵接近单数。
但是,当我制作另一个脚本并手动输入相同的矩阵和向量时,一切正常,我不知道出了什么问题。
这是否与 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