我试图用mpmath
中的findroot
找到一个有很多参数的函数的根,但在这个问题上,我将使用一个简单的函数
from mpmath import mp
def func(x, **parameters):
return parameters["a"]*x*x + 1
solution = mp.findroot(f = func, x0 = 0.955j, solver = 'muller', **kwargs = (a = 1))
输出:
SyntaxError: invalid syntax
代码中的func
函数在给定$a$值的情况下,以$x$值返回$f(x)=ax^2+1$。例如,$a=1$f(1)$的值是2。为了找到$f$的根,我使用了findroot
。由于我的函数有参数,我需要在findroot
中使用**kwargs。然而,我正在努力使用它。我不断地遇到语法错误
语法错误
语法错误出现在分配
**kwargs =
中。变量kwargs
是一个字典,并且**
解压该字典。表达式**kwargs = (a = 1)
本质上是试图解包一个字典,同时还将该字典赋值给另一个变量赋值关键字参数
函数的
**kwargs
参数允许您传递任意数量的附加关键字参数。参数a=1
是一个关键字参数。kwargs
本身是要“打包在一起”的关键字参数的集合快速演示:
实际问题
查看文档,似乎解算器可以接受您传递的任何内容。换句话说,
kwargs
不会传递给函数,func
,它们会传递给求解器,'muller'
就我所知,{}所使用的文档和
kwargs
根本没有解释,所以我不知道它对其关键字参数做了什么,但问题是kwargs
并没有像您所期望的那样被传递给您的函数不幸的是,如果您希望函数
func
是一个动态多项式,它可以接受参数参数,那么您需要对它做更多的工作解决方案
以下是您可以做的:
然后你会做:
您可以通过以下方式来实现
function_builder()
,即返回一个新的函数对象,它只是x
的函数。然后,当你想找到一个特定多项式的根时,你可以用你想要的任何参数调用function_builder()
,它将返回你想要的函数,然后mp.findroot
可以使用它注释
下面是一个如何实现通用二次方程生成器的示例:
当然,对于像二次方程这样的特殊情况,最好显式调用关键字参数:
然后你可以把系数的“集合”打包在一起:
等等
相关问题 更多 >
编程相关推荐