【学习笔记】牛顿迭代法求立方根 您所在的位置:网站首页 1-x的立方根 【学习笔记】牛顿迭代法求立方根

【学习笔记】牛顿迭代法求立方根

2023-08-26 07:01| 来源: 网络整理| 查看: 265

【学习笔记】牛顿迭代法求立方根 简介

介绍使用牛顿迭代法求立方根 x 3 {\sqrt[3]{x}} 3x ​的C语言实现和公式的推导。

代码 float CubeRoot(float num) { float x = num; float error = 1e-5; while (fabs(num - (x * x * x)) >= error) { x = (2 * x + num / (x * x)) / 3.0; } return x; }

代码很简单,就是使用牛顿迭代法计算,然后判断是否达到想要的精度,达到精度后退出。

这里精度设置是0.00001,可以根据自己实际情况调整。

公式推导

这里说明代码x = (2 * x + num / (x * x)) / 3.0;是如何得到的。

牛顿迭代法公式如下。

x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} xn+1​=xn​−f′(xn​)f(xn​)​

我们计算立方根的公式:

y = x 3 = x 1 3 y = {\sqrt[3]{x}} = x^{\frac 13} y=3x ​=x31​

所以

y 3 = x {{y}^3} = x y3=x

构建以y为自变量的函数方程为

f ( y ) = y 3 − x = 0 f(y) = {{y}^3} - x = 0 f(y)=y3−x=0

f ′ ( y ) = 3 y 2 = 0 f'(y) = {3}{y^2} = 0 f′(y)=3y2=0

将 f ( y ) f(y) f(y)和 f ′ ( y ) f'(y) f′(y)带入

y − f ( y ) f ′ ( y ) = y − y 3 − x 3 y 2 y - \frac{f(y)}{f'(y)} = y - \frac{{{y}^{3}} - x}{{3}{y^2}} y−f′(y)f(y)​=y−3y2y3−x​

​ = 1 3 ( 2 y + x y 2 ) = \frac{1}{3}{(2y + \frac{x}{y^2})} =31​(2y+y2x​)

所以

y n + 1 = 1 3 ( 2 y n + x y n 2 ) y_{n+1} = \frac{1}{3}{(2y_n + \frac{x}{y_n^2})} yn+1​=31​(2yn​+yn2​x​) = ( 2 y n + x ÷ y n 2 ) ÷ 3 (2{y_n} + {x}÷{y_n^2})÷3 (2yn​+x÷yn2​)÷3

实际计算,设 x = 2 x = 2 x=2, y 1 = 2 y_1 = 2 y1​=2

y 2 = ( 2 × 2 + 2 ÷ 2 2 ) ÷ 3 = 1.5 y_2 = (2 × 2 + 2 ÷ 2^2) ÷ 3 = 1.5 y2​=(2×2+2÷22)÷3=1.5

y 3 = ( 2 × 1.5 + 2 ÷ 1. 5 2 ) ÷ 3 = 1.296296 y_3 = (2 × 1.5 + 2 ÷ 1.5^2) ÷ 3 = 1.296296 y3​=(2×1.5+2÷1.52)÷3=1.296296

y 4 = ( 2 × 1.296296 + 2 ÷ 1.29629 6 2 ) ÷ 3 = 1.260932 y_4 = (2 × 1.296296 + 2 ÷ 1.296296^2) ÷ 3 = 1.260932 y4​=(2×1.296296+2÷1.2962962)÷3=1.260932

y 5 = ( 2 × 1.260932 + 2 ÷ 1.26093 2 2 ) ÷ 3 = 1.259922 y_5 = (2 × 1.260932 + 2 ÷ 1.260932^2) ÷ 3 = 1.259922 y5​=(2×1.260932+2÷1.2609322)÷3=1.259922

经过多次迭代,计算出来的结果 2 3 ≈ 1.259922 {\sqrt[3]{2}} \approx 1.259922 32 ​≈1.259922。

本文链接:https://blog.csdn.net/u012028275/article/details/113822412



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有