簡體   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