我正在尝试使用scipy Optimize fsolve
函数来查找使用COM对象定义的函数的零。
首先,我创建了COM对象:
import win32com.client
os = win32com.client.Dispatch("PX32.OpenServer.1")
此COM对象作为程序的接口,我使用setvalue
,docommand
和getvalue
方法/函数输入变量,然后进行计算并获得结果。 / p>
如果我定义了一个函数:
def fn(x):
os.setvalue("INPUT_VAR_STRING", x)
os.docommand("COMMAND_STRING")
return float(os.getvalue("RESULT_STRING"))
通过更改输入值(传递到fn
到x
),我得到不同的输出值:
fn(100)
> 18.139818203
fn(190)
> -40.93182830
但是,如果我尝试使用fsolve
来查找fn
函数的根,我会收到错误:
from scipy.optimize import fsolve
fsolve(fn,150)
> TypeError
> (...)
> TypeError: Internal error - the buffer length is not the sequence length!
这是什么意思?我怎样才能尝试解决出现的错误?
答案 0 :(得分:1)
我发现了问题。根据{{3}},
12.11在Aspen中使用外部解算器 (...)
flashT = float(flashT) # COM objects do not understand numpy types
这是主要的事情。我不得不改变
os.setvalue("INPUT_VAR_STRING", x)
os.setvalue("INPUT_VAR_STRING", float(x))
以获得预期的结果。