matlab涉及小数运算精度问题
delta_w=0.05*piN3=11*pi/delta_wk3=0:N3-1请大家在MATLAB中运行这个,结果我在命令窗口中查看,很显然size运算错了,从0到21...
delta_w=0.05*pi
N3=11*pi/delta_w
k3=0:N3-1
请大家在MATLAB中运行这个,结果我在命令窗口中查看,很显然size运算错了,从0到219是220个数呀,因为我有程序需要用到这三句,结果由于这个错误,导致我矩阵长度不匹配,求大家看看这是怎么回事 展开
N3=11*pi/delta_w
k3=0:N3-1
请大家在MATLAB中运行这个,结果我在命令窗口中查看,很显然size运算错了,从0到219是220个数呀,因为我有程序需要用到这三句,结果由于这个错误,导致我矩阵长度不匹配,求大家看看这是怎么回事 展开
1个回答
展开全部
matlab计算时默认的采用double类型的数据,所以绝大多数的数值都是存在误差的。
在比较两个数是否相等时,就判断这两个数的差是否在误差内,在内部就认为想等,在外部就认为不等。
你出现的这个问题正好是由于这个原因,
d1=220-N3
d1= 2.842170943040401e-014
而d2=eps(220)=2.842170943040401e-014
现在是一个更特殊的情况d1=d2,所以正好认为N3与220不是一个数,而是一个比220要小且大于219的数,所以会出现这种情况。
对你的程序,你可以根据程序逻辑用N3=ceil(11*pi/delta_w)或者N3=round(11*pi/delta_w)来代替你的语句
在比较两个数是否相等时,就判断这两个数的差是否在误差内,在内部就认为想等,在外部就认为不等。
你出现的这个问题正好是由于这个原因,
d1=220-N3
d1= 2.842170943040401e-014
而d2=eps(220)=2.842170943040401e-014
现在是一个更特殊的情况d1=d2,所以正好认为N3与220不是一个数,而是一个比220要小且大于219的数,所以会出现这种情况。
对你的程序,你可以根据程序逻辑用N3=ceil(11*pi/delta_w)或者N3=round(11*pi/delta_w)来代替你的语句
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询