如何在Lua中进行代数学?
2017-5-12 3:26:55
收藏:0
阅读:120
评论:2
我已经寻找并尝试过了,但我找不到真正有用的信息,所以在此提前谢谢您。
我的问题是我有一个变化的变量"balance",目前我将其表示为200。我需要使用这个方程式来找出在游戏中应该提取多少钱,但我不知道如何编写解决代数问题的LUA脚本
方程式是: 200/(x+x^2+x^3+x^4+x^5)=0.00001001 如何解决x的问题?
我已经尝试在200/(x+x^2+x^3+x^4+x^5)不等于0.00001001时添加.0000001,但这非常不切实际,而且我没有使其工作。这是我目前能想到的唯一方法。任何帮助都将不胜感激。
点赞
用户1847592
这个解决方案可以找到任何连续函数的零点(不仅仅是代数函数,也不仅仅是可导函数),需要知道要找到的根的区间。
local function find_zero(f, x_left, x_right, eps)
eps = eps or 0.0000000001 -- 精度
local f_left, f_right = f(x_left), f(x_right)
assert(x_left <= x_right and f_left * f_right <= 0, "区间错误")
while x_right - x_left > eps do
local x_middle = (x_left + x_right) / 2
local f_middle = f(x_middle)
if f_middle * f_left > 0 then
x_left, f_left = x_middle, f_middle
else
x_right, f_right = x_middle, f_middle
end
end
return (x_left + x_right) / 2
end
local function my_func(x)
return 200/(x+x^2+x^3+x^4+x^5) - 0.00001001
end
-- 假设根在1和1000之间
local x = find_zero(my_func, 1.0, 1000.0)
print(x) --> 28.643931367544
2017-05-12 09:49:07
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

`200/(x+x^2+x^3+x^4+x^5)=0.00001001` 等价于 `200 = 0.00001001 * (x+x^2+x^3+x^4+x^5)`,因此你需要解决一个多项式方程,通常人们喜欢处理这种形式的方程。 如果你想使用 Lua,那么如果方程的形式足够可预测,你可以找到一个右侧始终小于左侧的地方(例如 x = 0),以及一个右侧始终大于左侧的地方(例如x的非常大的值),然后可以使用二分查找-虽然效率不高,但是确定性高且易于编码。 对于一般的多项式方程,一个众所周知的方法是 [https://en.wikipedia.org/wiki/Newton](https://en.wikipedia.org/wiki/Newton) 的方法。给定 f(x)= 0 和 x 的猜测,更好的猜测可能是 x - f(x)/ f'(x),其中 f'(x)是 f(x)的导数。但是,有一些病态情况无法进行有效解决,因此您可能需要确认您的方程可靠可处理。 由于您有 Lua,因此您可以引入调用数学库(例如 [http://commons.apache.org/proper/commons-math/](http://commons.apache.org/proper/commons-math/) 的代码)的 C 代码。它们有一个名为 LaguerreSolver() 的例程可以合理可靠地为您解决多项式方程,来防止所有病态情况。大多数数学库包含的工作比任何单个人处理单个问题所能加入的工作都要多,并且具有相应的比自己解决的方法更高的质量。