为了账号安全,请及时绑定邮箱和手机立即绑定

寻找近似系数

寻找近似系数

至尊宝的传说 2023-06-13 14:42:46
出于对数学的好奇心,我只想近似于任何数字,纯粹是根据 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)该程序无法这样做,因为它搜索的是精确值而不是近似值
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

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

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

下面的代码创建一个包含所有整数ab组合的网格,使用np.meshgrid,然后计算所有组合的多项式,并计算组合的位置,使多项式更接近于n使用np.argmin。最后,它返回组合的a和值。b

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]

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


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


查看完整回答
反对 回复 2023-06-13
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信