繁体   English   中英

Python和SciPy-将fsolve与COM连接一起使用

[英]Python & SciPy - use fsolve with COM connection

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

首先,我创建COM对象:

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

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

如果我定义一个像这样的函数:

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

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

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!

这是什么意思? 如何解决已出现的错误?

我发现了问题。 根据http://kitchingroup.cheme.cmu.edu/pycse/pycse.html

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM