具有拉格朗日乘数估计的Python非线性方程

标签 python math probability newtons-method

我已经为这件事苦苦挣扎了好几天....但无济于事。我不太擅长困难的数学,更不用说这种难度了。

我试图在我的毕业作业中用 python 实现彩票的最大熵应用,尽管该项目的重点是实现一些数据挖掘技术(决策树、Apriori、kmeans),但我已经完成了一些事情,我只是不能错过做更高级的事情的机会....但我想这对我来说太高级了。

所以,我的问题是如何求解以下论文中的非线性方程 (8)

引用资料 1:http://eprints.ecs.soton.ac.uk/901/01/paper05.pdf

该方法基于以下论文

引用文献 2:http://www.stanford.edu/~cover/papers/paper91.pdf

任何帮助(理论上的或其他方面的)将不胜感激。 谢谢

最佳答案

您需要结合使用公式 7 到 9。方程式中唯一未知的是拉格朗日乘数,即 lambda。其他一切都取决于可用的经验数据,因此只是数字。

给定一组 lambda 值,您可以计算 G(j,r) 和 Jacobian J(j,i,r,s)。反过来,如果您知道残差和雅可比行列式,则可以使用等式 9 中给出的牛顿法来求方程组的根,即满足 G(j,r) = 0 的那些 lambda 值。

因此,您使用对 lambda 值的初始猜测来计算其他项,然后使用这些项来更新您的猜测。使用等式 7 和 8 完全没有概念上的挑战 - 只需插入值 - 但它们会将大量数字相加,因此需要注意一些。

等式 9 有点棘手,因为它写得不是很清楚。由于本文描述的是方程组,因此您通常希望求解线性方程:

J * d_lambda = -G

其中 d_lambda 是猜测值变化的向量,G 是函数值的向量,J 是雅可比值的矩阵。论文中的符号非常困惑,混淆了应该是一个简单的表达式。您可以通过引入统一索引 a 来替换成对的索引 is 来使其更清晰;作者在方法的讨论中恰好提到了这个变化,在第4页第二段给出了计算综合指数的公式。

总的来说,程序变成了(使用统一索引):

  1. 选择一些 lambda 作为您的初始猜测。可能是零,也可能是随机数。
  2. 评估 G(a) 和 J(a,b)。
  3. 求解线性方程组以更新您的猜测。
  4. 如果更新与您的猜测相比较小,请停止。否则,确定新的猜测并返回步骤 2。

这看起来使用 Numpy 非常可行。论文中提到使用并行计算策略,但那是十多年前的事了;今天这似乎是一个小得多的问题。

关于具有拉格朗日乘数估计的Python非线性方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7821669/

相关文章:

Python - 如何创建在 __init__ 期间可配置的不可变类成员

algorithm - 时间复杂度作为输入位数的函数来衡量?

java - 掷骰子的概率。为什么我的代码在运行程序后显示错误消息?

c# - 如何将平面上的 3D 点转换为 UV 坐标?

c# - c-sharp 获取一个时间跨度内的工作时间

php 百分比机会

algorithm - 球桶,如果我添加另一个球,一个桶会装满吗?

python - 如何在 Python Web 应用程序中为状态更改通知生成服务器发送的事件?

python - python 和 oracle sql 中的哈希值不匹配

python - django-registration 和 sha1 作为哈希算法