我不知道如何或从哪里开始,我需要一些词汇或术语来进行研究,所以让我们向社区询问。
问题:我有一个值X,它是这个方程的最终答案。我有一系列的值,比方说10(a-J(,这些值将用于方程中。使用简单的计算(+,-,*,/,((,^(来形成一个方程,该方程使用A-J的部分或全部值来将方程求解为X值。
示例:A^2+B*C+(D+E+F+G(*J+30=X
输入:最终值X,方程中使用的值,方程中要使用的最大值数,这意味着我想在方程中至少使用Z个给定值(在示例中Z=8(
输出:用给定值求解的方程
例如,这可以转换成python脚本吗?这样计算有可能吗?描述这种计算的术语是什么?
如果我正确理解问题:
您正在寻找的算法输出一个数学函数,以及特定值,当应用于该函数时,为您提供任意值x的输入值x。
总的来说,我认为这是不可能的。从非确定性的角度来看,这可能是可能的,你可以尝试猜测值,但从算法或计算的角度来看这通常是不可行的。
-
让我们首先将函数限制为一个变量。找到一个给你一个值x的函数,对于某个值a,即f(a(=x,与要求f(a(-x=0是一样的。
-
将运算限制为+,-,*,我们看到f(a(是一个多项式。
-
以这种方式限制问题将解决方案与代数数和可构造数罗瓦理论。
-
可以找到给定输入值x的多项式IF,并且只有IF输入值x是代数的。你可以生成一个简单的算法,它取x的幂,直到x的幂是整数(或有理数(。
-
你可以生成一个简单的算法,它取x的无理部分的幂,直到x的幂是整数(或有理数(。请注意,即使在这种算法中,您也需要考虑某种测量误差,因为sqrt(2(=1.41421356237…对于无穷多的小数位数,计算机只能跟踪某些有限的小数位数。例如:
def sqrt(x):
return x**(1/2)
if __name__ == "__main__":
num = sqrt(2)
print(num)
print(num**2)
将输出:
1.4142135623730951
2.0000000000000004
- 所以这样一个简单算法的输出永远不会100%正确。人类有可能做到这一点,但计算机没有。你可能想研究符号计算领域,但即使是解决部分问题的算法也不容易转化为脚本
- 如果您可以100%不解决这个问题,您可能需要研究线性近似和非线性近似
即使没有测量错误,我认为这在一般情况下也是不可能的,原因是添加运算(^,/(可能不会产生多项式环。这是解决代数数相关问题的基础。
引入额外变量b、c,。。。。,n到f,使得f(a,b,c,…,n,…(=x也将限制什么函数将满足环的性质。
无论如何,这个问题是困难的,即使只考虑一个变量的多项式。在谷歌上用粗体搜索这些术语可能有助于进一步了解您的问题。很抱歉,如果其中一些对你来说已经很明显了,无论如何,我希望这会有所帮助!