从点斜线到牛顿迭代法

1 斜线方程及其根

斜线方程
直线上一点(a,b)并且存在直线的斜率k,则直线可表示 y = k ( x − a ) + b y=k(x-a) + b y=k(xa)+b
斜率:
k = ( y − y 1 ) / ( x − x 1 ) k = (y-y1) / (x-x1) k=(yy1)/(xx1)

“根”一般是指多项式的零点;先将y更改为f(x),即 f ( x ) = k ( x − a ) + b , f ( x ) = 0 f(x)=k(x-a) + b, f(x)=0 f(x)=k(xa)+b,f(x)=0时的x值就是方函数(x)的根,就是斜线和x轴(y=0这条线)的交点

2 切线方程及其根

切线定义
假设有一条曲线的函数为 f ( x ) f(x) f(x),那么其上就有一点 ( x , f ( x ) ) (x, f(x)) (x,f(x)),在该点画一条与曲线相切的线(刚好掠过该点),该线就是过点 ( x , f ( x ) ) (x, f(x)) (x,f(x))的切线
切线的斜率

在曲线上,选取一个无限靠近x0的点 x 1 x_1 x1,这两个在曲线上的点分别为 ( x 0 , f ( x 0 ) ) 、 ( x 1 , f ( x 1 ) ) (x_0,f(x_0))、(x_1,f(x_1)) (x0,f(x0))(x1,f(x1))
那么经过这两个点的斜率为: k = f ( x 0 ) − f ( x 1 ) x 0 − x 1 k = \frac{f(x_0)-f(x_1)} {x_0-x_1} k=x0x1f(x0)f(x1)
因为x0无限趋近于x1时, 根据极限原理得到公式,斜率k:
k = lim ⁡ x 0 → x 1 f ( x 0 ) − f ( x 1 ) x 0 − x 1 k=\lim\limits_{x0\to x1}\frac{f(x_0)-f(x_1)}{x_0-x_1} k=x0x1limx0x1f(x0)f(x1)
k = lim ⁡ h → 0 f ( x + h ) − f ( x ) h k=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h} k=limh0hf(x+h)f(x)
切线方程
y = kx +b,其中是切线的斜率,b是常量

切线的根就是该切线和x轴的交点, x = − b / k x=-b/k x=b/k

3 导数

