双阶乘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 ) )