猿问

寻找近似系数

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


示例:如果我给出 n=7.3890,程序必须返回 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)

该程序无法这样做,因为它搜索的是精确值而不是近似值


至尊宝的传说
浏览 97回答 1
1回答

白衣非少年

前提:以下解决方案找到整数(近似)系数。使代码更高效的一种简单方法是使用向量化(使用numpy库)计算所有索引组合的多项式,然后返回多项式值更接近 的值的索引组合n。下面的代码创建一个包含所有整数a和b组合的网格,使用np.meshgrid,然后计算所有组合的多项式,并计算组合的位置,使多项式更接近于n使用np.argmin。最后,它返回组合的a和值。bimport numpy as npdef 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]例如,在我的笔记本电脑上大约 75 微秒后find_approximate_integer_coefficients(7.3890, np.e)返回。(1, 0)您可以轻松地将上面的代码扩展到高阶多项式的情况,因为该np.meshgrid方法接受任意数量的范围来创建网格。
随时随地看视频慕课网APP

相关分类

Python
我要回答