sqrt函数自实现(牛顿迭代法)

sqrt函数实现(神奇的算法)写的狠好,但是对于牛顿迭代法的数学解释不是很清晰,我就研究了一下

  • 首先要说切线是曲线的线性逼近,怎么理解请看下图
    下图是 f(x)=x² 的图像
    在这里插入图片描述
    随便选一点A,做它对于f(x)的切线
    在这里插入图片描述
    在这里插入图片描述
    可以看出在点A附近,切线与f(x)非常接近
    因为切线是一条直线(也就是线性的),所以我们可以说,A点的切线是f(x)的线性逼近。离A点距离越近,这种逼近的效果也就越好,也就是说,切线与曲线之间的误差越小。所以我们可以说在A点附近“ 切线≈f(x) ”。

  • 牛顿迭代法:既然切线可以近似于曲线,就研究切线的根,来不断逼近曲线的根
    如果想研究任意曲线f(x)的切线的根如何逼近f(x)的根,请看这篇文章牛顿迭代法求平方根(通俗易懂版)

sqrt(a),就是求√a ,就是求 x²=a 的解,也就是 f(x)=x²-a=0 的根。让我们用切线的根来逼近f(x)的根。

  • 红色的点是f(x)的根
  • 先随便在f(x)上取一点(蓝点),横坐标为Xn,之后作这点关于f(x)的切线,切线交x轴于一点,横坐标为Xn+1
  • 在此交点作平行于y轴的直线,交于f(x)于(黄点),横坐标为Xn+1,这就是完成了一次迭代。发现Xn+1较Xn离红点更近
  • 按照上述步骤,再作切线,发现这次切线与x轴的交点离红点更更近,这个横坐标就是Xn+2
    在这里插入图片描述
  • 如何求Xn+1与Xn的关系呢?
    第一个蓝点的坐标为 (Xn,f(Xn)) ,该点的切线方程为 y-f(Xn)=f '(Xn)(x-Xn) ,
    切线与x轴的交点为,令y=0,也就是 f '(Xn)(x-Xn)+f(Xn)=0
    在这里插入图片描述
  • 之后就明白了,求出根号a的近似值:首先随便猜一个近似值x,然后不断令x等于x和a/x的平均数,迭代个六七次就很精确了。就是很神奇,第一个Xn的值,都可以随便猜的,不论是什么值,迭代六七次后就很准
float SqrtByNewton(float a)
{
	x=a/2 # Xn取a的一半,随便取的啦
    for i in range(10): # 时间复杂度O(n)
    	x=(x+a/x)/2
    return x
}
### 回答1: 你可以使用Matlab的plot函数绘制根号x函数的图像。以下是一个简单的示例代码: ``` x = 0:0.1:10; y = sqrt(x); plot(x,y) xlabel('x') ylabel('sqrt(x)') title('Square Root Function') ``` 这段代码将生成一个x轴范围从0到10的图像,y轴为根号x函数的值。你可以根据需要修改x轴范围和步长。 ### 回答2: Matlab根号x函数的图像是一条以原点为中心的增长曲线。当x小于0时,函数无定义,因此曲线只存在于非负数的区间。 当x接近0时,根号x的值较小,曲线斜率较大,所以在原点附近会有一个陡峭的上升段。随着x的增大,根号x的值也会增大,但增速逐渐减缓,所以曲线会逐渐平缓。 当x趋向无穷大时,根号x的值会不断趋近于无穷大,但增速会逐渐变缓,所以曲线最终会与x轴无限接近但不会触及。 图像上的点(x,根号x)表示对应x值的开方结果。曲线在x轴的正半轴上是递增的,这意味着根号x的值随着x的增大而增大。曲线的对称轴为y轴,即根号x在正半轴上的取值与在负半轴上的取值相同。 总体来说,Matlab根号x函数的图像是一条以原点为中心、递增且平缓的曲线,可以通过增大或减小x来控制曲线上的点的位置。 ### 回答3: 在MATLAB中,可以使用sqrt函数来计算平方根并绘制根号x的图像。首先,我们需要定义x的取值范围。假设我们想要绘制x在0到10之间的根号函数的图像,可以使用以下代码: ```matlab x = 0:0.1:10; % 定义x的取值范围,步长为0.1 y = sqrt(x); % 计算根号x的值 plot(x, y); % 绘制根号x的图像 xlabel('x'); % 设置x轴标签 ylabel('sqrt(x)'); % 设置y轴标签 title('Square Root of x'); % 设置图像标题 ``` 以上代码将生成一个根号x的图像,x轴表示输入变量x,y轴表示根号x的值。图像显示出根号函数曲线形状。我们可以通过更改x的取值范围或步长来调整图像的精度和细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值