首页 > 编程语言 >python不用库求解根号N

python不用库求解根号N

时间:2022-09-02 11:47:38浏览次数:50  
标签:right frac err 求解 python mid x0 根号 left

问题描述

我们需要在不使用库的情况下求解\(\sqrt{n}\)。

方法一:二分法

令\(y=\sqrt{x}\),问题转换为求得y,使得\(y^{2}-x=0, (x>=0)\)。我们令\(f(y)=y^{2}-x\)。注意到:

\[f(0)-x<=0 \]

\[f(x+1)=(x+1)^{2}-x=(x+\frac{1}{2})^{2}+\frac{7}{4}>0 \]

我们可以在区间\((0,x+1)\)上必可以得到一个解\(y_{0}\),使得\(y_{0}^{2}-x=0\)。
代码如下:

def cal(x, err):
    """
    y = x**(1/2)
    y**2-x=0
    f(y)=y**2-x
    f(0)=-x小于等于0
    f(x+1)=(x+1)**2-x=x**2+2x+2-x=x**2+x+2=(x+1/2)**2+7/4>0
    """
    left = 0
    right = x + 1
    mid = left
    while abs(right - left) > err:
        mid = (left + right) / 2
        y = mid * mid - x
        if y > 0:
            right = mid
        else:
            left = mid
    print(mid)
    return mid
cal(4, 1e-6)
# 2.0000000000436557

方法二:使用泰勒公式

记\(f(y)=y_{2}-x\),根据泰勒公式展开到一阶:

\[f(y)=f(y_{0})+f^{'}(y_{0})(y-y_{0}) \]

令\(f(y)=0\)继而可以求得:

\[y=y_{0}-\frac{f_{y_{0}}}{f^{'}(y_{0})} \]

假设\(y_{1}=y\),那么会发现\(y_{1}\)会比\(y_{0}\)更接近于最终答案,因此,我们可以通过以下递推公式求解:

\[y_{n+1} = y_{n}-\frac{f(y_{n})}{f^{'}(y_{n})} \]

代码如下:

def cal2(x):
    """
    f(x)=f(x0)+f'(x0)(x-x0)+(f''(x0)(x-x0)**2/2!)+......+err
    """
    y = 1
    for i in range(100):
        y = y - (y * y - x) / (y * 2)
    print(y)
    return y

cal2(4)
# 2.0

标签:right,frac,err,求解,python,mid,x0,根号,left
From: https://www.cnblogs.com/xiximayou/p/16649268.html

相关文章

  • python数据分析-List(上)
    列表(list)作为python最基础也是最重要的数据类型之一,在python数据分析以及其他用途中有着重要的作用。 在此,将通过两篇文章来对List做一个相对系统的介绍,希望下述内容能......
  • Flet-基于Flutter的Python跨平台开发框架
    什么是FletFlet是一个框架,允许用你喜欢的语言构建交互式多用户Web,桌面和移动应用程序,而无需拥有前端开发的经验。主要特点在几分钟内从想法到应用程序为您的团队,周末项......
  • Python风格规范(转载)
    Python风格规范(转载)https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/#我觉得任何一个初学者都应该好好的研读,......
  • python的类方法中下划线表示含义
    __foo__: 定义的是特殊方法,一般是系统定义名字,如__init__() 之类的。_foo: 以单下划线开头的表示的是protected类型的变量,即保护类型只能允许其本身与子类进行访问......
  • python logger模块
    1、logging模块简介logging模块事python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。Logger从来不直接实例化,经常通......
  • 使用 CerealBox 将 AWS DynamoDB JSON 序列化为 Python dict
    使用CerealBox将AWSDynamoDBJSON序列化为Pythondict在这里,我们讨论了一个快速演练和参考代码,用于为您的下一个AWS应用程序简化DynamoDBJSON序列化过程。绒......
  • 使用 Python 进行 A/B 测试应用程序
    使用Python进行A/B测试应用程序https://www.reliablesoft.net/ab-testing-principles-optimize-your-marketing-and-skyrocket-conversions/什么是A/B测试?A/B......
  • 使用 Python 保存和显示计算历史
    使用Python保存和显示计算历史仅使用Python显示计算历史的一种非常流行且简单的方法编写一个简单的算术计算器很容易。但是编写一个可以保存和显示计算器历史的计算......
  • python读取PDF文件中的数据
    #-*-coding:utf-8-*-#模块的安装与导入由于pdfplumber和PyPDF2都属于第三方开源模块因此需要我们额外安装#安装pipinstallpdfplumber#pipinstallPyPDF2......
  • python学习Day58
    Day58今日内容概要昨日作业讲解django请求生命周期流程图路由层系统路由匹配(不同版本的django有一点的区别)反向解析无名有名反向解析路由分发名称空间今......