用java实现积分

方法是用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 ) )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑榆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值