用Python解决数学函数

时间:2015-03-05 16:52:44

标签: python math

我正在尝试使用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)-A-B / 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)

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

对于更有效的方法,在其Illinois变体中查找调节falsi方法。

答案 1 :(得分:0)

如果您安装了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):我不知道您的单位。