Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 寻找近似系数_Python_Variables_Approximation - Fatal编程技术网

Python 寻找近似系数

Python 寻找近似系数,python,variables,approximation,Python,Variables,Approximation,出于数学上的好奇心,我只想用e来近似任何数字 示例:如果我给出n=7.3890,程序必须返回a=1,b=0,这是所有整数对(a,b)的最佳近似值(最小误差) 此程序无法执行此操作,因为它搜索的是精确值,而不是近似值。前提是:以下解决方案查找整数(近似)系数 提高代码效率的一个简单方法是使用(使用numpy库)计算所有索引组合上的多项式,然后返回多项式值更接近n值的索引组合 以下代码使用创建所有整数a和b组合的网格,然后使用计算所有组合上的多项式,并计算组合的位置,使多项式更接近n。最后,它返回组

出于数学上的好奇心,我只想用e来近似任何数字

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


此程序无法执行此操作,因为它搜索的是精确值,而不是近似值。前提是:以下解决方案查找整数(近似)系数

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

以下代码使用创建所有整数
a
b
组合的网格,然后使用计算所有组合上的多项式,并计算组合的位置,使多项式更接近
n
。最后,它返回组合的
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]
例如,
find\u approximate\u integer\u coverties(7.3890,np.e)
在我的笔记本电脑上大约75微秒内返回
(1,0)


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

您的方法有点幼稚?所以你想找到[0,10]中所有的实数a,b,c,对于给定的x,n,ax^2+bx+c=n?它们可能有很多!或者你想让它做什么?我想把它推广到x的高次幂。我们没有对它们的判别式,是吗?你想找到所有的解吗(这是不可能的)或者任何解决方案?在后一种情况下,选择任意a和b,c=x-ax^2-bx。除非您必须在问题中提及其他约束。没有任何附加约束,最简单的解决方案是将
a
b
设置为零,将
c
设置为
n
,无论
x的值如何,这些约束始终保持不变
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]