当前位置: 首页 > 仿真模拟 >【求助】matlab里两个相等的数相减为什么不等于0呢

【求助】matlab里两个相等的数相减为什么不等于0呢

作者 guoguoxia
来源: 小木虫 750 15 举报帖子
+关注

自己编了一个小程序,调试时一个本应该为零的结果总是不等于零。认真检查中间的过程,没有发现错误。最后把每一个数拆开发现,运算中两个表达式计算出来的结果完全相等,但是它俩的差值却不等于零。请问这是什么原因造成的。这两个数都是通过矩阵中的元素运算得出来的。另:我将俩数相除,结果等于1。
MATLAB接触不多,还请各位帮忙解答一下,谢谢! 返回小木虫查看更多

今日热帖
  • 精华评论
  • nono2009

    Could you please post your code here?

  • sitonyl

    计算精度问题。

  • guoguoxia

    程序比较长,数据也很多,截其中一部分吧,具体数据就不写出来了
    就是很简单的矩阵运算,求解一个四元方程,得到的解回带回去就不等于0.

         b(1,1)=-U1(1,5);                                                         
         b(2,1)=-U12(1,5);                                                        
         b(3,1)=-U123(1,5);                                                      
         b(4,1)=-U123(3,5);                                                      
                                                                                  
                                                                                  
         A(1,1)=U1(1,2);                                                         
         A(2,1)=U12(1,2);                                                         
         A(3,1)=U123(1,2);                                                        
         A(4,1)=U123(3,2);                                                        
                                                                                  
         A(1,2)=U1(1,4);                                                         
         A(2,2)=U12(1,4);                                                         
         A(3,2)=U123(1,4);                                                        
         A(4,2)=U123(3,4);                                                        
                                                                                  
         A(2,3)=U2(1,4);                                                         
         A(3,3)=U3(1,1)*U2(1,4)+U3(1,2)*U2(2,4)+U3(1,3)*U2(3,4)+U3(1,4)*U2(4,4);  
         A(4,3)=U3(3,1)*U2(1,4)+U3(3,2)*U2(2,4)+U3(3,3)*U2(3,4)+U3(3,4)*U2(4,4);  
                                                                                  
         A(3,4)=U3(1,4);                                                         
         A(4,4)=U3(3,4);                                                         

         X1=A\b;   

         XL(1,1)=A(3,1)*X1(1,1)+A(3,2)*X1(2,1)+A(3,3)*X1(3,1)+A(3,4)*X1(4,1)-b(3,1)

    涉及到的就是这一小部分,都是很简单的运算。
    XL(1,1)应该等于0,但结果却不是。
    单独计算了A(3,1)*X1(1,1)+A(3,2)*X1(2,1)+A(3,3)*X1(3,1)+A(3,4)*X1(4,1)和b(3,1),两者结果相等,但是相减后就不等于0了。

    情况就是这样的,非常简单的情况,但是却一直得不到正确结果。谢谢解答,

  • guoguoxia

    应该不单纯是精度问题,因为实应为0的差值,却是一个和原数差不多数量级的很大的数

  • nono2009

    MATLAB如何定义变量类型的我不是很清楚。如果在FORTRAN里遇到类似的问题,则很可能上是在不同的程序段(如子程序和主程序之间)对应变量的类型定义不同所致。

  • aaron1988

    eps问题...(help eps能查到)
    因为matlab用的是floating point.....默认的是eps=2.26e-16
    也就是说实际上的1跟电脑储存的1的差距
    你可以试下1+eps-1等于什么...................................(2.26e-16)
    但是2+eps-2等于..................................................(0)
    因为对2来说他的eps是eps(2)=2*eps>eps...
    当我们计算a+b要是b是小于a的eps的话...我们可以做a+b=a来看(b=0)
    就好象我们平时做计算的时候,要是a>>b的话...那么a+b约等于a

  • snipher950

    确实就是精度问题。

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