⑴ 用牛顿迭代法求方程在0.9附近的实根,要求迭代精度为0.00001
以f(x)=3x^2-e^x为例,以下为C++代码:
#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;
double f(double x){ return 3*x*x-exp(x);}
double fd(double x){ return 6*x-exp(x);}
int _tmain(int argc, _TCHAR* argv[])
{
double x;
cout<<"输入初始迭代值:"<<endl;
cin>>x;
while(abs(f(x))>0.00001)
{
x=x-f(x)/fd(x);
}
cout<<"计算结果: x="<<x<<", f(x)="<<f(x)<<endl;
system("pause");
return 0;
}
运行结果:
输入0.9,输出x=0.910008, f(x)=6.36005e-009
⑵ 为什么我用牛顿法求根特别慢
建议:
牛顿法就是切线法。当初值选取距离根很远的时候,这个曲线和这点的切线不够“贴合”,因此这时候迭代点靠近根也比较慢。
开始的时候用二分法,大致确定根的范围,此法初期很有效,当区间收缩的比较小的时候,曲线变化不大,切线法就收敛的比较快了。
一般的都是两种方法结合使用。这只是建议。不知是否对你有帮助。
⑶ 牛顿迭代法停止迭代的条件
# include <stdio.h>
# include <math.h>
int main ()
{
double x1,x0,f,f1;
x1 = 1.5;
do
{
x0 = x1;
f = ((2 * 0 - 4) * x0 + 3)* x0 - 6;
f1 = (6 * x0 - 8) * x0 + 3;
x1 = x0 - f / f1;
}while (fabs(x1 - x0) >= 1e-5);
printf ("%5.2f\n",x1);
return 0;
}
⑷ 牛顿法的原理
把非线性函数在处展开成泰勒级数
取其线性部分,作为非线性方程的近似方程,则有
设 ,则其解为
因为这是利用泰勒公式的一阶展开, 处并不是完全相等,而是近似相等,这里求得的 并不能让 ,只能说 的值比 更接近 ,于是乎,迭代求解的想法就很自然了,
再把f(x)在x1 处展开为泰勒级数,取其线性部分为 的近似方程,若 ,则得 如此继续下去,得到牛顿法的迭代公式: ,通过迭代,这个式子必然在 的时候收敛。整个过程如右图:
例1 用牛顿法求方程 在 内一个实根,取初始近似值=1.5。 解 所以迭代公式为:
列表计算如下: 01.511.737121.698731.6975......
⑸ 牛顿迭代方法
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
中文名
牛顿迭代法
外文名
Newton's method
别名
牛顿-拉夫逊(拉弗森)方法
提出时间
17世纪
快速
导航
牛顿迭代公式
其他迭代算法
C语言代码
C++代码
matlab代码
Python代码
Java代码
JavaScript代码
Fortran代码
产生背景
多数方程不存在求根公式,因此求精确根非常困难,甚至不可解,从而寻找方程的近似根就显得特别重要。方法使用函数 的泰勒级数的前面几项来寻找方程 的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。
牛顿迭代公式
设 是 的根,选取 作为 的初始近似值,过点 做曲线 的切线 , ,则 与 轴交点的横坐标 ,称 为 的一次近似值。过点 做曲线 的切线,并求该切线与x轴交点的横坐标 ,称 为r的二次近似值。重复以上过程,得 的近似值序列,其中, 称为 的 次近似值,上式称为牛顿迭代公式。
用牛顿迭代法解非线性方程,是把非线性方程 线性化的一种近似方法。把 在点 的某邻域内展开成泰勒级数 ,取其线性部分(即泰勒展开的前两项),并令其等于0,即 ,以此作为非线性方程 的近似方程,若 ,则其解为 , 这样,得到牛顿迭代法的一个迭代关系式: 。
已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量
在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。
其他迭代算法
欧几里德算法
最经典的迭代算法是欧几里德算法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:
定理:gcd(a,b) = gcd(b,a mod b)
证明:a可以表示成a = kb + r,则r = a mod b。假设d是a,b的一个公约数,则有 a%d==0,b%d==0,而r = a - kb,因此r%d==0 ,因此d是(b,a mod b)的公约数
查看更多
⑹ 用牛顿法求根收敛速度慢为啥
可能问题:1、使用牛顿法的过程出现较大错误;2、设定的常数太小,求根的精度(有效数字位数)达不到要求。
⑺ 牛顿迭代法
这个你要明白这是方程根的数值解法,解的过程是一个逐渐逼近的过程,而不是可以立马得到结果,要是的话那是解析解。所以每次算出的x都是方程的根,但一般迭代次数越多则算出的根越接近真实的根。表示第n次的迭代结果,故Xn+1表示第n+1次的迭代结果,这个是对计算误差的控制,即第n+1次的迭代结果与第n次的迭代结果之间相差不超过1e-5,即:|(Xn+1)-(Xn)|<=1e-5
以上回答你满意么?
⑻ 牛顿法的运算方法
这里将简单介绍一下牛顿二阶导数法。对其几何意义及收敛性不作详细的叙述,读者可仿照牛顿法进行讨论。
将f(x)在 处展开泰勒级数f(x)=f( )+f′( )(x- )+ f″( )(x- ) +…
取右端前三项近似代替f(x),于是得f(x)=0的近似方程为
f( )+f′( )(x- )+ f″( )(x- ) =0
也即f( )+(x- )[f′( )+ f″( )(x- )] =0 (3)
设其解为 .利用(1), - =- ,代入(3)中括号内 - ,则得f( )+( - ) [f′( )+ f″( ) ] =0
于是解出 ,得 = -
重复以上过程得: = -
于是得牛顿二阶导数法的迭代公式为:
= - n=0,1,2,… (4)
上式与牛顿法迭代公式(2)相比,利用此公式求根收敛更快,迭代次数更少。其缺点是要求f(x)的二阶导数存在。 这是一个由开方公式引出的:
X(n+1)=Xn+(A/X^(k-1)-Xn)1/k (5)(n,n+1表示下角标)
开立方公式:
当(5)式中的K=3时就是开立方公式。
设A = X^3,求X.称为开立方。 开立方有一个标准的公式:
X(n+1)=Xn+(A/X^2-Xn)1/3(n,n+1是下角标)
例如,A=5,,即求
5介于1的3次方;至2的3次方;之间(1的3次方=1,2的3次方=8)
初始值X0可以取1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,都可以。例如我们取X0 = 1.9按照公式:
第一步:X1=1.9+(5/1.9^2;-1.9)1/3=1.7。
即5/1.9×1.9=1.3850416,1.3850416-1.9=-0.5149584,-0.5149584×1/3=-0.1716528,1.9+(-0.1716528)=1.7。即取2位数值,,即1.7。
第二步:X2=1.7+(5/1.7^2;-1.7)1/3=1.71。
即5/1.7×1.7=1.73010,1.73-1.7=0.03,0.03×1/3=0.01,1.7+0.01=1.71。取3位数,比前面多取一位数。第三步:X3=1.71+(5/1.71^2;-1.71)1/3=1.709.
第四步:X4=1.709+(5/1.709^2;-1.709)1/3=1.7099
这种方法可以自动调节,第一步与第三步取值偏大,但是计算出来以后输出值会自动转小;第二步,第四步输入值
偏小,输出值自动转大。即5=1.7099^3;
当然初始值X0也可以取1.1,1.2,1.3,。。。1.8,1.9中的任何一个,都是X1 = 1.7 > 。当然,我们在实际中初始值最好采用中间值,即1.5。 1.5+(5/1.5²-1.5)1/3=1.7。
如果用这个公式开平方,只需将3改成2,2改成1。即
X(n + 1) = Xn + (A / Xn − Xn)1 / 2 (n,n+1是下角标)
例如,A=5:
5介于2的平方至3的平方;之间。我们取初始值2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9都可以,我们最好取 中间值2.5。 第一步:2.5+(5/2.5-2.5)1/2=2.2;
即5/2.5=2,2-2.5=-0.5,-0.5×1/2=-0.25,2.5+(-0.25)=2.25,取2位数2.2。
第二步:2.2+(5/2.2-2.2)1/2=2.23;
即5/2.2=2.272,2.272-2.2=-0.072,-0.072×1/2=-0.036,2.2+0.036=2.23。取3位数。
第三步:2.23+(5/2.23-2.23)1/2=2.236。
即5/2.23=2.242,2.242-2.23=0.012,0.012×1/2=0.006,2.23+0.006=2.236.
每一步多取一位数。这个方法又叫反馈开方,即使你输入一个错误的数值,也没有关系,输出值会自动调节,接近准确值。
详见网络文库《开立方公式》《从二项式定理开方到切线法》。 方程f(x)=0的根就是曲线y=f(x)与x轴交点的横坐标x*,当初始近似值x0选取后,过( x0,f(x0))作切线,其切线方程为:y- f(x0)=f′(x0)(x-x0)
它与x轴交点的横坐标为x
一般地,设 是x*的第n次近似值,过( x,f(x))作y=f(x)的切线,其切线与x轴交点的横坐标为:x = - 即用切线与x轴交点的横坐标近似代
曲线与x轴交点的横坐标,如图2-4。
2-4
牛顿法正因为有此明显的几何意义,所以也叫切线法。
⑼ 牛顿迭代法求根。
这个你要明白这是方程根的数值解法,解的过程是一个逐渐逼近的过程,而不是可以立马得到结果,要是的话那是解析解。所以每次算出的x都是方程的根,但一般迭代次数越多则算出的根越接近真实的根。表示第n次的迭代结果,故Xn+1表示第n+1次的迭代结果,这个是对计算误差的控制,即第n+1次的迭代结果与第n次的迭代结果之间相差不超过1e-5,即:|(Xn+1)-(Xn)|<=1e-5