相对误差与Matlab

相对误差与Matlab,matlab,Matlab,为了求电流,我得到了两个方程式。 我试图找出相对误差,但我得到的曲线对我来说没有任何意义-至少- a = 0:.0001:pi; a0 = .2744; ws = .5; I2 = (-sin(pi/ws)/(cosh(pi*a0/ws)+cos(pi/ws))); Ucpw = (((a0*sin(pi/ws)-sinh(pi*a0/ws))/(cosh(a0*pi/ws)+cos(pi/ws)))); exp2 = exp(-a0/ws*a); I1 =(-sin(1/ws*pi))/(co

为了求电流,我得到了两个方程式。 我试图找出相对误差,但我得到的曲线对我来说没有任何意义-至少-

a = 0:.0001:pi;
a0 = .2744;
ws = .5;
I2 = (-sin(pi/ws)/(cosh(pi*a0/ws)+cos(pi/ws)));
Ucpw = (((a0*sin(pi/ws)-sinh(pi*a0/ws))/(cosh(a0*pi/ws)+cos(pi/ws))));
exp2 = exp(-a0/ws*a);
I1 =(-sin(1/ws*pi))/(cosh(a0/ws*pi)+cos(1/ws*pi));
phi2 = atan(-I2/(1-Ucpw - a0*I2));
i1 = exp2.*(I1.*cos(1/ws.*a)+(1-Ucpw-a0*I1).*sin(1/ws.*a));
i2 = (-I2./sin(phi2)).*exp2.*sin(a/ws - phi2);
e = abs((i1-i2)./i1);
plot(a,e)
Var a表示应以弧度显示的角度,
该曲线是否意味着溶液仅在振幅为5.05e-12的pi/2处存在误差?

在本例中使用相对误差不是一个好主意,因为i1在pi/2处变为零。这就是相对误差尖峰的原因,它淹没了图形的其余部分。我建议改为绘制绝对误差的对数:
plot(a,log(abs(i1-i2))


如您所见,错误并不局限于pi/2值。幅值
exp(-36)
大约是我的机器上
eps
的值;两者都是关于
2e-16
。正如Daniel在评论中所说,它来自浮点精度的限制

某些点具有更高的误差是正常的,以简化的示例为例:
a=0:.0001:pi;地块(acos(cos(a))-a)我现在得到了一些乐趣;我将a设置为2pi,对应于360度电角度,我得到了一些更有趣的东西。但无论如何,我希望误差有一个更随机的分布。浮点精度不是随机效应,它是非常确定的,取决于值的范围。检查eps
函数。我指的是误差分布,不是幅度,也不是来自数值极限表示的误差。我的意思是,在这种特殊情况下,两个函数对于相同的输入具有相同的结果,除了一些严格的pi/2,pi,3pi/2区域。我预计在这些值附近也会有一个误差。虽然epsilon是2e-16,但我们在绘图exp(-40)上有更大的值,误差如何达到那些需要“更长”尾数的值?我可能不应该在这里提到eps,因为它指的是相对准确度。这是绝对误差图;如果数字i1、i2小于1,则减去
i1-i2
的结果可能小于
eps