繁体   English   中英

用Python解决数学函数

[英]Solving a mathematical function in Python

我正在尝试使用Python解决对数函数。 我正在寻找一个无理数,所以我写了这个二等分算法:

def racine(x):
   a=0
   b=x/2
   c=(a+b)/2
   while a!=b and a<c<b:
       if c**2<x:           
           a=c
       else:
           b=c            
       c=(a+b)/2        
   return a, b

这似乎有用,至少对于找到非理性的根源是有效的。 但是然后我有一个更复杂的功能:

LN(P)= A + B / T + C * LN(T)

其中P,A,B和C是已知常数。 隔离T,是这样的:

Ť==ë**((LN(P)-AB / T)/ C)

但这仍然无法解决,因为T在两侧。 有人可以看到周围的路吗? 现在,我有了这段代码,显然不起作用。

def temperature(P): 
   A=18.19
   B=-23180
   C=-0.8858
   T==e**((log(P)-A-B/T)/C)
   return racine (T)

谢谢!

答案应该是再次使用二等分法。

a=small estimate
fa = f(a)
b=large estimate
fb = f(b)
while( b-a > 1e-12 ) {
  c = (a+b)/2
  fc = f(c)
  if( fabs(fc) < 1e-12) return c;
  if( (fc>0) == (fa>0) ) {
    a = c; fa = fc
  } else {
    b = c; f = fc;
}
return (a+b)/2

对于更有效的方法,请查找其伊利诺伊州变种中的regula falsi方法。

如果安装了NumPy,则可以通过数值找到给定压力下的温度,例如scipy.optimize.newton 例如,

import numpy as np
from scipy.optimize import newton
A, B, C = 18.19, -23180, -0.8858
fr = lambda T, lnp: (A + B/T + C*np.log(T)) - lnp
def T(p):
    return newton(fr, 1000, args=(np.log(p),))

In [1]: p1 = 10
In [2]: T1 = T(p1)
In [3]: T1
Out[3]: 2597.8167133280913
In [4]: np.exp(A + B/T1 + C*np.log(T1))    # check
Out[4]: 10.000000000000002

您可能必须根据使用情况自定义初始猜测值(此处为1000 ):我不知道您的单位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM