方法是用java调用python,用java将积分函数写入csv文件,python读入函数,用eval计算并返回值。
程序中只有两个本地路径
d:/工业/hk/python/表达式.csv
d:/Download/cal.py
使用方法,先运行python生成cal.py文件,再运行java。
在java中调用calc2()函数实现积分,输入String返回double
如
String a="( integrate( ( integrate( integrate( r*r*sin(θ) , (r ,0 , 1 ) ) , (θ,0, pi ) ) ) , (Φ,0,2*pi) ) )";
double d=calc2( a); // 4.1887902047863910
java程序
import java.io.DataInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
public class calcu1 {
//实现了积分
public static double calc2( String stra ) throws IOException, ParseException, InterruptedException {
FileWriter fileWriter5 = new FileWriter("d:/工业/hk/python/表达式.csv");
stra=stra.replaceAll(",","#");
fileWriter5.write( stra + "\r\n");
fileWriter5.flush();
String exe = "python";
String command = "d:/Download/cal.py";
String[] cmdArr = new String[] {exe ,command };
Process process = Runtime.getRuntime().exec(cmdArr);
InputStream is = process.getInputStream();
DataInputStream dis = new DataInputStream(is);
String str = dis.readLine();
process.waitFor();
System.out.println(str);
double df=0.0;
str=str.trim();
df= Double.parseDouble(str);
return df;
}
public static void train1( ) throws IOException, ParseException, InterruptedException {
String a="( integrate( ( integrate( integrate( r*r*sin(θ) , (r ,0 , 1 ) ) , (θ,0, pi ) ) ) , (Φ,0,2*pi) ) )";
double d=calc2( a); //4.1887902047863910
}
public static void main(String[] args) throws IOException, ParseException, InterruptedException {
train1( );
}
}
Python程序
import sympy
import math
from sympy import symbols, cancel
import csv
a = sympy.Symbol('a')
e = sympy.Symbol('e')
m = sympy.Symbol('m')
h = sympy.Symbol('h')
l = sympy.Symbol('l')
lp = sympy.Symbol('lp')
r = sympy.Symbol('r')
EE = sympy.Symbol('EE')
R = sympy.Symbol('R')
r1 = sympy.Symbol('r1')
r2 = sympy.Symbol('r2')
r3 = sympy.Symbol('r3')
c1 = sympy.Symbol('c1')
c2 = sympy.Symbol('c2')
c3 = sympy.Symbol('c3')
μ = sympy.Symbol('μ')
v = sympy.Symbol('v')
α = sympy.Symbol('α')
β = sympy.Symbol('β')
x = sympy.Symbol('x')
y = sympy.Symbol('y')
z = sympy.Symbol('z')
θ1= sympy.Symbol('θ1')
θ2= sympy.Symbol('θ2')
Φ1= sympy.Symbol('Φ1')
Φ2= sympy.Symbol('Φ2')
θ= sympy.Symbol('θ')
Ψ= sympy.Symbol('Ψ')
Φ= sympy.Symbol('Φ')
pi=sympy.Symbol('pi')
E=sympy.Symbol('E')
I=sympy.Symbol('I')
sin=sympy.Symbol('sin')
cos=sympy.Symbol('cos')
tan=sympy.Symbol('tan')
diff=sympy.Symbol('diff')
integrate=sympy.Symbol('integrate')
pi=sympy.pi
E=sympy.E
sin=sympy.sin
cos=sympy.cos
tan=sympy.tan
diff=sympy.diff
integrate=sympy.integrate
def hin( fx1 ,fx2 ):
fx = fx1
#print("z ",z)
# 拉普拉斯算符
f1 = (1 / (r * r)) * diff((r * r * diff(fx, r)), r)
f2 = (1 / (r * r * sin(θ))) * diff((sin(θ) * diff(fx, θ)), θ)
f3 = (1 / (r * r * sin(θ) * sin(θ))) * diff(fx, Φ, Φ)
f8 = fx2*(-1 / 2) * (f1 + f2 + f3)
# print ( f1 )
# print ( f2 )
# print ( f3 )
# print ( f8 )
# 球坐标积分 动能
f9 = (integrate((integrate(integrate(f8 * r * r * sin(θ), (r, 0, float('inf'))), (θ, 0, pi))), (Φ, 0, 2 * pi)))
# print(f9)
f10 = fx2 * (-z / r) * fx
# 势能
f11 = (integrate((integrate(integrate(f10 * r * r * sin(θ), (r, 0, float('inf'))), (θ, 0, pi))), (Φ, 0, 2 * pi)))
# print(f11)
#print("H", f9 + f11)
return f9 + f11
def jin (fr1 ,fr2 ,k):
f21 = fr1 * fr2 * (r2 ** k / r1 ** (k + 1)) * fr1 * fr2 * r1 * r1 * r2 * r2
f22 = fr1 * fr2 * (r1 ** k / r2 ** (k + 1)) * fr1 * fr2 * r1 * r1 * r2 * r2
f23 = (integrate(f21, (r2, 0, r1)))
f24 = (integrate(f22, (r2, r1, float('inf'))))
f25 = ( integrate(f24 + f23, (r1, 0, float('inf'))))
# print("f23",f23)
# print("f24",f24)
#print( f25)
return f25
def kin(fr1, fr2, fr3, fr4, k):
# 交换积分
# fr1 = (z) ** (1.5) * sympy.exp(-z * r1) * pi ** (-0.5)
# fr2 = (z) ** (1.5) * sympy.exp(-z * r2) * pi ** (-0.5)
# fr3 = (z) ** (1.5) * sympy.exp(-z * r2) * pi ** (-0.5)
# fr4 = (z) ** (1.5) * sympy.exp(-z * r1) * pi ** (-0.5)
f21 = fr1 * fr2 * (r2 ** k / r1 ** (k + 1)) * fr3 * fr4 * r1 * r1 * r2 * r2
f22 = fr1 * fr2 * (r1 ** k / r2 ** (k + 1)) * fr3 * fr4 * r1 * r1 * r2 * r2
f23 = (integrate(f21, (r2, 0, r1)))
f24 = (integrate(f22, (r2, r1, float('inf'))))
f36 = (integrate(f24 + f23, (r1, 0, float('inf'))))
# print("f23",f23)
# print("f24",f24)
#print("K", f36)
return f36
def sab (fr1 ,fr2 ):
# print("f23",f23)
# print("f24",f24)
f9 = (integrate((integrate(integrate( fr1*fr2 * r * r * sin(θ), (r, 0, float('inf'))), (θ, 0, pi))), (Φ, 0, 2 * pi)))
print("S", f9)
return f9
z=5
a0=1
a1=4
#a0=1
#a1=4
'''
fx1=(z/a0)**(1.5)*2*sympy.exp(-z*r/a0 )*(4*pi)**(-0.5)
fx2=(z/( 2*a1))**(1.5)*(2-z*r/a1)*sympy.exp(-z*r/(2*a1) )*(4*pi)**(-0.5)
fx3=(z/( 2*a1))**(1.5)*(z*r/(3**0.5*a1) )*sympy.exp(-z*r/(2*a1) )*(3/(4*pi))**(0.5)* cos(θ)
# 库仑斥力积分
#fj1 = (z/a0)**(1.5)*2*sympy.exp(-z*r1/a0 )*(4*pi)**(-0.5)
#fj2 = (z/a0)**(1.5)*2*sympy.exp(-z*r2/a0 )*(4*pi)**(-0.5)
rj1 = (z/a0)**(1.5)*2*sympy.exp(-z*r1/a0 )
rj2 = (z/a0)**(1.5)*2*sympy.exp(-z*r2/a0 )
#fj3=(z/( 2*a1))**(1.5)*(2-z*r1/a1)*sympy.exp(-z*r1/(2*a1) )*(4*pi)**(-0.5)
#fj4=(z/( 2*a1))**(1.5)*(2-z*r2/a1)*sympy.exp(-z*r2/(2*a1) )*(4*pi)**(-0.5)
rj3=(z/( 2*a1))**(1.5)*(2-z*r1/a1)*sympy.exp(-z*r1/(2*a1) )
rj4=(z/( 2*a1))**(1.5)*(2-z*r2/a1)*sympy.exp(-z*r2/(2*a1) )
#fj5=(z/( 2*a1))**(1.5)*(z*r1/(3**0.5*a1) )*sympy.exp(-z*r1/(2*a1) )*(3/(4*pi))**(0.5)* cos(θ)
#fj6=(z/( 2*a1))**(1.5)*(z*r2/(3**0.5*a1) )*sympy.exp(-z*r2/(2*a1) )*(3/(4*pi))**(0.5)* cos(θ)
rj5=(z/( 2*a1))**(1.5)*(z*r1/(3**0.5*a1) )*sympy.exp(-z*r1/(2*a1) )
rj6=(z/( 2*a1))**(1.5)*(z*r2/(3**0.5*a1) )*sympy.exp(-z*r2/(2*a1) )
'''
f = csv.reader(open('d:/工业/hk/python/表达式.csv','r'))
for i in f:
f2=(i)
f2[0] = f2[0].replace("#", ",")
d=(eval(f2[0]))
print ( round( d,16 ) )