美文网首页
Sqrt函数可视化实现

Sqrt函数可视化实现

作者: b485c88ab697 | 来源:发表于2017-09-10 19:56 被阅读106次

练习:Sqrt函数可视化实现

本次练习主要是熟练numpy和matplotlib的使用,通过手写Sqrt的实现,通过可视化对比手写函数与系统自带函数之间区别。

主要实现思路是:牛顿法

下面简单介绍一下牛顿法:(参考博客参考知乎) 首先,有函数f(x) = x²,假设num是f(x)的近似值,那么num最接近f(x),就有f(x)-num=0,也就是x² - num = 0.

那么如果画图,就是要求g(x)=x² - num 与g(x)=0 的最近点。

极限公式:

假设m=2,那么就有:

最终得出以下图例:手写的sqrt函数与系统自带的基本没有区别

# -*- coding:utf-8 -*-
# /usr/bin/python

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import math


def func(a):
    if a < 1e-6: #小于0.000001,直接返回0
        return 0
    last = a
    c = a / 2     #该值一定程度上影响迭代次数
    while math.fabs(c - last) > 1e-6:#精度控制
        last = c
        c = (c + a/c) / 2
    return c


if __name__ == '__main__':
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False #保证win系统图片上的中文显示正常
    x = np.linspace(0, 30, num=50)  #0-30均分50份
    func_ = np.frompyfunc(func, 1, 1) #转换为ufunc函数方便使用
    y_h = func_(x)
    y_s = np.sqrt(x)#调用系统自带函数求值
    plt.figure(figsize=(10, 6), facecolor='w')#设置图大小和背景色
    plt.plot(x,y_h, 'ro-',label='手写', lw=2, markersize=6)#(画出x与y_h的曲线,用红色小圆圈标记(x,y)在图上的位置,
    #label下面legend函数要调用的,相当于注明这条曲线的意义,lw线宽2,小圆点6)
    plt.plot(x,y_s, 'b-',label='系统自带', lw=2, markersize=6)
    plt.grid(b=True, ls=':')#显示网格
    plt.legend(loc='lower right')#选取两条曲线的注明所在方位
    plt.xlabel('X', fontsize=16)#坐标轴上的内容及大小
    plt.ylabel('Y', fontsize=16)
    plt.title('牛顿法计算平方根', fontsize=18)
    plt.show()

关于分母的取值影响迭代次数的研究

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import math


def func(b):
    if b < 1e-6:
        return 0
    a = 1000
    last = a
    c = a / b
    count = 0
    while math.fabs(c - last) > 1e-6:
        last = c
        c = (c + a/c) / 2
        count = count + 1
    return count


if __name__ == '__main__':
    x = np.linspace(2, 500, num=100)
    func_ = np.frompyfunc(func, 1, 1)
    y = func_(x)
    print(x,y)
    
>>>[9 7 6 5 5 4 3 4 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7
 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9]

这里我们假定对1000开方,取出2-500之间的100个数,得到的结果是却是迭代次数从9最低降到3又升到9。

相关文章

  • Sqrt函数可视化实现

    练习:Sqrt函数可视化实现 本次练习主要是熟练numpy和matplotlib的使用,通过手写Sqrt的实现,通...

  • x的平方根

    描述实现 int sqrt(int x) 函数,计算并返回 x 的平方根。 样例sqrt(3) = 1 sqrt(...

  • Day37 x 的平方根

    实现 int sqrt(int x) 函数。 https://leetcode-cn.com/problems/s...

  • 13. 用循环和函数 实现Sqrt(x)

    利用前面学习的循环和函数,来实现 Sqrt(x)。并且与math.Sqrt(x)的结果做一下比较。这个很有意思,所...

  • 69. x的平方根

    文|Seraph 01 | 问题 实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x ...

  • java实现Math.sqrt函数

    难易程度:★★★ 重要性:★★★★★ 度小满金融的面试中出现过:自己实现Math.sqrt函数 扫描下方二维码,及...

  • 【SQRT】函数使用技巧

    Excel的SQRT函数主要是用来计算正平方根,本文介绍 Microsoft Excel中SQRT 函数的公式语法...

  • 69. x的平方根(Python)

    题目 难度:★★☆☆☆类型:数组 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x...

  • 【leetcode】x 的平方根

    【leetcode】x 的平方根 题目 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其...

  • LeetCode 每日一题 [29] x 的平方根

    LeetCode x 的平方根 [简单] 实现 int sqrt(int x) 函数 计算并返回 x 的平方根,其...

网友评论

      本文标题:Sqrt函数可视化实现

      本文链接:https://www.haomeiwen.com/subject/znytsxtx.html