导数定义
通过 ( x , ( f ( x ) ) (x,(f(x)) (x,(f(x))的切线的斜率是x的一个函数,这个函数被称为函数 f ( x ) f(x) f(x)导数 f ′ ( x ) f'(x) f(x),将极限公式种的h替换为 Δ x \Delta x Δx,得到:
f ′ ( x ) = lim ⁡ Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x f'(x)=\lim\limits_{\Delta x\to 0}\frac{f(x+\Delta x)-f(x)}{\Delta x} f(x)=Δx0limΔxf(x+Δx)f(x)
如果 f ( x ) = x 2 f(x) = x^2 f(x)=x2,那么 f ′ ( x ) f'(x) f(x)是什么?导数的推导:
f ′ ( x ) = lim ⁡ h → 0 f ( x + h ) − f ( x ) h = lim ⁡ h → 0 ( x + h ) 2 − x 2 h = lim ⁡ h → 0 x 2 + 2 x h + h 2 − x 2 h = lim ⁡ h → 0 2 x h + h 2 h = lim ⁡ h → 0 2 x + h h = 2 x f'(x)=\lim\limits_{h\rightarrow 0}\frac{f(x+h)-f(x)}{h}= \lim\limits_{h\rightarrow 0}\frac{(x+h)^2-x^2}{h} =\lim\limits_{h\rightarrow 0}\frac{x^2+2xh+h^2-x^2}{h} =\lim\limits_{h\rightarrow 0}\frac{2xh+h^2}{h} =\lim\limits_{h\rightarrow 0}\frac{2x+h}{h} =2x f(x)=h0limhf(x+h)f(x)=h0limh(x+h)2x2=h0limhx2+2xh+h2x2=h0limh2xh+h2=h0limh2x+h=2x
因此 f ( x ) = x 2 f(x) = x^2 f(x)=x2的导数为 f ′ ( x ) = 2 x f'(x)= 2x f(x)=2x
导数的表达形式
因为h是相对x的变化量,而 f ( x + h ) − f ( x ) f(x+h)-f(x) f(x+h)f(x)只差表示结果的变化量,所以导数就有了更为简洁的表示方法
f ′ ( x ) = lim ⁡ Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x = lim ⁡ Δ x → 0 Δ y Δ x = d y d x f'(x)=\lim\limits_{\Delta x\to 0}\frac{f(x+\Delta x)-f(x)}{\Delta x}=\lim\limits_{\Delta x\to 0}\frac{\Delta y}{\Delta x}=\frac{dy}{dx} f(x)=Δx0limΔxf(x+Δx)f(x)=Δx0limΔxΔy=dxdy
何时导数不存在?
当曲线上某个点的左侧斜率和右侧斜率不相等时,该点的导数就不存在;连续的函数不一定可导,但可导的函数必连续(可证明)

4 切线法(牛顿迭代法)

牛顿迭代法是一种一般情况下具有二阶收敛速度的非线性方程的数值解法,具体做法:
在这里插入图片描述

设x是方程 f ( x ) = 0 f(x)=0 f(x)=0的根,而x0是x附近的一个值,过 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0)) f ( x ) f(x) f(x)的切线,斜线方程为 y = k x + b y=kx+b y=kx+b,而 k = f ′ ( x 0 ) k=f'(x_0) k=f(x0), 则 b = f ( x 0 ) − f ′ ( x 0 ) ∗ x 0 b=f(x_0)-f'(x_0)*x_0 b=f(x0)f(x0)x0, 将其代入斜线方程, 得到切线方程为:
y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) y=f(x_0)+f'(x_0)(x-x_0) y=f(x0)+f(x0)(xx0)
而切线方程与x轴的交点为x1,因此根据切线方程可求得x1:
f ( x 0 ) + f ′ ( x 0 ) ( x 1 − x 0 ) = 0 ⇒ x 1 = f ′ ( x 0 ) x 0 − f ( x 0 ) f ′ ( x 0 ) = x 0 − f ( x 0 ) f ′ ( x 0 ) f(x_0)+f'(x_0)(x1-x_0)=0\Rightarrow x1=\frac{f'(x_0)x_0-f(x_0)}{f'(x_0)}=x_0-\frac{f(x_0)}{f'(x_0)} f(x0)+f(x0)(x1x0)=0x1=f(x0)f(x0)x0f(x0)=x0f(x0)f(x0)
如果曲线在x附近保持上升且收敛,不难看到x1比x0更接近方程f(x)真实的根x,如果继续在 ( x 1 , f ( x 1 ) (x_1,f(x_1) (x1,f(x1)上作一条切线,那么该切线方程与x轴的交点x2将越加接近x*,因此可以预计在k次迭代后,xk将非常接近真实的根值x*,迭代公式如下:
x k + 1 = x k − f ( x k ) f ′ ( x k ) x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)} xk+1=xkf(xk)f(xk)
具体实例:求一个数的平方根, x 2 = y 0 x^2=y0 x2=y0,那么方程为 f ( x ) = x 2 − y 0 f(x)=x^2-y0 f(x)=x2y0,迭代公式如下
x n + 1 = = x n − x n 2 − y 0 2 x n = ( x n + y 0 / x n ) / 2 x_{n+1}==x_n-\frac{x_n^2-y_0}{2x_n}={(x_n+y_0/x_n)/2} xn+1==xn2xnxn2y0=(xn+y0/xn)/2
迭代循环使用该公式,求得近似与y0的根的值,代码实现:

def mySqrt(y)
    # 求y的平方根
    r = y  # r初始值为y
    while r * r > y:
        r = (r + y / r) / 2
    return r

mySqrt(10) # 3.162277660168379
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值