我在 R studio 桌面(M1 pro MacBook Pro)上从课堂上运行这个简单的代码,答案与我在 R studio 云上得到的答案不同。在 MacBook 上,我得到 239.3093,而在云端得到 237.7821。我错过了什么吗?
A = matrix(NA,nrow = 50,ncol = 50)
for (i in 1:50) {
for (j in 1:50) {
A[i,j] = sin(i) + cos(j)
}
}
pivot.above = function(A, r, c) {
A[r, ] = A[r, ]/A[r,c]
for (i in (r-1):1) {
A[i, ] = A[i, ]-A[i,c]*A[r, ]
}
A
}
for (i in 0:48) {
j = 50-i
A = pivot.above(A,j,j)
}
A[1, ] = A[1, ]/A[1,1]
print(sum(A))
Run Code Online (Sandbox Code Playgroud)
这个矩阵有一个非常大的条件数。来自维基百科:
\n\n\n如果条件数非常大,则称该矩阵是病态的。实际上,这样的矩阵几乎是奇异的,其逆矩阵的计算或线性方程组的解很容易出现较大的数值误差。
\n
kappa(A)\n[1] 1.352794e+19\nRun Code Online (Sandbox Code Playgroud)\n这意味着微小的数值差异,例如编译器、系统线性代数库、操作系统、芯片等之间的差异,将导致结果 \xe2\x80\x94 中不可忽略的差异,正如您发现的那样。
\n正如 @DaveArmstrong 评论的那样,OP 在这里所做的并不完全是维基百科文章中提到的操作(线性系统的逆或解);我们通过高斯消元法将矩阵简化为下三角形式。然而,它们密切相关(一旦我们将矩阵简化为三角形形式,我们就完成了求解线性系统的大部分工作,因为我们现在可以使用简单的反向替换)。我暂时不知道为什么简化矩阵第一列的总和应该是一个特别敏感的量,但条件数与这种敏感度相关并不奇怪。在这些笔记中,Luke Tierney(R 核心成员……)描述了为什么简单的高斯消除法不稳定,以及为什么更复杂的部分枢轴方法更稳定。
\n这是一个完全合理的问题,但也是您在进行数值计算时必须了解/习惯的问题。向你的导师询问实际上是一件很棒的事情。
\n| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |