问题标签 [newtons-method]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++:newton raphson 和重载函数
我写了一个牛顿拉夫森求根算法的简单实现,它以初始猜测init
、一元函数f
和容差tol
作为参数,如下所示:
我的问题是:虽然这对于一元函数非常有效,但我想更改实现,使其适用于f
具有多个参数的函数,但除一个参数之外的所有函数都具有常量值。澄清一下:如果我有一个函数 f(x) = 3x + 2 如下所示
然后我的实现工作。但是,我也希望它适用于具有任何给定数量参数的任何函数,但只有第一个参数是可变的。所以,如果我有一个函数 f(x,y) = 3x + 2y
我想使用相同的函数找到 f(x,2) 或 f(x,3) 的根,等等 n 个参数,而不仅仅是一个或两个(请忽略我在该示例是简单的线性函数,这只是一个示例)。有什么方法可以为不同数量的参数实现函数,还是我必须为每种情况编写一个实现?
谢谢,
纳克斯
笔记
正如您现在所知道的那样,这个问题实际上并不是关于 newton-raphson,但是如果我将它用作实际问题的示例,它会变得更容易,这是针对不同数量参数的函数的单一实现。
更新
下面的一些答案使用std::bind
和std::function
解决问题,实际上比选择的答案更好地解决了我的问题;但是,它们是 c++11 库类/函数(请不要误会,这是我强烈敦促每个 c++ 程序员继续学习的东西),在撰写本文时,我正面临一些问题使用它们; 使用 g++ 4.7(符合 c++11)的 Eclipse Juno 仍然无法识别std::function
,因此我决定继续使用下面的检查答案,这也很好用。
python - 使用 Python 求解具有矢量系数的非线性 ODE 方程组
我需要为 y 解决下一个系统:
是这样的:
我基于两个脚本编写了一个 Python 程序。一个主程序和第二个 newton-jacobian 脚本,因为我使用的是牛顿迭代法,导致这个问题在 u 和 u' 处有 2 个边界条件
现在,我可以解决下一个问题:
仅当 k=常数时!
在我的问题中,k 取决于 x,在程序中计算,有 N 个值。
有谁知道或可以建议一种方法来解决我插入 k 的上述非线性系统,并且我尝试在第二个牛顿求解器脚本中调用 k_function(),但我没有成功。它不承认它。
任何解决非线性方程模拟系统的人的建议都将受到欢迎!
python - 在 Python 中使用二分法改进牛顿法
我编写了一个代码,它通过牛顿法 (Jacobian N+1 * N+1) 求解高维非线性方程组的二阶系统 (i=0,N),具有 2 个边界条件。
我想问你,我是否可以在这个 N 维问题中实现二分法。不幸的是,牛顿收敛不适用于我的问题的某些区域。
根据此来源:http ://ursa.as.arizona.edu/~rad/phys305/root_finding/node4.html
" 一种改进的求根方案是将二分法和牛顿-拉夫森方法结合起来。二分法保证了一个根(或奇异性),用于在线性假设较差时限制牛顿-拉夫森法估计的位置变化。然而,Newton-Raphson 步骤是在接近线性的状态下采取的,以加速收敛。
换句话说,如果我们知道在两个边界点之间有一个根,我们首先考虑 Newton-Raphson 步骤。如果这会预测出我们括号范围之外的下一个点,那么我们通过选择范围的中点作为下一个点来执行二等分步骤。然后,我们在下一个点评估该函数,并根据该评估的符号,用新点替换其中一个边界点。这使根保持在括号内,同时让我们受益于 Newton-Raphson 的速度。"
...可以在 Python 中的 N 维问题中做到这一点吗?
n维中FORTRAN的Rtsafe模块可能会这样做,并且Matlab可能有类似的模块......
matlab - MATLAB:无法从 sym 转换为逻辑
我在这里构建的用户定义函数有问题。我要做的是将一个值替换为一个符号函数,然后将该数字答案用于各种目的。具体在这里:
运行我的程序,我收到以下错误:
我试过用double(subs(f,x))
没用。我似乎遇到了与 MuPAD ( DOUBLE cannot convert the input expression into a double array.
)相关的完全不同的错误
以下是整个程序:
我会很感激一些关于我做错了什么的指示;一切顺利。
wolfram-mathematica - Mathematica 中的 Newton-Raphson 方法
我想在 Mathematica 中实现 Newton-Raphson 方法。
这是我的代码:
k
计算有多少次迭代。
但是,当我运行它时会发生以下情况:
好像有问题f
。我现在该怎么办?
algorithm - 为什么`x = x*(1.5f-(xhalf*x*x));`可以是牛顿法迭代?
好的,到目前为止,我想很多人都知道著名的快速反平方根(参见编写自己的平方根函数和0x5f3759df的更多信息)
这是代码
好的,我不需要知道更多魔法0x5f3759df
是什么。
我不明白为什么x*(1.5f-(xhalf*x*x))
是Newton Method
迭代?
我尝试分析但无法得到它。
所以让我们假设 r 是实数,x 是 r 的逆平方。
1 / (x^2) = r
,然后f(x) = r*(x^2)-1
和f'(x) = 2 * r * x
所以一次迭代应该是x1 = x - f(x)/f'(x) = x / 2 + 1 / (2 * r * x)
,对吧?
怎么来的x * (1.5 - ((r / 2) * x * x))
?(注意我在这里替换xhalf
为r / 2
)
编辑
好的f(x) = x^2 - 1/r
是另一种形式,让我计算一下
f(x) = x^2 - 1 / r
f'(x) = 2 * x
所以x1 = x - (f(x)/f'(x)) = x - (x^2 -(1 / r))/(2*x) = x / 2 + 1 / (2 * r * x)
,它仍然与代码中使用的公式有很大不同,对吧?
python - TypeError:只能将元组(不是“浮动”)连接到元组
我是python新手,所以问题可能很简单,无论如何,感谢您的耐心:
当我试图调用 newton-raphson 方法来计算用于看涨/看跌期权定价的 Black-Scholes 公式中的隐含波动率时,首先是 scipy.optimize 中的牛顿方法似乎计算了函数的零点,但在 Black-斯科尔斯公式,我希望函数的值是期权价格,而不是零。(我是编程新手,所以我不确定某些技术。)我应该编写另一个函数来执行以下操作:
然后,在调用 newton 方法时,它需要一个 args=() 作为函数中的一个参数,我这样写:
但收到此错误消息:
你能告诉我这是为什么吗?如何解决?非常感激。
c++ - 计算三次根的无限循环
我正在尝试创建一个通过牛顿法计算三次根的函数,但由于某种原因我似乎在这里有一个无限循环?
matlab - 在不限制迭代的情况下使用牛顿拉夫森方法管理振荡和扭转
我一直在尝试编写一个 MATLAB 函数,它只需使用 Newton-Raphson 即可计算函数的根。该算法的问题是它在扭转点和根附近发散并伴随振荡(例如,对于 x^2+2 在 10 次迭代后初始猜测为 -1,该方法发散)。是否有任何令人满意的条件来确定我们何时得到不以非常低效的方式计算迭代的振荡和扭转?