专栏
标签
mworks.TyOptimization工具箱无法传入python的function类型
一般问题
发布于 2025-03-14 08:47:24
查看 17过去472天

代码:
import numpy as np
from mworks.TyOptimization import fsolve
def eqns(var):
x1 = var[0]
x2 = var[1]
eqn1 = x12 + x1*x2 + np.exp(x1-x2)
eqn2 = x1 - x2
x1*x2
return [eqn2,eqn2]
x0 = [0,0]
print(fsolve(eqns,x=x0))
报错:
Traceback (most recent call last):
File "d:/临时草稿文件夹/mworks代码/Untitled-1.py", line 9, in
print(fsolve(eqns,[1,1]))
File "C:\Users\Public\TongYuan.julia\miniforge3\Lib\site-packages\tyjuliasetup\jv.py", line 43, in call
return jl_invoke(self, args, kwargs)
RuntimeError: unbox failed: cannot convert a Python object (type: Py(<class 'function'>)) to julia value.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] reasonable_unbox(py::TyPython.CPython.Py)
@ Main.TyJuliaSetup none:182
[3] jl_call(self::TyPython.CPython.Py, args::TyPython.CPython.Py, kwargs::TyPython.CPython.Py)
@ Main.TyJuliaSetup none:274
[4] jl_call(self::Ptr{TyPython.CPython.PyObject}, _vectorargs::Ptr{TyPython.C.Ptr{TyPython.CPython.PyObject}}, argc::Int64)
@ Main.TyJuliaSetup C:\Users\Public\TongYuan.julia\packages\TyPython\8Xwv9\src\CPython.Dev.jl:101
[5] jl_call(self::Ptr{TyPython.CPython.PyObject}, _vectorargs::Ptr{TyPython.C.Ptr{TyPython.CPython.PyObject}}, argc::Int64)
@ Main.TyJuliaSetup C:\Users\Public\TongYuan.julia\packages\TyPython\8Xwv9\src\CPython.Dev.jl:122
(base) PS D:\临时草稿文件夹\mworks代码> & C:/Users/Public/TongYuan/.julia/miniforge3/python.exe d:/临时草稿文件夹/mworks代码/Untitled-1.py
Traceback (most recent call last):
File "d:/临时草稿文件夹/mworks代码/Untitled-1.py", line 10, in
print(fsolve(eqns,x=x0))
File "C:\Users\Public\TongYuan.julia\miniforge3\Lib\site-packages\tyjuliasetup\jv.py", line 43, in call
return jl_invoke(self, args, kwargs)
RuntimeError: unbox failed: cannot convert a Python object (type: Py(<class 'function'>)) to julia value.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] reasonable_unbox(py::TyPython.CPython.Py)
@ Main.TyJuliaSetup none:182
[3] jl_call(self::TyPython.CPython.Py, args::TyPython.CPython.Py, kwargs::TyPython.CPython.Py)
@ Main.TyJuliaSetup none:274
[4] jl_call(self::Ptr{TyPython.CPython.PyObject}, _vectorargs::Ptr{TyPython.C.Ptr{TyPython.CPython.PyObject}}, argc::Int64)
@ Main.TyJuliaSetup C:\Users\Public\TongYuan.julia\packages\TyPython\8Xwv9\src\CPython.Dev.jl:101
[5] jl_call(self::Ptr{TyPython.CPython.PyObject}, _vectorargs::Ptr{TyPython.C.Ptr{TyPython.CPython.PyObject}}, argc::Int64)
@ Main.TyJuliaSetup C:\Users\Public\TongYuan.julia\packages\TyPython\8Xwv9\src\CPython.Dev.jl:122

所属专栏:工具箱
产品信息:函数库-优化工具箱
科学计算

全部回答 1

发布于 2025-03-14 10:05:13

您好,问题原因为:TyOptimization.fsolve暂不支持Python定义函数作为输入。您可尝试使用纯Julia代码实现类似功能。

using TyOptimization

function eqns(var)
    x1, x2 = var
    [x1^2 + x1*x2 + exp(x1 - x2), x1 - x1*x2^2]
end

x0 = [0.0, 0.0]
TyOptimization.fsolve(eqns, x0)
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天