python实现之极限

“极限”是数学中的分支——微积分的基础概念,广义的“极限”是指“无限靠近而永远不能到达”的意思。数学中的“极限”指:某一个函数中的某一个变量,此变量在变大(或者变小)的永远变化的过程中,逐渐向某一个确定的数值A不断地逼近而“永远不能够重合到A”(“永远不能够等于A,但是取等于A‘已经足够取得高精度计算结果)的过程中,此变量的变化,被人为规定为“永远靠近而不停止”、其有一个“不断地极为靠近A点的趋势”。极限是一种“变化状态”的描述。此变量永远趋近的值A叫做“极限值”(当然也可以用其他符号表示)。

设{ xn }为一数列. 若有常数 a,对任意给定的正数 ε (无论它有多小),总存在正整数 N, 使当 n > N 时,不等式 | xn- a | < ε 恒成立, 则称 a 是数列{ xn} 的极限或称 { xn } 收敛于 a , 记为

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#                     _ooOoo_
#                   o8888888o
#                    88" . "88
#                 ( | -  _  - | )
#                     O\ = /O
#                 ____/`---'\____
#                  .' \\| |// `.
#                 / \\|||:|||// \
#               / _|||||-:- |||||- \
#                | | \\\ - /// | |
#              | \_| ''\---/'' | _/ |
#               \ .-\__ `-` ___/-. /
#            ___`. .' /--.--\ `. . __
#         ."" '< `.___\_<|>_/___.' >'"".
#       | | : `- \`.;`\  _ /`;.`/ - ` : | |
#          \ \ `-. \_ __\ /__ _/ .-` / /
#      ==`-.____`-.___\_____/___.-`____.-'==
#                     `=---='
'''
@Project :pythonalgorithms 
@File :limit.py
@Author :不胜人生一场醉@Date :2021/7/30 0:20 
'''
#一尺之棰,日取其半,万世不竭。
import matplotlib.pyplot as plt
import numpy as np
import math

# 求(n+(-1)**(n-1))/n数列极限
def limit2(n):
   return (n+math.pow(-1,(n-1)))/n

def limit3(n):
   return math.cos(n*math.pi/2)/n

# 设{ xn }为一数列. 若有常数a,对任意给定的正数ε(无论它有多小),总存在正整数 N,
# 使当n > N时,不等式|xn-a|<ε恒成立, 则称a是数列{xn}的极限或称 {xn}收敛于a,记为limitxn=a
if __name__=='__main__':
   #halfn()
   for i in range(10):
      print(getpi(i))
   for i in range(1,10):
      print('n={},result={}'.format(i,limit2(i)))
   for i in range(1,10):
      print('n={},result={}'.format(i,limit3(i)))
   print(limit2(1000))
   # 0.999
   print(limit3(1000))
   # 0.001

运行结果如下:

3.0
3.105828541230249
3.1326286132812378
3.1393502030468667
3.14103195089051
3.1414524722854624
3.141557607911858
3.1415838921483186
3.1415904632280505
3.1415921059992717
n=1,result=2.0
n=2,result=0.5
n=3,result=1.3333333333333333
n=4,result=0.75
n=5,result=1.2
n=6,result=0.8333333333333334
n=7,result=1.1428571428571428
n=8,result=0.875
n=9,result=1.1111111111111112
n=1,result=6.123233995736766e-17
n=2,result=-0.5
n=3,result=-6.123233995736766e-17
n=4,result=0.25
n=5,result=6.123233995736766e-17
n=6,result=-0.16666666666666666
n=7,result=-6.123233995736766e-17
n=8,result=0.125
n=9,result=6.123233995736766e-17
0.999
0.001

Process finished with exit code 0
def halfn():
   # 构造 x数组[1 2 3 4 5 6 7 8 9]
   x=np.arange(1,10,1)
   # 构造 所余杖棰长度组成数列[0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125  0.00390625 0.00195312]
   y=1/np.power(2,x)
   # 构造累加数组[0.5 0.75 0.875 0.9375 0.96875 0.984375 0.9921875 0.99609375 0.99804688]
   z=np.cumsum(y)
   # 获取所余杖棰长度组成数列累计值,最后值=z 0.998046875
   o=sum(y)
   plt.figure(figsize=(10, 4))
   ax = plt.gca()  # 通过gca:get current axis得到当前轴
   plt.rcParams['font.sans-serif'] = ['SimHei']  # 绘图中文
   plt.rcParams['axes.unicode_minus'] = False  # 绘图负号
   label = 'y=1/np.power(2,x)'
   plt.plot(x, y, label=label)
   label = '∑(1/np.power(2,x))'
   plt.plot(x, z, label=label)
   # 设置图片的右边框和上边框为不显示
   ax.spines['right'].set_color('none')
   ax.spines['top'].set_color('none')
   # 添加横轴作为极限值
   plt.hlines(1, 0, 10, colors="c", linestyles="dashed")
   # 挪动x,y轴的位置,也就是图片下边框和左边框的位置
   # data表示通过值来设置x轴的位置,将x轴绑定在y=0的位置
   ax.spines['bottom'].set_position(('data', 0))
   # axes表示以百分比的形式设置轴的位置,即将y轴绑定在x轴50%的位置
   # ax.spines['left'].set_position(('axes', 0.5))
   ax.spines['left'].set_position(('data', 0))
   plt.title("一尺之棰,日取其半,万世不竭")
   plt.legend(loc='upper right')
   plt.show()



# 从内接正6边形,依次切分为12、24、48、96边形
# 内接正6边形,△ABC为正三角形,∠O=60%
# 圆形的半径为r,则AO=OB=BA=r
# AP=AB/2=r/2
# OP=g=SQR(r**2-AP**2)
# PC=j=r-OP
# AC=m=SQR(AP**2+PC**2)
# AC=SQR((r/2)**2+(r-OP)**2)
# AC=SQR((r/2)**2+(r-SQR(r**2-AP**2))**2)
# AC=SQR((r/2)**2+(r-SQR(r**2-(r/2)**2))**2)
#
# AD=AC/2
def getpi(n):
   ## 假设边长为1
   def getnewsidelength(x):  ## 由当前边长,求割后边长
      h = 1 - math.sqrt(1 - (x / 2) ** 2)
      #print('x={} ,h={}, a={}'.format(x,h,a))
      return math.sqrt(h ** 2 + (x / 2) ** 2)

   a = 1  ## 初始边长
   k = 6  ## 初始边数
   for i in range(n):
      a = getnewsidelength(a)
      k *= 2
   return a * k / 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python与大数据分析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值