- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有谁知道在处理大实数和负实数时,如何使下面的 Matlab 代码更准确地逼近指数函数?
例如,当 x = 1 时,代码运行良好,当 x = -100 时,它返回 8.7364e+31 的答案,而它应该更接近 3.7201e-44。
代码如下:
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
最佳答案
正如 John 在评论中指出的那样,您在循环中遇到了错误。 y = y*k 行不满足您的需要。更仔细地查看 exp(x) 系列中的项。
无论如何,我认为这就是为什么要给您布置此家庭作业的原因,以了解像这样的级数对于大值不会很好地收敛。相反,您应该考虑如何缩小范围。
比如你能不能用身份
exp(x+y) = exp(x)*exp(y)
对你有利?假设您存储 exp(1) = 2.7182818284590452353 的值...
现在,如果我要你计算 exp(1.3) 的值,你会如何使用上述信息?
exp(1.3) = exp(1)*exp(0.3)
但是我们已经知道 exp(1) 的值了。事实上,稍微考虑一下,这将使您可以将指数的范围缩小到需要级数仅在 abs(x) <= 0.5 时快速收敛。
编辑:还有第二种方法可以使用相同身份的变体来缩小范围。
exp(x) = exp(x/2)*exp(x/2) = exp(x/2)^2
因此,假设您希望计算大数的指数,例如 12.8。让它以可接受的速度收敛将需要简单级数中的许多项,并且会发生大量减法抵消,因此无论如何您都不会获得良好的准确性。但是,如果我们认识到这一点
12.8 = 2*6.4 = 2*2*3.2 = ... = 16*0.8
那么如果您可以有效地计算 0.8 的指数,那么所需的值很容易恢复,也许可以通过重复平方来恢复。
exp(12.8)
ans =
362217.449611248
a = exp(0.8)
a =
2.22554092849247
a = a*a;
a = a*a;
a = a*a;
a = a*a
362217.449611249
exp(0.8)^16
ans =
362217.449611249
请注意,无论何时使用此类方法进行范围缩减,虽然由于需要进行额外的计算,您可能会遇到数值问题,但由于级数的收敛性大大增强,您通常会领先一步。
关于用于逼近指数函数的 Matlab 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10281150/
我在为 MacOSX 构建的独立包中添加 DMG 背景的自定义图标时遇到问题。我在项目的根目录中添加了一个包。正在从中加载自定义图标,但没有加载 DMG 背景图标。我正在使用 Java fx 2.2.
Qt for Symbian 和 Qt for MeeGo 有什么区别?我知道 Qt 是一个交叉编译平台。这是否意味着如果我使用来自 Qt 的库,完全相同的库可以在所有支持 Qt 的设备(例如 Sym
我正在尝试使用 C# .NET 3.5/4.0 务实地运行 SQL Server 数据库的备份。我已经找到了如何完成此操作,但是我似乎找不到用于备份的命名空间库。 我正在寻找 Microsoft.Sq
我最近在疯狂学习 Java,但我通常是一名 .NET 开发人员。 (所以请原谅我的新手问题。) 在 .Net 中,我可以在不使用 IIS 的情况下开发 ASP.Net 页面,因为它有一个简化的 Web
这post仅当打印命令中有字符串时才有用。现在我有大量的源代码,其中包含一条声明,例如 print milk,butter 应该格式化为 print(milk,butter) 用\n 捕获行尾并不成功
所以我的问题是: https://gist.github.com/panSarin/4a221a0923927115584a 当我保存这个表格时,我收到了标题中的错误 NoMethodError (u
如何让 Html5 音频在点击时播放声音? (ogg 用于 Firefox 等浏览器,mp3 用于 chrome 等浏览器) 到目前为止,我可以通过 onclick 更改为单个文件类型,但我无法像在普
如果it1和it2有什么区别? std::set s; auto it1 = std::inserter(s, s.begin()); auto it2 = std::inserter(s, s.en
4.0.0 com.amkit myapp SpringMVCFirst
我目前使用 Eclipse 作为其他语言的 IDE,而且我习惯于不必离开 IDE 做任何事情 - 但是我真的很难为纯 ECMAScript-262 找到相同或类似的设置。 澄清一下,我不是在寻找 DO
我想将带有字符串数组的C# 结构发送到C++ 函数,该函数接受void * 作为c# 结构和char** 作为c# 结构字符串数组成员。 我能够将结构发送到 c++ 函数,但问题是,无法从 c++ 函
我正在使用动态创建的链接: 我想为f:param附加自定义转换器,以从#{name}等中删除空格。 但是f:param中没有转换器
是否可以利用Redis为.NET创建后写或直写式缓存?理想情况下,透明的高速缓存是由单个进程写入的,并且支持从数据库加载丢失的数据,并每隔一段时间持久保存脏块? 我已经搜查了好几个小时,也许是goog
我正在通过bash执行命令的ssh脚本。 FILENAMES=( "export_production_20200604.tgz" "export_production_log_2020060
我需要一个正则表达式来出现 0 到 7 个字母或 0 到 7 个数字。 例如:匹配:1234、asdbs 不匹配:123456789、absbsafsfsf、asf12 我尝试了([a-zA-Z]{0
我有一个用于会计期间的表格,该表格具有期间结束和开始的开始日期和结束日期。我使用此表来确定何时发生服务交易以及何时在查询中收集收入,例如... SELECT p.PeriodID, p.FiscalY
我很难为只接受字符或数字的 Laravel 构建正则表达式验证。它是这样的: 你好<-好的 123 <- 好的 你好123 <-不行 我现在的正则表达式是这样的:[A-Za-z]|[0-9]。 reg
您实际上会在 Repeater 上使用 OnItemDataBound 做什么? 最佳答案 “此事件为您提供在客户端显示数据项之前访问数据项的最后机会。引发此事件后,数据项将被清空,不再可用。” ~
我有一个 fragment 工作正常的项目,我正在使用 jeremyfeinstein 的 actionbarsherlock 和滑动菜单, 一切正常,但是当我想自定义左侧抽屉列表单元格时,出现异常
最近几天,我似乎平均分配时间在构建我的第一个应用程序和在这里发布问题!! 这是我的第一个应用程序,也是我们的设计师完成的第一个应用程序。我试图满足他所做的事情的外观和感觉,但我认为他没有做适当的事情。
我是一名优秀的程序员,十分优秀!