寻找近似系数

问题描述

出于数学好奇心,我只想纯粹根据e来近似任意数字。

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

it('Should check if #addItem button no longer exists',() => {
         component.addItem();    //  click on the button
         fixture.detectChanges()
         expect(component.addMode).toBeTruthy();
    });

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

解决方法

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

提高代码效率的一种简单方法是使用vectorization(使用numpy库)对所有索引组合计算多项式,然后返回其值等于多项式更接近n的值。

以下代码使用np.meshgrid创建所有整数ab组合的网格,然后计算所有组合的多项式并计算组合的位置,使多项式更接近n使用np.argmin。最后,它返回组合的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)在笔记本电脑上大约75微秒内返回(1,0)

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