什么是理财北京网站建设公司/企业培训内容
在处理大和负实数时,有没有人知道如何使下面的Matlab代码更准确地逼近指数函数?
例如,当x = 1时,代码效果很好,当x = -100时,它应该更接近3.7201e-44时返回8.7364e 31的答案.
代码如下:
s=1
a=1;
y=1;
for k=1:40
a=a/k;
y=y*x;
s=s+a*y;
end
s
欢迎任何帮助,欢呼.
编辑:
好的,问题如下:
这段代码接近哪个数学函数? (我说指数函数.)当x = 1时它是否有效? (是的.)不幸的是,当x = -100时使用这个产生答案s = 8.7364e 31.你的同事认为程序中有一个愚蠢的错误,并请求你的帮助.仔细解释行为并给出一个简单的修复,产生更好的结果. [您必须建议对上述代码进行修改,或者使用它.您还必须检查您的简单修复工作.]
所以我有点明白,当术语之间存在16个(或更多)数量级时,问题会围绕大数字,精度会丢失,但解决方案不能解决.
谢谢
编辑:
所以最后我接受了这个:
s = 1;
x = -100;
a = 1;
y = 1;
x1 = 1;
for k=1:40
x1 = x/10;
a = a/k;
y = y*x1;
s = s + a*y;
end
s = s^10;
s
不确定它是否完全正确但它会返回一些好的近似值.
exp(-100)= 3.720075976020836e-044
s = 3.722053303838800e-044
在进一步分析之后(不幸地提交了分配),我意识到增加迭代次数,从而增加术语,进一步提高了效率.事实上,以下更有效:
s = 1;
x = -100;
a = 1;
y = 1;
x1 = 1;
for k=1:200
x1 = x/200;
a = a/k;
y = y*x1;
s = s + a*y;
end
s = s^200;
s
这使:
exp(-100)= 3.720075976020836e-044
s = 3.720075976020701e-044