用java计算小数的双阶乘

双阶乘n!!, n!!≠(n!)! .

 5!!=5(5-2)(5-4)=5*3*1=15

计算公式为

其中x可以是正数,负数和0。但不能是负偶数。

用java实现了df()函数计算双阶乘,比如

double d= df(3.1);  //3.2367219415374735

double d= df(-3.1);  //-0.9804732962114218

公式中的gamma函数是用java调用python实现的。

d:/工业/hk/python/表达式.csv

D:/Download/cal.py

程序中只有两个本地路径,一个是java传递给python的命令,一个是python程序的地址。

Java程序为

package greenwood;

import java.io.DataInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;

public class dff {
	
	//double factorial function
	
	public static  double calc2( String stra ) throws IOException, ParseException, InterruptedException {
		
		FileWriter fileWriter5 = new FileWriter("d:/工业/hk/python/表达式.csv");
		
		//stra="hin( fx1,fx1)";
		//stra="jin( rj1,rj2)";
		
		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= Double.parseDouble(str.trim());	 
		return df;
	}
	
	 public static  double gamma( double a   ) throws IOException, ParseException, InterruptedException {
	 		
         String s1="sympy.gamma("+ a +")";
	 	 
			double ds=calc2(  s1 );
			
			return ds;
	 		
	 	}
	 	
	 	public static  double df( double a   ) throws IOException, ParseException, InterruptedException {
	 		
	 		double f=0;
	 		
	 		double d1=gamma( (a+2)/2);
	 		double d2=Math.pow(2 , a/2);
	 		double d3=Math.pow(  Math.PI/2 , (-1+Math.cos(a*Math.PI))/4  );

	 		
	 		double d=d1*d2* d3;

	 		//System.out.println( d+"  "+d1+" "+d2+"  "+d3  );
	 		
	 		f=d;
	 		return f;
	 	}
	 	
	 	public static void main(String[] args) throws IOException, ParseException, InterruptedException {

			
	 		//double d= df(0);//1
	 		//double d= df(1); //1
			//double d= df(2);//2
			//double d= df(3);//3
			//double d= df(4);//8
			//double d= df(5);//14.99999999999999
			//double d= df(6); //48
			//double d= df(7); //104.99999999999868
			//double d= df(8); //384.0
			//double d= df(9);  //944.9999999999997
			//double d= df(-5);  //0.33333333333333415
			//double d= df(-7);  //-0.06666666666666668
			//double d= df(-9); //0.009523809523809521
			//double d= df(3.1); //3.2367219415374735
			 double d= df(-3.1); //-0.9804732962114218
		
			
			System.out.println( d   );

				}

}

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')
σ = sympy.Symbol('σ')
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




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 ) )





 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黑榆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值