将java函数作为参数传递
我在java应用程序中使用Wolfram Mathematica 9.0。问题是我需要生成一个非常长的表达式(比如1.2*(x-1)+1.25*(x-1.5)+…等)作为函数,并且使用StringBuilder构建它需要很长时间。有没有什么方法可以传递java函数而不将其转换为wolfram表达式 UPD 这个函数就是我所说的。它构建wolfram函数exxpression。通常,arr长度超过100000将java函数作为参数传递,java,wolfram-mathematica,Java,Wolfram Mathematica,我在java应用程序中使用Wolfram Mathematica 9.0。问题是我需要生成一个非常长的表达式(比如1.2*(x-1)+1.25*(x-1.5)+…等)作为函数,并且使用StringBuilder构建它需要很长时间。有没有什么方法可以传递java函数而不将其转换为wolfram表达式 UPD 这个函数就是我所说的。它构建wolfram函数exxpression。通常,arr长度超过100000 public static String buildCdfExpressionForWo
public static String buildCdfExpressionForWolfram(double [] arr){
StringBuilder strBuilder = new StringBuilder();
int n = arr.length;
strBuilder.append("(");
for(int i = 0; i < n; i++){
strBuilder.append("HeavisideTheta[x");
if(arr[i] > 0) {
strBuilder.append("-");
strBuilder.append(arr[i]);
}
else if(arr[i] < 0){
strBuilder.append("+");
strBuilder.append(-arr[i]);
}
strBuilder.append("]");
if(i != n - 1){
strBuilder.append("+");
}
}
strBuilder.append(") / " + n);
return strBuilder.toString();
}
publicstaticstringbuildcdfexpressionforwolfram(double[]arr){
StringBuilder strBuilder=新StringBuilder();
int n=阵列长度;
strBuilder.append(“”);
对于(int i=0;i0){
strBuilder.append(“-”);
strBuilder.append(arr[i]);
}
else if(arr[i]<0){
strBuilder.append(“+”);
strBuilder.append(-arr[i]);
}
strBuilder.append(“]”);
如果(i!=n-1){
strBuilder.append(“+”);
}
}
strBuilder.append(“)/”+n);
返回strBuilder.toString();
}
如果减少append
调用的数量会发生什么
public static String buildCdfExpressionForWolfram(double [] arr){
StringBuilder strBuilder = new StringBuilder("(");
int n = arr.length;
for(int i = 0; i < n; i++){
if(arr[i] > 0) {
strBuilder.append("HeavisideTheta[x-"+arr[i]+"]");
}
else if(arr[i] < 0){
strBuilder.append("HeavisideTheta[x+-"+arr[i]+"]");
}
if(i != n - 1){
strBuilder.append("+");
}
}
strBuilder.append(") / " + n);
return strBuilder.toString();
}
publicstaticstringbuildcdfexpressionforwolfram(double[]arr){
StringBuilder strBuilder=新StringBuilder(“”);
int n=阵列长度;
对于(int i=0;i0){
追加(“HeavisideTheta[x-”+arr[i]+“]);
}
else if(arr[i]<0){
追加(“HeavisideTheta[x+-“+arr[i]+”]);
}
如果(i!=n-1){
strBuilder.append(“+”);
}
}
strBuilder.append(“)/”+n);
返回strBuilder.toString();
}
多长时间是“很长的时间”?请指定您现在的操作方式。可能是代码片段。长时间大约是20-30秒。问题是,这段时间花在构建表达式上,而不是计算上,在我看来,这是非常不合逻辑的。我想,+运算符调用并不比append调用好多少。你能调试它,看看哪一行有问题吗?我见过使用stringbuilder使用该数组长度进行基准测试不到一分钟