[英]Python & SciPy - use fsolve with COM connection
我正在嘗試使用scipy Optimize fsolve
函數來查找使用COM對象定義的函數的零。
首先,我創建COM對象:
import win32com.client
os = win32com.client.Dispatch("PX32.OpenServer.1")
這個COM對象用作程序的接口,在這里我使用setvalue
, docommand
和getvalue
方法/函數輸入變量,然后進行計算並獲得結果。
如果我定義一個像這樣的函數:
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.