この男がMATLAB で行ったことを Python で実行したいと考えています。
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)です...今は動作しますが、結果としてゼロになります