首页 > 其他分享 >数学中的连分式、无穷连根式、平方根

数学中的连分式、无穷连根式、平方根

时间:2024-07-29 22:00:51浏览次数:13  
标签:根式 value current sqrt fraction 平方根 coefficients 分式

连分式

        连分式(continued fraction)由和与倒数的多层嵌套构成,可以是有限的,也可以是无限的。

表达式:a_{1} + \frac{1}{a_{2}+\frac{1}{a_{3}+\frac{1}{a_{n}+\frac{1}{...}}}}[a_{1};a_{2},a_{3},a_{n},...]

import math


def fraction_to_continued_fraction(numerator, denominator, max_terms):
    """
    计算一个分数的连分式表示。

    参数:
    numerator (int): 分数的分子。
    denominator (int): 分数的分母。
    max_terms (int): 连分式表示的最大项数。

    返回:
    list: 连分式的部分分母组成的列表。
    """
    coefficients = []
    current_numerator = numerator
    current_denominator = denominator

    while current_denominator != 0 and len(coefficients) < max_terms:
        quotient = current_numerator // current_denominator
        coefficients.append(quotient)
        remainder = current_numerator % current_denominator
        current_numerator, current_denominator = current_denominator, remainder

    return coefficients


def continued_fraction_to_decimal(coefficients):
    """
    将连分式转换为十进制表示的数字。

    参数:
    coefficients (list): 连分式的部分分母组成的列表。

    返回:
    float: 连分式对应的十进制数。
    """
    if not coefficients:
        return 0.0

    decimal_value = coefficients[-1]
    for coefficient in reversed(coefficients[:-1]):
        decimal_value = 1 / decimal_value + coefficient

    return decimal_value


def real_number_to_continued_fraction(x, error_tolerance, max_terms):
    """
    计算一个实数的连分式表示,考虑误差容忍度和最大项数。

    参数:
    x (float): 要表示的实数。
    error_tolerance (float): 允许的误差范围。
    max_terms (int): 连分式表示的最大项数。

    返回:
    list: 连分式的部分分母组成的列表。
    """
    coefficients = []
    integer_part = int(x)
    fractional_part = x - integer_part
    coefficients.append(integer_part)

    while fractional_part > error_tolerance and len(coefficients) < max_terms:
        reciprocal = 1 / fractional_part
        next_term = int(reciprocal)
        coefficients.append(next_term)
        fractional_part = reciprocal - next_term
        current_decimal = continued_fraction_to_decimal(coefficients)
        if abs(current_decimal - x) < error_tolerance:
            break

    return coefficients


if __name__ == '__main__':
    fraction_test = fraction_to_continued_fraction(105, 33, 10)
    print('该测试分数的连分式表示:', fraction_test)
    print('测试分数的分布式转十进制数为:', continued_fraction_to_decimal(fraction_test))

    # 计算小数3.1415926的连分式表示
    pi_value = 3.1415926  # 近似π值
    error_tolerance = 1e-5  # 误差容忍度
    max_terms = 10  # 连分式的最大项数

    pi_fraction_real = real_number_to_continued_fraction(pi_value, error_tolerance, max_terms)
    print("小数3.1415926的连分式表示:", pi_fraction_real)

该测试分数的连分式表示: [3, 5, 2]
测试分数的分布式转十进制数为: 3.1818181818181817
小数3.1415926的连分式表示: [3, 7, 15, 1] 

无穷连根式

  表达式:\sqrt{a_{1}+\sqrt{a_{2}+\sqrt{a_{3}+...}}} 

import math


def infinite_nested_radical_recursive(a, n):
    """
    递归计算无穷连根式的近似值。

    参数:
    a (float): 连根式中的常数。
    n (int): 递归深度,用于近似计算。

    返回:
    float: 无穷连根式的近似值。
    """
    if n == 1:
        return math.sqrt(a)
    return math.sqrt(a + infinite_nested_radical_recursive(a, n - 1))


# 示例:计算 a = 2 的无穷连根式近似值
a = 2
recursion_depth = 10
approximation_recursive = infinite_nested_radical_recursive(a, recursion_depth)
print(f"a = {a} 的无穷连根式近似值 (递归深度 {recursion_depth}): {approximation_recursive}")

 a = 2 的无穷连根式近似值 (递归深度 10): 1.9999976469034038

平方根

        可以使用巴比伦算法求数字的平方根。

        假设数字为x,步骤如下:

  1.  猜测y,作为\sqrt{x}的猜测值
  2. 计算z=x/y
  3. zy的平均值当作新的猜测值
  4. 重复步骤2和3,直到y^{2}-x足够小
import math


