wugang326 发表于 2007-3-28 12:57

谁能详细介绍一下Newton-Raphson方法?

先谢过了啊,呵呵

mjhzhjg 发表于 2007-3-28 16:21

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。

      设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0) f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

       解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=f(x)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。

tammy 发表于 2007-4-5 07:37

If you've ever tried to find a root of a complicated function algebraically, you may have had some difficulty. Using some basic concepts of calculus, we have ways of numerically evaluating roots of complicated functions. Commonly, we use the Newton-Raphson method. This iterative process follows a set guideline to approximate one root, considering the function, its derivative, and an initial x-value.

You may remember from algebra that a root of a function is a zero of the function. This means that at the "root" the function equals zero. We can find these roots of a simple function such as: f(x) = x2-4 simply by setting the function to zero, and solving:

f(x) = x2-4 = 0
(x+2)(x-2) = 0
x = 2 or x = -2

The Newton-Raphson method uses an iterative process to approach one root of a function. The specific root that the process locates depends on the initial, arbitrarily chosen x-value.


Here, xn is the current known x-value, f(xn) represents the value of the function at xn, and f'(xn) is the derivative (slope) at xn. xn+1 represents the next x-value that you are trying to find. Essentially, f'(x), the derivative represents f(x)/dx (dx = delta-x). Therefore, the term f(x)/f'(x) represents a value of dx.


The more iterations that are run, the closer dx will be to zero (0). To see how this works, we will perform the Newton-Raphson method on the function that we investigated earlier, f(x) = x2-4. Below are listed the values that we need to know in order to complete the process.


Theoretically, we could execute an infinite number of iterations to find a perfect representation for the root of our function. However, this is a numerical method that we use to lessen the burden of finding the root, so we do not want to do this. Therefore we will assume that the process has worked accurately when our delta-x becomes less than 0.1. This value of precision should be specific to each situation. A much more, or a much less, precise value may be appropriate when using the Newton-Raphson method in class. The table below shows the execution of the process.


Thus, using an initial x-value of six (6) we find one root of the equation f(x) = x2-4 is x=2. If we were to pick a different inital x-value, we may find the same root, or we may find the other one, x=-2.

A graphical representation can also be very helpful. Below, you see the same function f(x) = x2-4 (shown in blue). The process here is the same as above. In the first iteration, the red line is tangent to the curve at x0. The slope of the tangent is the derivative at the point of tangency, and for the first iteration is equal to 12. Dividing the value of the function at the initial x (f(6)=32) by the slope of the tangent (12), we find that the delta-x is equal to 2.67. Subtracting this from six (6) we find that the new x-value is equal to 3.33. Another way of considering this is to find the root of this tangent line. The new x-value (xn+1) will be equal to the root of the tangent to the function at the current x-value (xn).


The Newton-Raphson method does not always work, however. It runs into problems in several places. First, consider the above example. What would happen if we chose an initial x-value of x=0? We would have a "division by zero" error, and would not be able to proceed. You may also consider operating the process on the function f(x) = x1/3, using an inital x-value of x=1. Do the x-values converge? Does the delta-x decrease toward zero (0)?

So, how does this relate to chemistry? Consider the van der Waals equation found in the Gas Laws section of this text. Assuming that we have a set number of moles of a set gas, not under ideal conditions, we can use the Newton-Raphson method to solve for one of the three variables (temperature, pressure, or volume), based on the other two. To do this, we need to use the van der Waals equation, and the derivative of this equation, both seen below.



As you can see, the Van der Waals equation is quite complex. It is not possible to solve it algebraically, so a numerical method must be used. The Newton-Raphson Method is the easiest and most dependable way to solve equations like this, even though the equation and its derivative seem quite intimidating.

Depending on the conditions under which you are attempting to solve this equation, several of the variables may be changing. So, it may be necessary to use partial derivatives. For the purposes of this example, we are assuming that pressure, temperature, and volume are the only things changing, and that these values are all functions of time. This avoids the use of a partial derivative; we simply differentiate all variables with respect to time, as shown above. Some algebraic manipulation of the equation and/or its derivative may be needed depending on the specific problem to be solved. It is assumed that all of the variables but one are specified; that variable is used in the expression for "xn+1" that Newton's method uses. Performing Newton's method on this equation successfully would give a value of that variable which gives a solution when the other variables are held constant at the values you specified.

[ 本帖最后由 tammy 于 2007-4-5 07:39 编辑 ]

飞将军 发表于 2008-11-11 13:21

楼上两位的介绍非常好!我正整理相关的一个程序包,就在网上搜索,结果就搜到这里来了,非常感谢!

[ 本帖最后由 无水1324 于 2008-11-12 21:09 编辑 ]

z4561899 发表于 2011-10-7 13:38

谢过了啊,呵呵

仙人掌很快乐 发表于 2011-10-20 09:04

学习了,顶一个···

仙人掌很快乐 发表于 2011-10-20 09:05

学习了,顶一个···

牧兰 发表于 2012-5-21 20:52

我也真在学习一些算法,谢过了

茹果刘儿 发表于 2013-5-11 10:17

学习了~~好东西~~

ygvlcxy 发表于 2013-9-3 09:37

三楼能用更简洁的汉语就好了。
页: [1]
查看完整版本: 谁能详细介绍一下Newton-Raphson方法?