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