def babylonian_sqrt(value, initial_guess, tolerance):
    """
    使用巴比伦算法计算平方根的近似值。

    参数:
    value (float): 要求平方根的数。
    initial_guess (float): 初始猜测值。
    tolerance (float): 误差容忍度。

    返回:
    float: 近似的平方根值。
    """
    current_error = tolerance * 2  # 初始设置一个较大的误差值
    guess = initial_guess

    while current_error > tolerance:
        quotient = value / guess
        new_guess = (guess + quotient) / 2
        current_error = abs(new_guess**2 - value)
        guess = new_guess

    return guess


# 测试平方根计算
value_to_sqrt = 5
initial_guess = 1
tolerance = 1e-15

approx_sqrt = babylonian_sqrt(value_to_sqrt, initial_guess, tolerance)
print(f"使用巴比伦算法计算的 {value_to_sqrt} 的平方根近似值: {approx_sqrt}")
print(f"math.sqrt({value_to_sqrt}) 的结果: {math.sqrt(value_to_sqrt)}")

使用巴比伦算法计算的 5 的平方根近似值: 2.23606797749979
math.sqrt(5) 的结果: 2.23606797749979  

标签:根式,value,current,sqrt,fraction,平方根,coefficients,分式
From: https://blog.csdn.net/weixin_74254879/article/details/140781660

相关文章

  • 使用docker搭建ELK分式日志同步方案
    ELK作为业界最常用日志同步方案,我们今天尝试一下使用docker快速搭建一套ELK方案。ELK使用国内加速源拉取的镜像比较旧,有条件的朋友可以拉取官网的源。elasticsearch作为日志储存库(数据库),kibana的作用通过elasticsearch的API接口调取其中数据作可视化分析,logstash的作用就是将程序......
  • 69. x 的平方根(简单)
    69.x的平方根1.题目描述2.详细题解3.代码实现3.1Python方法一:逐个遍历方法二:二分查找3.2Java1.题目描述题目中转:69.x的平方根2.详细题解  不能使用系统内置的函数,寻找某个数(假定为x)的算术平方根,并返回算术平方根的整数部分,最直观的方法是从0依次......
  • 分式展开法妙解信号与系统中的复杂分式
    具体步骤如下:原始表达式:4+3......
  • Carmack的快速开平方根倒数算法(Fast inverse square root)
    基本原理需求\(y=\frac{1}{\sqrt{x}}\)\(log(a^b×a^c)=bloga+cloga=(b+c)loga\)32位浮点表示法:二进制的科学计数法符号位1+阶码8(有符号的反码表示幂指数)+小数位23(二进制小数首位必为1,默认,只需表示小数位即可)-20240511163945890.webp)字符串形式:\(S_0​E_1​E_2​...E_7......
  • 求平方根 TODO
    LCP69公式牛顿迭代法二分classSolution{public:intmySqrt(intx){//注意题目的意思就相当于对double下取整数//但我们不能用double,因为double精度不准确//sqrt(4)=2,但在double上可能是1.99999999....//使用整数时要避......
  • 【ZZULIOJ】1051: 平方根的和(Java)
    目录题目描述输入输出样例输入 Copy样例输出 Copycode题目描述数列的定义如下:数列的第一项为item,以后各项为前一项的平方根,求数列的前n项的和。输入由两个整数item(item<10000)和n(n<1000)组成,item和n的含义如前所述。输出输出该数列的和,占一行,要求精度保留2位......
  • 7-24 约分最简分式(PTA)
    题目:分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数......
  • 求平方根
    描述:实现函数intsqrt(intx)计算并返回x的平方根(向下取整)数据范围:\(0\lex\le2^{31}-1\),要求空间复杂度$o(1)\(,时间复杂度\)o(logx)$.示例1:输入:2返回值:1示例2:输入:2143195649返回值:46294思路:二分查找方法代码:classSolution:defsqrt(self,......
  • 【算法】求 x 的平方根
    leetcode链接题目描述给你一个非负整数x,计算并返回x的算术平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。注意:不允许使用任何内置指数函数和算符,例如pow(x,0.5)或者x**0.5。示例1:输入:x=4输出:2示例2:输入:x=8输出:2解释:8的......
  • 数学笔记(2)-根式及其运算
    调和平均\(\leq\)几何平均\(\leq\)算数平均>\(\leq\)平方平均\(\frac{2}{\frac{1}{a}+\frac{1}{b}}\leq\sqrt{ab}\leq\frac{a+b}{2}\leq\sqrt{\frac{a^2+b^2}{2}}\)\(\sqrt{\frac{ab+\frac{1}{2}(a^2+b^2)}{2}}=\frac{1}{2}\)根式,是数学的基本概......