计算方法-牛顿求根
- 格式:ppt
- 大小:2.82 MB
- 文档页数:42
迭代法求根号
迭代法是一种数值计算方法,用于逼近函数的根。
在求解根号的迭代法中,通常采用牛顿-拉弗森方法(Newton-Raphson method)或二分法(Bisection method)。
1.牛顿-拉弗森方法:
这是一种迭代方法,通过不断更新初始猜测值来逼近函数的根。
具体来说,对于要求解的根号函数f(x),牛顿-拉弗森方法的迭代公式如下:
x n+1=x n−f(x n) f′(x n)
其中,x n是第n次迭代的猜测值,x n+1是第n+1次迭代的猜测值,f′(x n)是函数f在x n处的导数。
2.二分法:
二分法是一种简单而直观的迭代方法,通过不断缩小根所在的区间来逼近根。
具体来说,对于要求解的根号函数f(x),二分法的迭代步骤如下:
(1)首先确定一个初始区间[a, b],使得f(a) 与f(b) 异号。
(2)然后计算区间的中点c = (a + b) / 2,并计算f(c)。
如果f(c) 等于零或者满足预先设定的精度要求,则 c 就是所求根的近似值;否则,根据f(a) 与f(c) 的符号确定新的区间[a, c] 或[c, b],然后重复上述步骤。
非线性方程求根——牛顿迭代法一、牛顿迭代法的基本思想基本思想:将非线性方程逐步归结为某种线性方程求解。
设方程f (x )=0有近似根x k (f `(x k )≠0),将f (x )在x k 展开:(ξ在x 和x k 之间)2()()()()()()2!k k k k f f x f x f x x x x x ξ'''=+-+-()()()()k k k f x f x f x x x '≈+-可设记该线性方程的根为x k +1,则()()()0k k k f x f x x x '+-=1()()k k k k f x x x f x +=-'故f (x )=0可近似表示为即为Newton 法迭代格式。
(k =0,1,……)例:用Newton 迭代法求方程310x x --=在x 0=1.5附近的近似实根。
解:32()1,()31f x x x f x x '=--=-迭代公式为312131kk k k k x x x x x +--=--计算步骤如下:(1)取初值x 0=1.5;(2)按照迭代公式计算x 1;(3)若|x 1-x 0|<=0.00001,终止迭代;否则,x 0=x 1;转(2);(4)输出迭代次数和近似根.二、牛顿迭代法的实现MATLAB求解程序设计:方程及一阶导数函数:function[fun,dfun]=fun0(x)fun=x^3-x-1;%求原函数的值dfun=3*x^2-1;%求一阶导数的值计算主程序:clearx0=1.5;[fun,dfun]=fun0(x0);x1=x0-fun/dfun;i=1;while abs(x1-x0)>1e-5x0=x1;[fun,dfun]=fun0(x0);x1=x0-fun/dfun;i=i+1;enddisp('the solution is x1=')x1disp('the iter time is ')i计算结果为:the solution is x1=x1 =1.3247the iter time isi =4可见经过4次迭代即到达要求的精度,原方程的一个近似实数根为1.3247.三、牛顿迭代法的收敛性牛顿迭代法的迭代函数:)()()(x f x f x x '-=ϕ222)]([)()()]([)()()]([1)(x f x f x f x f x f x f x f x '''='''-'-='ϕ设f (x *)=0,f `(x *)≠0,则ϕ`(x *)=0,故Newton 迭代法在x *附近至少平方收敛。
牛顿法牛顿法作为求解非线性方程的一种经典的迭代方法,它的收敛速度快,有内在函数可以直接使用。
结合着matlab 可以对其进行应用,求解方程。
牛顿迭代法(Newton ’s method )又称为牛顿-拉夫逊方法(Newton-Raphson method ),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,其基本思想是利用目标函数的二次Taylor 展开,并将其极小化。
牛顿法使用函数()f x 的泰勒级数的前面几项来寻找方程()0f x =的根。
牛顿法是求方程根的重要方法之一,其最大优点是在方程()0f x =的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时非线性收敛,但是可通过一些方法变成线性收敛。
牛顿法的几何解释:方程()0f x =的根*x 可解释为曲线()y f x =与x 轴的焦点的横坐标。
如下图:设k x 是根*x 的某个近似值,过曲线()y f x =上横坐标为k x 的点k P 引切线,并将该切线与x 轴的交点 的横坐标1k x +作为*x 的新的近似值。
鉴于这种几何背景,牛顿法亦称为切线法。
2 牛顿迭代公式:(1)最速下降法:以负梯度方向作为极小化算法的下降方向,也称为梯度法。
设函数()f x 在k x 附近连续可微,且()0k k g f x =∇≠。
由泰勒展开式: ()()()()()Tk k k k fx f x x x f x x x ο=+-∇+- (*)可知,若记为k k x x d α-=,则满足0Tk k d g <的方向k d 是下降方向。
当α取定后,Tk k d g 的值越小,即T kk d g -的值越大,函数下降的越快。
由Cauchy-Schwartz 不等式:T k k kk d g d g ≤,故当且仅当k k d g =-时,Tk k d g 最小,从而称k g -是最速下降方向。
最速下降法的迭代格式为: 1k k k k x x g α+=-。
五. 讨论分析当初始值选取离零点较远时将导致算法无法使用,例如第三题,将初始值改为2就无法计算出结果了,显示如下例如求020sin 35=-+-x x e x 的根,其中控制精度1010-=eps ,最大迭代次数40=M ,在steffensen 加速迭代方法的程序中,我们只需改动:it_max=40; ep=1e-10, 其余不变 。
利用以上程序,我们只需输入:phi=inline('exp(5*x)-sin(x)+(x)^3-20');[x_star,index,it]=steffensen(phi,0.5)可得:x_star = 0.637246094753909index = 0it = 41观察上述结果,index = 0,it = 41表明迭代失败,所以使用以上方法估计的时候,应该尽量估计出解的范围,偏离不应过大,距离增加迭代次数增加,也有可能迭代失败六. 改进实验建议根据上述分析,我认为,应该先对函数作一个简图,方便知道解的大概位置,然后我们才将这个大概值代入Newton 法或者Steffensen 中进行求解。
当然,我们可以用其他数学软件实现Newton 迭代法,我们可以用z-z 超级画板,其操作流程为:牛顿迭代法的公式是:x n+1=x n-f(x n)/f'(x n)。
下面我们就用牛顿迭代法设计程序求方程f(x)=ln(x)+2*x-6的近似解。
(一)观察方程f(x)=0的零点位置(1)显示坐标系的坐标刻度。
(2)作出函数y=ln(x)+2*x-6的图像,如下图所示:可以观察到方程的根在区间[2,3]上,我们可以设定近似解的初始值为2。
(二)设计求方程近似解的程序(1)在程序工作区中输入:f(x){ln(x)+2*x-6;}执行后,返回结果为:>> f(x) #这表示在计算机已经完成了函数f(x)的定义。
(2)定义f(x)的导函数g(x),在程序工作区中输入:Diff(f(x),x);执行后,返回结果为:>> 2+1/x #得到了f(x)的导函数。
牛顿法牛顿法作为求解非线性方程的一种经典的迭代方法,它的收敛速度快,有内在函数可以直接使用。
结合着matlab 可以对其进行应用,求解方程。
牛顿迭代法(Newton Newton’’s s method method )又称为牛顿-拉夫逊方法(Newton-Raphson method ),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,其基本思想是利用目标函数的二次Taylor 展开,并将其极小化。
牛顿法使用函数()f x 的泰勒级数的前面几项来寻找方程()0f x =的根。
牛顿法是求方程根的重要方法之一,其最大优点是在方程()0f x =的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时非线性收敛,但是可通过一些方法变成线性收敛。
收敛。
牛顿法的几何解释:牛顿法的几何解释:方程()0f x =的根*x 可解释为曲线()y f x =与x 轴的焦点的横坐标。
如下图:轴的焦点的横坐标。
如下图:设k x 是根*x 的某个近似值,过曲线()y f x =上横坐标为k x 的点k P 引切线,并将该切线与x 轴的交点轴的交点 的横坐标1k x +作为*x 的新的近似值。
鉴于这种几何背景,牛顿法亦称为切线法。
牛顿法亦称为切线法。
2 牛顿迭代公式:(1)最速下降法:x-d gk k×Gg sks×GGd 101x x x -(1)令k k G v I k G -=+,其中:,其中:0k v =,如果k G 正定;0,k v >否则。
否则。
(2)计算_k G 的Cholesky 分解,_T k k k k G L D L =。
(3)解_k k G d g =-得k d 。
(4)令1k k k x x d +=+牛顿法的优点是收敛快,缺点一是每步迭代要计算()()'k k f x f x 及,计算量较大且有时()'k fx 计算较困难,二是初始近似值0x 只在根*x附近才能保证收敛,如0x 给的不合适可能不收敛。
一、求根方法原理把非线性函数f(x)=0在x0处展开成泰勒级数取其线性部分,作为非线性方程的近似方程,则有 , 设,则其解为,再把f(x)在x1处展开为泰勒级数,取其线性部分为的近似方程,若,则得,如此继续下去,得到牛顿法的迭代公式:,通过迭代,这个式子必然在的时候收敛。
整个过程如下图:牛顿法收敛很快,而且可求复根,缺点是对重根收敛较慢,要求函数的一阶导数存在。
二、求解步骤1. 选取一个接近函数零点的自变量 x 值作为起始点。
2. 使用如下的迭代公式更新近似解。
3. 如果得出的解满足误差要求,终止迭代,所得的值即视为方根根的近似解。
三、自定的非线性方程使用牛顿迭代法近似求解如下方程在[-1, 1]之间的根:四、源程序代码clear, close allclcf = @(x) cos(x) -x.^3;f_prime = @(x) -sin(x) -3*x.^2;error = 1; %初始化误差变量iter = 0; %初始化迭代次数变量max_iter = 5000; %定义最大允许迭代次数tol = 1e-8; %定义循环终止误差x0 = 0.5; %初始值while error > tol && iter <= max_iterx = x0 - f(x0)/f_prime(x0); %更新x的值error = abs((x-x0)/x0); %计算相对误差iter = iter +1; %更新迭代次数x0 = x; %计算出的x赋值给x0,继续迭代,直到达到误差条件。
end五、上机运行结果截图六、结论1.迭代法是求解非线性方程组的一种很好的方法,它可以反复校验根的近似值,直到得出符合精度的解。
从几何角度上来解释可以解释为两个函数的无限逼近2.我们为了加快迭代的速度,引入了牛顿法,牛顿法的收敛速度很快,但是其收敛性取决于牛顿法的取值。
3.。
matlab牛顿法求根程序1、引言牛顿法求解方程的数值解是非常常用的一种方法,也是收敛速度很快的一种方法。
在Matlab中,可以使用fzero函数实现牛顿法求根。
本篇文章将介绍如何使用Matlab实现牛顿法求根。
2、牛顿法求根的原理牛顿法求根实际上是一种迭代法,迭代公式为:x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}其中,x_n 是第n次迭代的数值解,f(x_n)是方程在x_n处的函数值,f'(x_n)是方程在x_n处的导数值。
3、使用Matlab实现牛顿法求根在Matlab中,我们可以使用fzero函数实现牛顿法求根。
该函数的基本用法为:x=fzero(fun,x0,options)其中,fun是一个函数句柄,x0是初始迭代值,options是一个选项结构体,用于设置迭代精度等参数。
例如,我们想求解方程x^2-2=0在x=1附近的解,可以写出如下Matlab程序:fun=@(x)x^2-2;x0=1;options=optimset('TolX',1e-8,'Display','iter');x=fzero(fun,x0,options)其中,optimset函数可以设置迭代精度等参数,‘TolX’表示迭代停止条件,‘Display’表示是否输出迭代过程。
程序的运行结果如下:Func-count x f(x) Procedure1 1 -1 initial2 1.5000 0.2500 search3 1.4167 0.0069 search4 1.4142 0.0000 search即求得方程的解为1.4142。
4、代码实现除了使用fzero函数外,我们也可以自己实现牛顿法求根的代码。
以下是一个简单的例子:function x=newton(fun,x0,tol)while abs(fun(x0))>tolx0=x0-fun(x0)/diff(fun,x0);endx=x0;end其中,fun是函数句柄,x0是初始迭代值,tol是迭代停止条件。
牛顿迭代法的应用一、牛顿法简介牛顿迭代法(Newton's method )又称为牛顿-拉夫逊方法(Newton-Raphson method ),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。
牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。
该方法广泛用于计算机编程中。
简单迭代法是用直接的方法从原方程中隐含地解出x ,从而确定出)(x ϕ。
而牛顿迭代法是用一种间接而特殊的方法来确定)(x ϕ的。
下面具体推到牛顿迭代公式。
假设k x 是非线性方程为0)(=x f 的一个近似根,把)(x f 在k x 处作泰勒展开:+-+-+=2''')(!2)())(()()(k k k k k x x x f x x x f x f x f若取前两项来近似代替)(x f (称为)(x f 的线性化),则得近似的线性方程0))(()()('=-+≈k k k x x x f x f x f设0)('≠k x f ,令其解为1+k x ,则得)()('1k k k k x f x f x x -=+ (1)这称为0)(=x f 的牛顿迭代公式。
它对应的迭代方程为)()('x f x f x x -=显然是0)(=x f 的同解方程,故其迭代函数为)()()('k k k x f x f x x -=ϕ (0)('≠x f ) 在0)(=x f 的根α的某个邻域)|(|δα≤-x R 内,0)(≈x f1|)('||)(||)(||)(|2'''<≤•=L x f x f x f x ϕ 在α的邻域R 内,对任意初值x 0,应用由公式(1)来解方程的方法称为牛顿迭代法,它是解代数方程和超越方程的有效方法之一。
如何求解高次方程的根高次方程(或称高次多项式)是指方程中未知量的最高次幂大于等于2的多项式方程。
求解高次方程的根是一个十分基础也是十分重要的数学问题,在本文中,我们将会介绍几种常用的方法来求解高次方程的根。
1. 牛顿迭代法牛顿迭代法是一种经典的数值方法,它可以用来求解各种函数的零点,包括高次多项式方程。
对于一个一般的高次多项式 $f(x) = a_nx^n+ a_{n-1}x^{n-1} + \cdots + a_0$,我们可以通过以下步骤来使用牛顿迭代法求解其根:(1)选择一个初始点 $x_0$,通常可以选择0作为初始点。
(2)计算 $f(x_0)$ 和 $f'(x_0)$。
(3)使用牛顿迭代公式 $x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)}$ 来计算下一个近似值 $x_{k+1}$。
(4)重复步骤(2)和(3),直到达到所需精度为止。
需要注意的是,牛顿迭代法并不能保证总是能够收敛到方程的根,因此在实际使用中需要对其进行适当的调整或者选择其他的求根方法。
2. 特殊多项式的求解法对于一些特殊的多项式方程,我们可以使用它们的特殊性质来化简求解过程,例如:(1)二次方程(即次数为2的多项式方程)可以直接使用公式$x_{1,2} = \frac{-b\pm \sqrt{b^2-4ac}}{2a}$ 来求解其两个根 $x_1$ 和$x_2$。
(2)三次方程(即次数为3的多项式方程)可以使用三次求根公式的方法来求解其根。
不过由于三次求根公式的形式比较复杂,因此实际使用时更常采用数值方法进行求解。
(3)四次方程(即次数为4的多项式方程)可以使用费拉里方法(也称“四次通法”)来求解其根。
费拉里方法基于一个重要的结论:任意四次方程都可以通过一次代换化为关于另一个未知量的三次方程。
3. 特殊点的分解法特殊点的分解法是一种利用多项式的对称性质和零点的关系来求解高次多项式方程的方法。
牛顿法开根号-概述说明以及解释1. 引言1.1 概述概述部分内容如下:概述部分旨在介绍牛顿法开根号这一话题的背景和意义。
牛顿法是数值计算领域中一种重要的迭代方法,它可以用来求解方程的根,其中包括开根号。
在本文中,我们将主要探讨如何使用牛顿法来进行开根号运算。
开根号运算是数学中常见的计算方式之一,在日常生活和工作中经常会遇到需要求解某个数的平方根的情况。
而牛顿法则是一种快速、有效的数值近似方法,可以用来解决这类问题。
通过应用牛顿法开根号,我们可以更加准确地确定给定数的平方根,无论是整数、小数还是负数。
牛顿法本质上是一种迭代的过程,通过不断逼近函数的根,最终得到满足精度要求的解。
其基本思想是利用函数的切线逼近函数的根。
通过不断迭代,可以逐渐逼近最接近真实解的数值,从而得到更精确的结果。
本文将详细介绍牛顿法的原理和步骤,并对牛顿法开根号的优缺点进行分析。
同时,我们还将探讨牛顿法开根号的应用领域,并展示其在实际问题中的实际价值。
通过阅读本文,读者将能够深入了解牛顿法开根号的思想和计算过程,掌握利用牛顿法进行开根号运算的技巧和方法,并进一步认识到牛顿法在数值计算中的重要地位和广泛应用。
希望本文能够对读者在数学计算和科学研究中遇到的相关问题提供有益的帮助。
1.2 文章结构文章结构部分的内容可以包括以下内容:文章的结构是指整个文章的组织方式和内容安排。
一个良好的结构可以使读者更好地理解文章的主题和内容,并且有助于文章的逻辑性和连贯性。
本文的结构主要包括以下几个部分:第一部分是引言,主要介绍本文的主题和背景。
引言包括概述、文章结构和目的。
概述部分简要介绍牛顿法开根号的主要内容和作用,引发读者的兴趣。
文章结构部分,即当前所在章节,主要介绍整篇文章的结构和内容安排。
本文分为引言、正文和结论三个部分。
引言部分介绍了本文的主题和目的,并概述了整篇文章的结构。
正文部分将详细介绍牛顿法的原理和开根号的步骤。
结论部分总结了牛顿法开根号的优缺点,并谈论了其结果与应用。
二分法、不动点迭代法和牛顿迭代法是数值计算中常用的三种求根方法。
它们在不同的数学领域及实际问题中有着广泛的应用。
本文将对这三种方法进行介绍和比较。
一、二分法1. 原理二分法是一种基于区间不断缩小的求根方法。
其原理是通过在函数值的两个不同点处得到异号的情况下缩小区间来逼近实根。
具体过程为:首先确定一个区间[a,b],使得f(a)和f(b)异号,然后将区间一分为二,取中点c=(a+b)/2,若f(c)为零或在一定误差范围内,则c即为所求的根;否则,根据f(a)和f(c)的符号确定新的区间[a,c]或[c,b],重复上述步骤,直到满足要求。
2. 特点二分法的优点是简单易实现,对于连续且单调函数一定能收敛。
但其缺点是收敛速度较慢,尤其在根附近时迭代次数较多。
二、不动点迭代法1. 原理不动点迭代法是求解方程f(x)=0的一种迭代方法,通过将方程变换为x=g(x),其中g(x)为连续函数,然后通过不断地迭代计算得到方程的根。
具体过程为:给定一个初始近似值x0,通过不断迭代计算xn+1=g(xn)来逼近实根。
2. 特点不动点迭代法的优点是迭代过程简单,不需要对函数进行求导。
但其缺点是收敛性有一定要求,不是所有的g(x)函数都能得到收敛结果。
三、牛顿迭代法1. 原理牛顿迭代法是一种通过不断线性化函数来逼近方程根的方法。
其原理是通过对函数f(x)进行泰勒展开,并取展开式的线性部分来进行迭代计算。
具体过程为:给定一个初始近似值x0,通过不断迭代计算xn+1=xn-f(xn)/f'(xn)来逼近实根。
2. 特点牛顿迭代法的优点是收敛速度较快,在根附近有二次收敛性。
但其缺点是需要对函数进行求导,且初始值的选取对迭代结果有一定影响。
二分法、不动点迭代法和牛顿迭代法都是求解方程根的有效方法,各有其优缺点和适用范围。
在实际应用中,根据问题的特性和计算要求来选择适当的方法,以达到准确和高效的求解目的。
4. 比较与应用通过对二分法、不动点迭代法和牛顿迭代法的介绍,我们可以对它们进行比较与应用。
牛顿法重根问题-概述说明以及解释1.引言1.1 概述牛顿法是一种经典的数值计算方法,广泛应用于解决方程和优化问题。
它基于牛顿-拉夫逊方程而得名,由数学家伊萨克·牛顿在17世纪提出。
牛顿法的基本思想是通过不断迭代逼近函数的零点或最值点。
它通过计算函数在某点的导数和函数值的比值,确定函数在该点的局部线性近似,然后以该近似替代原函数,再求出近似函数的零点或最值点,不断迭代直至满足收敛条件。
重根问题是在求解方程时遇到的一类特殊情况。
当一个多项式函数有重复根时,常规的数值方法往往会失效,因为函数的导数在重根处为零,导致求解过程中出现除零操作或梯度无法更新的情况。
因此,如何有效地解决重根问题一直是数值计算中的挑战之一。
本文将从牛顿法的基本原理出发,介绍牛顿法在解决重根问题中的应用。
首先,我们将详细讨论牛顿法的原理和算法流程,以及收敛性和速度等方面的特点。
接着,我们将引入重根问题的定义和背景,并讨论重根问题对牛顿法的影响。
最后,我们将重点探讨牛顿法在解决重根问题中的应用方法及改进策略,并通过实例验证其有效性。
通过本文的研究,我们将对牛顿法在解决重根问题中的优势和局限性有更深入的了解,为其在实际问题中的应用提供指导和参考。
此外,我们还将展望牛顿法在其他数值计算问题中的潜在应用,并总结研究结果,为今后的相关研究提供思路和方向。
综上所述,本文旨在探讨牛顿法在解决重根问题中的应用,并通过分析和研究为其在实践中的应用提供理论基础和实践指导。
希望通过本文的阐述,读者能够更好地理解牛顿法及其在解决重根问题中的价值。
1.2文章结构文章结构部分的内容可以从以下几个方面展开:1.2 文章结构:本文将分为三个主要部分来介绍牛顿法在解决重根问题中的应用。
首先,在引言部分,我们将对牛顿法和重根问题进行概述,介绍文章的主要结构和目的。
接着,在正文部分,我们将详细阐述牛顿法的基本原理,并给出重根问题的定义和背景。
然后,我们将重点讨论牛顿法在解决重根问题中的应用,探讨其优势和适用性。
数学与计算科学学院实验报告
实验项目名称牛顿迭代法求根
所属课程名称
实验类型
实验日期
班级
学号
姓名
成绩
附录1:源程序
附录2:实验报告填写说明
1.实验项目名称:要求与实验教学大纲一致。
2.实验目的:目的要明确,要抓住重点,符合实验教学大纲要求。
3.实验原理:简要说明本实验项目所涉及的理论知识。
4.实验环境:实验用的软、硬件环境。
5.实验方案(思路、步骤和方法等):这是实验报告极其重要的内容。
概括整个实验过程。
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。
对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。
对于创新性实验,还应注明其创新点、特色。
6.实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析。
7.实验结论(结果):根据实验过程中得到的结果,做出结论。
8.实验小结:本次实验心得体会、思考和建议。
9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价。
⽜顿迭代法求根三次⽅根(cube.pas/c/cpp)【问题描述】⾃从在第2题中⽼师们的⼯作积极性提⾼以来,以Fengzee为⾸的学⽣们苦不堪⾔,因为⽼师给他们留了太多的作业,有些作业甚⾄是⼏乎⽆法完成的。
这次,数学⽼师布置下了10道开三次⽅的作业题,要求同学们笔算完成。
Fengzee当然不会花时间做这种没⽤的⼯作,他⼜没有计算器。
这样的⼯作应当由电脑来完成,这就需要你编程序来解决。
你的输⼊⽂件中只含有⼀个实数n,是待开三次⽅的数字。
你的任务是计算这个数的三次⽅根,并输出在标准输出⽂件中。
我们有算法设计限制条件:这道题的主要运算过程,你必须⾃⼰在程序中设计,且评测时使⽤的编译器已经去掉头⽂件math.h,就是说,你不能使⽤这个头⽂件中提供的⼀切函数。
你只需要在⽂件中写⼊结果,不要加任何额外的⽂字。
在满⾜算法设计限制条件的前提下,你的答案只需与标准答案相差不超过0.001,你即可得到全部的分数;⽽且你输出的数字的⼩数位数不受限制(⼩数点保留六位)。
【输⼊⽂件】输⼊⽂件cube.in输⼊⽂件中只含有⼀个实数n,是待开三次⽅的数字。
【输出⽂件】输出⽂件cube.out数n的三次⽅根。
【样例输⼊】9【样例输出】2.08008【数据规模】-10000<=n<=10000⼀般实现⼆分逼近法(同学友爱的代码~)#include <cstdio>#include <iostream>#include <algorithm>#define eps 1e-8using namespace std;double n;double fun(double mid){return mid*mid*mid<n?1:0;}int main(){cin>>n;double l=0,r=n,mid;if(n<0) swap(l,r);while(r-l>eps){ //当精度未达到1e-8即10-8时,⼆分逼近mid=(l+r)/2;if(fun(mid)) l=mid; //⼩的话else r=mid;}printf("%.6f\n",r);}然⽽我并没有想到这⼀点反⽽想起⽜顿⽼⼈家了我要在巨⼈的肩膀上⼲事!!(其实是我蠢 =6=..)没错⽜顿迭代法定义⼀种在域和域上近似求解⽅程的⽅法 --摘⾃百度原理 不断⽤(x,f(x))的切线来逼近⽅程的根递推公式 (证明过程可详见百度)加深理解可以参考有了这个我们可以⼲什么呢。