python求解非线性多元方程_求解python中的colebrook(非线性)方程

在Python中尝试解决非线性Colebrook方程遇到困难,已尝试使用numpy的nsolve和scipy的brentq方法。错误提示涉及函数参数数量和返回类型。最终发现log函数语法错误,修正为log10后,方程能运行但得到的结果为零。
摘要由CSDN通过智能技术生成

我想在MATLAB中的python what this guy did中做 .

我已经安装了anaconda,所以我有numpy和sympy库 . 到目前为止,我已尝试使用numpy nsolve,但这不起作用 . 我应该说我是python的新手,而且我知道如何在MATLAB中做到这一点:P .

-2*log(( 2.51/(331428*sqrt(x)) ) + ( 0.0002 /(3.71*0.26)) ) = 1/sqrt(x)

通常情况下,我会迭代地解决这个问题,只是在左边猜测x而不是在右边求解x . 将解决方案放在左侧,再次解决 . 重复,直到左边x接近右边 . 我知道应该是什么解决方案 .

所以我可以做到,但那不是很酷 . 我想用数字做 . 我的15欧元卡西欧计算器可以解决它,所以我认为它不应该复杂化?

谢谢您的帮助,

编辑:所以我尝试了以下内容:

from scipy.optimize import brentq

w=10;

d=0.22;

rho=1.18;

ni=18.2e-6;

Re=(w*d*rho)/ni

k=0.2e-3;

d=0.26;

def f(x,Re,k,d):

return (

-2*log((2.51/(Re*sqrt(x)))+(k/(3.71*d)),10)*sqrt(x)+1

);

print(

scipy.optimize.brentq

(

f,0.0,1.0,xtol=4.44e-12,maxiter=100,args=(),full_output=True,disp=True

)

);

我得到了这个结果:

r = _zeros._brentq(f,a,b,xtol,maxiter,args,full_output,disp)

TypeError: f() takes exactly 4 arguments (1 given)

是因为我在解决常数问题吗?

edit2:所以我想我必须通过args =()关键字分配常量,所以我改变了:

f,0.0,1.0,xtol=4.44e-12,maxiter=100,args=(Re,k,d),full_output=True,disp=True

但现在我明白了:

-2*log((2.51/(Re*sqrt(x)))+(k/(3.71*d)),10)*sqrt(x)+1

TypeError: return arrays must be of ArrayType

无论如何,当我输入不同的等式时;让我们说 2*x*Re+(k*d)/(x+5) 它有效,所以我想我必须改变这个等式 .

所以它在这里死:log(x,10)..

edit4:正确的语法是log10(x)......现在它可以工作,但结果是零

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值