24小时热门版块排行榜    

查看: 560  |  回复: 5

jackzhang19

银虫 (小有名气)

[求助] 关于matlab求教

Sample Text
我是一个新手正在学习matlaB,今天遇到一个问题,当时是这么写的a=rand(4);
[l,u]=lu(a); b=l*u; 按说b应该等于a啊,可是我写isequal(a,b),结果却返回的是零。

[ Last edited by jackzhang19 on 2012-2-13 at 13:49 ]
回复此楼
路漫漫其修远兮吾将上下而求索
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖置顶 ( 共有1个 )

715211229

木虫 (正式写手)

jackzhang19: 回帖置顶 2012-02-14 23:30:10
引用回帖:
3楼: Originally posted by zl030091126 at 2012-02-14 00:00:16:
出现这样的结果,可能是b=l*u这里,b就不等于a了。因为matlab里面运算的是按照双精度计算的,但默认显示出的是单精度的,值看上去是一样,但结果b确实不等于a.
这里第一个isequal(a,b)是你在显示出的b的值下,b= ...

>> a=rand(4)
[l,u]=lu(a); b=l*u
isequal(a,b)

a =
    0.4218    0.6557    0.6787    0.6555
    0.9157    0.0357    0.7577    0.1712
    0.7922    0.8491    0.7431    0.7060
    0.9595    0.9340    0.3922    0.0318

b =
    0.4218    0.6557    0.6787    0.6555
    0.9157    0.0357    0.7577    0.1712
    0.7922    0.8491    0.7431    0.7060
    0.9595    0.9340    0.3922    0.0318

ans =

     1

>> a=rand(4)
[l,u]=lu(a); b=l*u
isequal(a,b)

a =
    0.2769    0.6948    0.4387    0.1869
    0.0462    0.3171    0.3816    0.4898
    0.0971    0.9502    0.7655    0.4456
    0.8235    0.0344    0.7952    0.6463

b =
    0.2769    0.6948    0.4387    0.1869
    0.0462    0.3171    0.3816    0.4898
    0.0971    0.9502    0.7655    0.4456
    0.8235    0.0344    0.7952    0.6463

ans =
     0

这次一样了,一个1一个0,多次计算下来,0的概率比较大。数据显示格式为long,a,b值一样。觉得应该不是加不加;的问题。

» 本帖已获得的红花(最新10朵)

我是蜗牛
4楼2012-02-14 15:05:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

715211229

木虫 (正式写手)

>> a=rand(4)
[l,u]=lu(a); b=l*u
a =
    0.4218    0.6557    0.6787    0.6555
    0.9157    0.0357    0.7577    0.1712
    0.7922    0.8491    0.7431    0.7060
    0.9595    0.9340    0.3922    0.0318
b =
    0.4218    0.6557    0.6787    0.6555
    0.9157    0.0357    0.7577    0.1712
    0.7922    0.8491    0.7431    0.7060
    0.9595    0.9340    0.3922    0.0318
>> isequal(a,b)
ans =
     1
----------------------------------------

>> a=rand(4)
[l,u]=lu(a); b=l*u
isequal(a,b)

a =

    0.2769    0.6948    0.4387    0.1869
    0.0462    0.3171    0.3816    0.4898
    0.0971    0.9502    0.7655    0.4456
    0.8235    0.0344    0.7952    0.6463


b =

    0.2769    0.6948    0.4387    0.1869
    0.0462    0.3171    0.3816    0.4898
    0.0971    0.9502    0.7655    0.4456
    0.8235    0.0344    0.7952    0.6463

ans =0

不懂……
我是蜗牛
2楼2012-02-13 13:50:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zl030091126

金虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
dbb627(金币+1): 感谢应助 2012-02-16 09:26:03
出现这样的结果,可能是b=l*u这里,b就不等于a了。因为matlab里面运算的是按照双精度计算的,但默认显示出的是单精度的,值看上去是一样,但结果b确实不等于a.
这里第一个isequal(a,b)是你在显示出的b的值下,b=a成立;
第二个,b的值是双精度的,a不等于b了,所以是0了。
A--B,虚线变成实线则是你的轨迹
3楼2012-02-14 00:00:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zl030091126

金虫 (正式写手)

不知道了,这难道还有概率?
A--B,虚线变成实线则是你的轨迹
5楼2012-02-16 23:44:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jackzhang19

银虫 (小有名气)

送鲜花一朵
引用回帖:
: Originally posted by 715211229 at 2012-02-14 15:05:26:
>> a=rand(4)
[l,u]=lu(a); b=l*u
isequal(a,b)

a =
    0.4218    0.6557    0.6787    0.6555
    0.9157    0.0357    0.7577    0.1712
    0.7922    0.8491    0.7431    0.7060
    0.959 ...

给你送个鲜花,不知道怎么加分
路漫漫其修远兮吾将上下而求索
6楼2012-02-17 17:05:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 jackzhang19 的主题更新
信息提示
请填处理意见