返回信息流附件(274.5KB)
原理很简单 但是确实看到了破解版MATLAB的不足之处。
这是一条镜像帖。来源:北邮人论坛 / math-model / #4299同步于 2009/6/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MathModel机器人发帖
Matlab 高斯消元法产生数据丢失
ltx1215
2009/6/5镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
这个和破解不破解的有关系吗?
先来看你的第一个实验:
epsilon = 1e-24;
U = [ epsilon, 1; 0, -1 / epsilon ];
L = [ 1, 0; 1 / epsilon, 1 ];
L * U
ans =
0.000000000000000 1.000000000000000
1.000000000000000 0
姑且不管MATLAB算的结果,自己手动算一算你现在的L * U,第二行第二列的元素一定也是零:( 1 / epsilon ) * 1 + 1 * ( - 1 / epsilon ) = 0
再来看第二个实验:
A = [ epsilon, 1; 1, 1 ];
[ L, U ] = lu( A )
L =
0.0000 1.0000
1.0000 0
U =
1 1
0 1
结果是不对,但是这并不是破解MATLAB造成的,而是lu这个函数的数值算法造成的,因为L应该是下三角矩阵,这样的结果显然是不正确的。
我手上没有非破解版的MATLAB,所以通过上面的两个实验是不能够得到结论“非破解版的MATLAB不会有上面的问题”。所以我又在Octave上试了一下第二个实验,结果是一样的。
综上,个人认为这不是破解不破解的问题。
【 在 ltx1215 的大作中提到: 】
:
: 原理很简单 但是确实看到了破解版MATLAB的不足之处。
恩 首先很欣赏你细致的分析。
其次关于第一点问题的解释 因为1/epusino为一个极大数 则1—1/epusino可以看成—1/epusino;注意这个本身是一个近似,所以造成了L*U!=A.
关于第二个问题,lu的迭代我想计算机实现应该不困难,但是如果不是抛弃了这个10的负24次方的数,它不可能会产生这个错误的结果。
比如直接把epusino看做0,那么结果就是:
A = [0 1; 1 1];
[L,U]=lu(A)
L =
0 1
1 0
U =
1 1
0 1
这是我的观点。
1) 你的这两个例子跟破不破解MATLAB都没有关系,不能用来支持你在MATLAB版关于破解版缺陷的证据。
2) 第一个问题说明对 1 - 1 / epsilon 的近似对LU是数值不稳定。
3) 第二个问题,MATLAB的计算结果没有问题,是我们理解有问题。令 A = [ 0, 1; 1, 1 ]; [ L, U ] = lu( A ); 得到的 L 和 U 都是上三角矩阵,但是根据 LU 分解的定义,L 应该是下三角矩阵。一般来说 MATLAB 是不会犯这种低级错误的,而且 L * U 也不等于 A。如果你 help lu 会发现 lu 的使用方法有很多,其中一种是
[L,U,P] = lu(A) returns an upper triangular matrix in U, a lower triangular matrix L with a unit diagonal, and a permutation matrix P, such that L*U = P*A.
这说明 A = B * U,其中 B = P ^ -1 * L。
如果我们执行 [ L, U, P ] = lu( A ),得到的 L 和 U 与之前执行 [ L, U ] = lu( A ) 的结果一致,P = [ 0, 1; 1, 0 ],也就是说 B = [ 1, 0; 0, 1 ],B 是一个下三角阵,所以对 A 的 LU 分解结果是 B * U。
4) 希腊字母 e 应该写作 epsilon 而不是 epusino
【 在 ltx1215 的大作中提到: 】
: 恩 首先很欣赏你细致的分析。
: 其次关于第一点问题的解释 因为1/epusino为一个极大数 则1—1/epusino可以看成—1/epusino;注意这个本身是一个近似,所以造成了L*U!=A.
: 关于第二个问题,lu的迭代我想计算机实现应该不困难,但是如果不是抛弃了这个10的负24次方的数,它不可能会产生这个错误的结果。
: ...................
强大啊
【 在 dazzlezhang (dazzlezhang) 的大作中提到: 】
: 1) 你的这两个例子跟破不破解MATLAB都没有关系,不能用来支持你在MATLAB版关于破解版缺陷的证据。
: 2) 第一个问题说明对 1 - 1 / epsilon 的近似对LU是数值不稳定。
: 3) 第二个问题,MATLAB的计算结果没有问题,是我们理解有问题。令 A = [ 0, 1; 1, 1 ]; [ L, U ] = lu( A ); 得到的 L 和 U 都是上三角矩阵,但是根据 LU 分解的定义,L 应该是下三角矩阵。一般来说 MATLAB 是不会犯这种低级错误的,而且 L * U 也不等于 A。如果你 help
: ...................
【 在 dazzlezhang 的大作中提到: 】
: 1) 你的这两个例子跟破不破解MATLAB都没有关系,不能用来支持你在MATLAB版关于破解版缺陷的证据。
: 2) 第一个问题说明对 1 - 1 / epsilon 的近似对LU是数值不稳定。
: 3) 第二个问题,MATLAB的计算结果没有问题,是我们理解有问题。令 A = [ 0, 1; 1, 1 ]; [ L, U ] = lu( A ); 得到的 L 和 U 都是上三角矩阵,但是根据 LU 分解的定义,L 应该是下三角矩阵。一般来说 MATLAB 是不会犯这种低级错误的,而且 L * U 也不等于 A。如果你 help lu 会发现 lu 的使用方法有很多,其中一种是
: ...................
恩
1>确实证据还不够充分。我会继续找的,毕竟正版的会比破解版的要细致很多。
2>你的这一句话我没听明白。
3>我看了一下原句是这样的psychologically lower triangular matrix" (i.e. a product of lower
triangular and permutation matrices) in L。
翻译过来是L是一个心理上的下三角矩阵,其实是下三角矩阵和置换矩阵也就是你最后的结论。 P*A = L*U.
4>这个确实失误了,呵呵。以后会小心点,谢谢指教!
第二句话的意思就是说对于矩阵分解后的矩阵(例如这里的L)里面的元素是不能够随便做近似的,虽然对于近似以后的矩阵(记作M)和近似前的矩阵L近似貌误差很小,即 ( L - M ) 的范数趋于 0,但是由于另外一个矩阵U的作用,可能会将这种近似误差放大到不可忽视的程度。
【 在 ltx1215 的大作中提到: 】
: 恩
: 1>确实证据还不够充分。我会继续找的,毕竟正版的会比破解版的要细致很多。
: 2>你的这一句话我没听明白。
: ...................