⽜顿迭代法c++代码_20201201⼀元⼆次⽅程的求解(求根公
式与⽜顿迭代)
分别输⼊⽅程a*X*X+b*X+C=0的参数a、b、c,计算出⽅程的解。
参考代码如下:
print("请输⼊⽅程a*X*X+b*X+C=0的参数,")a=float(input('a:'))b=float(input('b:'))c=float(input('c:'))dlt=b*b-4*a*cprint("%g*X*X+%g*X+%g=0的解:"%(a,b,c))if a==0:
本题其实没啥难度,主要是训练⼀下解决问题的思维完备性,⽐如需要判断能否构成⼀元⼆次⽅程、如果构不成会有什么情况等等。这些你
都考虑到了吗?
⼀元⼆次⽅程求解平时最常⽤的就是求根公式,但还有没有其他⽅法?显然是有的,⽐如⽜顿迭代法。什么?你不知道⽜顿迭代法?呵呵,
那就普及⼀下吧。
上⾯的函数y=f(x)图像与x轴有⼀个交点,这个就是⽅程f(x)=0解X,那么附近任意取⼀个Xn,对应的作函数图像的切线,再取得该切线与
x轴的交点,把这个点叫做Xn+1,发现没有?这时候是不是Xn+1⽐Xn更逼近于X?如果⼀直做下去,是不是就可以⽆限逼近X了呢?
这就是⽜顿迭代法的原理,很简单吧?那么Xn对应的切线⽅程是什么呢?这个在⾼等代数中⼤家应该学过,就是对f(x)求导得f'(x),带⼊
Xn就可以得到切点处的斜率k,那么⽅程就可以写作:y=k(x-Xn)+Yn。这样也就可以计算出它与x轴的交点xn+1=-Yn/k+Xn.
所以回到a*X*X+b*X+C=0的求解,我们先对y=a*X*X+b*X+C求导,得到y’=2*a*X+b,那么xn对应的切线⽅程为y=(2*a*Xn+b)(x-
Xn)+(a*Xn*Xn+b*Xn+C),它和x轴的交点Xn+1=-(a*Xn*Xn+b*Xn+C)/(2*a*Xn+b)+Xn,这个就是迭代式。不停跌代,直到Xn,Xn+1很
接近为⽌。
print("请输⼊⽅程a*X*X+b*X+C=0的参数,")a=float(input('a:'))b=float(input('b:'))c=float(input('c:'))def nt(x):#迭代函数 return -(a*x*x+b*x+c)/(2*a*x+b)+xdlt=b*b-要注意的问题:c语言牛顿迭代法求根
(1)如果存在解,那么在解附近的迭代肯定是收敛的。但⼀个初始值开始的迭代只可以逼近⼀个解,所以需要从函数图像⼊⼿分析⽅程会有
⼏个解,然后对应取得临近的初始值。⽐如⼆次⽅程如果有解,则对应的⼆次函数对称轴两边要分别取得初始值(2个)。
(2)⽜顿迭代法是解决⼀元⾼次⽅程的有效⽅法,不局限于解⼀元⼆次⽅程,这也正是我们这⾥研究他的意义所在。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论