用java实现积分
方法是用java調(diào)用python,用java將積分函數(shù)寫(xiě)入csv文件,python讀入函數(shù),用eval計(jì)算并返回值。
程序中只有兩個(gè)本地路徑
d:/工業(yè)/hk/python/表達(dá)式.csv
d:/Download/cal.py
使用方法,先運(yùn)行python生成cal.py文件,再運(yùn)行java。
在java中調(diào)用calc2()函數(shù)實(shí)現(xiàn)積分,輸入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 {//實(shí)現(xiàn)了積分 public static double calc2( String stra ) throws IOException, ParseException, InterruptedException {FileWriter fileWriter5 = new FileWriter("d:/工業(yè)/hk/python/表達(dá)式.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 csva = 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.integratedef 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 )# 球坐標(biāo)積分 動(dòng)能f9 = (integrate((integrate(integrate(f8 * r * r * sin(θ), (r, 0, float('inf'))), (θ, 0, pi))), (Φ, 0, 2 * pi)))# print(f9)f10 = fx2 * (-z / r) * fx# 勢(shì)能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 + f11def jin (fr1 ,fr2 ,k):f21 = fr1 * fr2 * (r2 ** k / r1 ** (k + 1)) * fr1 * fr2 * r1 * r1 * r2 * r2f22 = fr1 * fr2 * (r1 ** k / r2 ** (k + 1)) * fr1 * fr2 * r1 * r1 * r2 * r2f23 = (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 f25def 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 * r2f22 = fr1 * fr2 * (r1 ** k / r2 ** (k + 1)) * fr3 * fr4 * r1 * r1 * r2 * r2f23 = (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 f36def 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 f9z=5a0=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(θ)# 庫(kù)侖斥力積分 #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:/工業(yè)/hk/python/表達(dá)式.csv','r')) for i in f:f2=(i)f2[0] = f2[0].replace("#", ",")d=(eval(f2[0]))print ( round( d,16 ) ) 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 构造一个完美的分类系统
- 下一篇: 分类系统的构成与外部表象