gpt4 book ai didi

python - 数值求解非线性方程 - Python

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

我希望重现一篇研究文章的结果。

我现在必须找到以下等式 (w) 的最大值,以及相应的自变量值 (k)。 k 是我唯一的变量。

from sympy import *
import numpy as np
import math

rho_l = 1352;
rho_g= 1.225;
sigma = 0.029;
nu = 0.02;
Q = rho_g/ rho_l;
u = 99.67;
h = 1.6e-5; # Half sheet thickness

k = Symbol('k', real=True)
t = tanh(k*h);
w1 = -2 * nu * k**2 * t ;
w2 = 4* nu**2 * k**4 * t**2;
w3 = - Q**2 * u**2 * k**2;
w4 = -(t + Q)
w5 = (- Q* u**2 * k**2 + (sigma*k**3/ rho_l));
w6 = -w4;

w = ( w1 + sqrt(w2 + w3 + w4*w5))/w6;

我能够使用 Sympy - diff & solve 函数解决这个问题,只有当我给出 t = 1 或任何常量时。

有人对寻找这个函数的最大值有什么建议吗?数值上也有效——但是,我不确定初始猜测值。幸好我只有一个自变量。

编辑:

根据此处给出的有关梯度下降的答案,以及绘制和查看最大值。我从字面上复制了代码行,其中包括绘图,但我得到了一个不同的绘图。 Plot of w vs k

有没有想过为什么会这样?我正在使用 Python 3.7

最佳答案

有很多方法可以做到这一点。 scipy 特别有一堆优化算法。我将使用梯度下降(或者更恰本地说,梯度 ascent)和 autograd,因为它可能很有趣。

首先,让我们导入 autograd 并将您的函数转换为可调用函数。

import autograd.numpy as anp
from autograd import grad
import matplotlib.pyplot as plt


def w(k):
rho_l = 1352;
rho_g= 1.225;
sigma = 0.029;
nu = 0.02;
Q = rho_g/ rho_l;
u = 99.67;
h = 1.6e-5; # Half sheet thickness
t = anp.tanh(k*h);
w1 = -2 * nu * k**2 * t ;
w2 = 4* nu**2 * k**4 * t**2;
w3 = - Q**2 * u**2 * k**2;
w4 = -(t + Q)
w5 = (- Q* u**2 * k**2 + (sigma*k**3/ rho_l));
w6 = -w4;

w = ( w1 + anp.sqrt(w2 + w3 + w4*w5))/w6;

return w

现在,我们可以使用autograd 来计算w 相对于k 的梯度。您可以添加一些逻辑,以确保一旦我们达到某个容差阈值,该过程就会终止。

dwdk = grad(w)

#Do gradient descent

k = 10.0 #An initial guess
learning_rate = 1
for i in range(1000):

k+=learning_rate*dwdk(k)

现在,让我们绘制结果以确保找到最大值

K = np.arange(0,1000)
plt.plot(K,w(K))
plt.scatter(k, w(k), color = 'red')
plt.show()

enter image description here

关于python - 数值求解非线性方程 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57210412/

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