首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解隐函数

解隐函数
EN

Stack Overflow用户
提问于 2018-02-17 14:53:17
回答 1查看 4.5K关注 0票数 3

我有一个隐函数要解:

因此,我尝试了从scipy.optimize中查找根的函数:

代码语言:javascript
复制
- fsolve : RuntimeWarning: The iteration is not making good progress, as 
  measured by the improvement from the last ten iterations.
- excitingmixing : NoConvergence
-brent:  RuntimeWarning: invalid value encountered in double_scalars (but 
  without a chance to set constraints)

我不得不承认,我不确定正确的解决办法。有人能帮忙吗?

最小工作实例:

代码语言:javascript
复制
from scipy.optimize import fsolve, newton, brent, excitingmixing
import numpy as np

def func_zeta(zeta):
    k= 1.2
    Re = 5000.
    d = 0.03
    return (2.51 /Re/np.sqrt(zeta)+k/d/3.71) + 10**(0.5/ np.sqrt(zeta))
zeta = fsolve(func_zeta, 64/Re)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-17 16:21:42

你的公式翻译有问题。它不是应该是下面的return语句吗?

代码语言:javascript
复制
return 2.51 / (Re * np.sqrt(zeta)) + k / (d * 3.71) - 10 ** (-0.5 / np.sqrt(zeta))

但即使如此,我们还是得到了一个RuntimeWarning。让我们再试一次,代替zeta

代码语言:javascript
复制
from scipy.optimize import fsolve
import numpy as np

def zeta_in_disguise(x):
    global k, d, Re
    return x + 2 * np.log10(2.51 * x / Re + k / (d * 3.71))

k = 1.2
Re = 5000
d = 0.03
#x = 1 / np.sqrt(zeta)
x = fsolve(zeta_in_disguise, 0)
print(x)
#let's test, if x is really the solution to the equation
print(-2 * np.log10(2.51 * x / Re + k / d / 3.71))

啊,现在它收敛了,产生了下面的输出

代码语言:javascript
复制
-2.06528864

这就是我们的问题--当我们只考虑浮点数的时候,你的给定参数没有解,至少没有。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48842582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档