将java函数作为参数传递

将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

我在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 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使用该数组长度进行基准测试不到一分钟