Python& SciPy - 使用fsolve和COM连接

时间:2015-06-24 02:33:19

标签: python com scipy

我正在尝试使用scipy Optimize fsolve函数来查找使用COM对象定义的函数的零。

首先,我创建了COM对象:

import win32com.client
os = win32com.client.Dispatch("PX32.OpenServer.1")

此COM对象作为程序的接口,我使用setvaluedocommandgetvalue方法/函数输入变量,然后进行计算并获得结果。 / p>

如果我定义了一个函数:

def fn(x):
    os.setvalue("INPUT_VAR_STRING", x)
    os.docommand("COMMAND_STRING")
    return float(os.getvalue("RESULT_STRING"))

通过更改输入值(传递到fnx),我得到不同的输出值:

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!

这是什么意思?我怎样才能尝试解决出现的错误?

1 个答案:

答案 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))以获得预期的结果。