寻找近似系数

Finding coefficients for approximations

出于对数学的好奇心,我只想近似计算任何数字,纯粹是根据 e。

示例:如果我给出 n=7.3890,程序必须 return a=1,b=0,这是所有整数对 (a,b) 的最佳近似值(最小误差)

from math import *
n=float(input("Enter a number to be approximated:"))
for a in range(10):
    for b in range(10):
            if ((e**2)*a)+(e*b)==n:
                print(a,b)

此程序无法执行此操作,因为它搜索的是精确值而不是近似值

前提:以下解决方案找到整数(近似)系数。

使代码更高效的一种简单方法是使用 vectorization(使用 numpy 库)计算所有索引组合的多项式,然后 return 组合多项式值更接近 n.

的指数

以下代码使用 np.meshgrid, then computes the polynomial on all combinations and computes the positions of the combination making the polynomial closer to n using np.argmin 创建所有整数 ab 组合的网格。最后,它 return 是组合的 ab 值。

import numpy as np

def find_approximate_integer_coefficients(n, x, amin=-10, amax=10, bmin=-10, bmax=10):
    a_range = np.arange(amin, amax+1)
    b_range = np.arange(bmin, bmax+1)

    a_coefficients, b_coefficients = np.meshgrid(a_range, b_range)
    polynomial_value = (a_coefficients * (x ** 2) + b_coefficients * x)

    argmin = np.abs(polynomial_value - n).argmin()
    return a_coefficients.flatten()[argmin], b_coefficients.flatten()[argmin]

例如,find_approximate_integer_coefficients(7.3890, np.e) returns (1, 0) 在我的笔记本电脑上大约需要 75 微秒。

您可以轻松地将上面的代码扩展到 higher-order 多项式的情况,因为 np.meshgrid 方法接受任意数量的范围来创建网格。