楼主: roller
1310 1

[程序分享] 难道又是SAS/IML的bug, 求高手解答 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

本科生

30%

还不是VIP/贵宾

-

威望
0
论坛币
80 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
293 点
帖子
29
精华
0
在线时间
139 小时
注册时间
2009-3-14
最后登录
2025-3-11

楼主
roller 发表于 2018-2-25 17:33:10 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
/*
难道又是SAS/IML的bug, 求高手解答

在做线性代数习题时,有一道例题,把矩阵a化简为阶梯形矩阵。
        a = {        6        2        2        2        4        ,
                        2        2        0        0        -4        ,
                        2        0        2        0        2        ,
                        2        0        0        2        6        } ;
书中答案是:
        x = {        1        0        0        1        3        ,
                        0        1        0        -1        -5        ,
                        0        0        1        -1        -2        ,
                        0        0        0        0        0        } ;
会线性代数的同学可手工化简一下,答案确实如上。

但问题是, 我在SAS/IML里用如下代码计算时, 给出的答案是
        x = {        1        0        0        1        0        ,
                        0        1        0        -1        0        ,
                        0        0        1        -1        0        ,
                        0        0        0        0        1        } ;
这明显不对嘛!而且每个矩阵只能化简成惟一的阶梯形矩阵,不可能有多个解的嘛!

我的代码应该也没错误。 我计算别的例题的矩阵时,用如下代码都能得出正确答案。
各位可在自己的SAS里跑一跑, 看是不是这个情况 ?!

难道是我对echelon()这个函数理解有误?!
百思不得其解中!

求高手赐教 。

*/



proc iml ;
        a = {        6        2        2        2        4        ,
                        2        2        0        0        -4        ,
                        2        0        2        0        2        ,
                        2        0        0        2        6        } ;
        print a ;

        x = echelon(a) ;  /* 将矩阵a化简为阶梯形. */
        print x ;
quit ;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


寻找混沌中的规律

沙发
roller 发表于 2018-2-25 21:56:28

/*
为查找原因,忙乎了一下午。
首先怀疑是矩阵a有问题。 因为a这里行线性相关。 容易验证:a的第2行=第1行-第3行-第4行 。
但这不应该是导致问题的原因呀! 这无论如何说不通啊。

然后看echelon函数的自带帮助文件,也没有特别的说明。

继续忙碌中...
嘿! 又有新的发现。
把上述矩阵a,各行都扩大10倍, 根据线性代数的知识,化简所得阶梯型矩阵应当是不变的。
运行同样的代码,瞧瞧,  这时得出的结果就是正确的了。
有趣吧。

后面还实验了一下,你把任意一行扩大10倍, 都能得出正确的结果。

唉!想不通这里面的缘故。
或许和sas里数字的存储方式和算法有关?

总之,可以确认SAS/IML这里必定存在问题 。

补充一句, 我用的是sas9.1.3 。谁有后面的新版本, 可以实验一下, 看有没有同样的问题。  在另一台9.3也这样。

*/

proc iml ;
        a = {        60        20        20        20         40        ,
                        20        20        0        0         -40 ,
                        20        0        20        0         20        ,
                        20        0        0        20         60        } ;
        print a ;

        x = echelon(a) ;  /* 将矩阵a化简为阶梯形. */
        print x ;


quit ;

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-17 16:01