I have a code in python and want to convert it in matlab format
古いコメントを表示
def DEM(Km, Gm, Ki, Gi, alphai, phii, phi0=0.0, r=1000, phitol=1.0E-10, gamma=0.01):
phi = np.sum(phii)
fraci = phii / np.sum(phi)
ci = fraci * alphai / r
n = int(np.ceil((np.log(1.0 - phi) - np.log(1.0 - phi0)) / np.sum(np.log(1.0 - ci))))
m = len(alphai)
def func(r):
f = np.empty(m)
f[0] = np.log(alphai[0] / r[0]) + np.log(1.0 - phi0 / phi) - np.log(
1 - ((1.0 - phi) / (1.0 - phi0)) ** (1.0 / n))
for j in range(1, m):
f[j] = f[j - 1] + np.log(alphai[j] / r[j]) + np.log(r[j - 1] / alphai[j - 1] - fraci[j - 1])
return f
def fprime(r):
jac = np.diag(-1.0 / r)
for j in range(0, m - 1):
jac[j + 1:, j] = -1.0 / r[j] + 1.0 / (r[j] - fraci[j] * alphai[j])
return jac
r0 = r * np.ones(m)
ri = fsolve(func, r0, fprime=fprime, factor=0.1)
ci = fraci * alphai / ri
thetai = theta(alphai)
fi = f(alphai, thetai)
K = np.empty(n)
G = np.empty(n)
phi = np.empty(n)
K_ = Km
G_ = Gm
phi_ = phi0
for i in range(n):
dphi = ci[0] * (1.0 - phi_)
K_, G_ = KG(K_, G_, Ki[0], Gi[0], ci[0], thetai[0], fi[0])
phi_ += dphi
for j in range(1, m):
dphi *= ci[j] * (1.0 - ci[j - 1]) / ci[j - 1]
K_, G_ = KG(K_, G_, Ki[j], Gi[j], ci[j], thetai[j], fi[j])
phi_ += dphi
K[i] = K_
G[i] = G_
phi[i] = phi_
return K, G, phi
回答 (1 件)
Steven Lord
2024 年 4 月 15 日
0 投票
Do you need to convert the code or would being able to run the code in MATLAB be sufficient? If the latter, see the documentation for instructions on how to run Python code in MATLAB.
1 件のコメント
カテゴリ
ヘルプ センター および File Exchange で Call Python from MATLAB についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!