gpt4 book ai didi

python - 如何使用 scipy.optimize.minimize 修复推导条件的拟合

转载 作者:太空宇宙 更新时间:2023-11-03 21:15:41 25 4
gpt4 key购买 nike

我试图拟合函数cav=p(T,x),条件是cavx之后的推导为常数 T 始终为正 dp/dx(对于常数 T)> 0xTp的数据来自Excel表格。 z 是我想要获取的系数。

我使用了这里的解决方案 Fitting with constraints on derivative Python作为模板。这是我现在的代码,并提供错误消息:

import pandas as pd
import os
from scipy.optimize import minimize
import numpy as np

df = pd.read_excel(os.path.join(os.path.dirname(__file__), "./data.xlsx"))

T = np.array(df['T'], dtype=float)
x = np.array(df['x'], dtype=float)
p = np.array(df['p'], dtype=float)
p_s = 67

def cav(z,T,x): #my function
return x * p_s + x * (1 - x) * (z[0] + z[1] * T + z[2] * T ** 2 + z[3] * x + z[4] * x * T + z[5] * x * T ** 2) * p_s

def resid(p,T,x):
return ((p-cav(T,x))**2).sum()

def constr(z):
return np.gradient(cav(z,x,T))

con1 = {'type': 'ineq', 'fun': constr}

z0 = np.array([0,0,0,0,0,0], dtype=float)
res = minimize(resid,z0, args=(p,T,x), method='cobyla',options={'maxiter':50000}, constraints=con1)

错误:

TypeError: resid() takes 3 positional arguments but 4 were given

我不明白我到底需要输入什么作为这三个 def 的参数。感谢您的帮助!

最佳答案

该错误是因为除了初始猜测 z0 之外,您还向 resid 传递了 3 个参数。

因此,必须更改的行是:

res = minimize(resid,z0, args=(T,x), method='cobyla',options={'maxiter':50000}, constraints=con1)

代码中的另一个问题是:

def resid(p,T,x):
return ((p-cav(T,x))**2).sum()

您的方法cav采用三个参数,但您只传递了两个。所以这可能应该改为:

def resid(p,T,x):
return ((p-cav(p,T,x))**2).sum()

关于python - 如何使用 scipy.optimize.minimize 修复推导条件的拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54734167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com