Java程序以10 ^ -6精度确定嵌套基本常量的值

时间:2016-11-23 17:38:45

标签: java matlab math mathematical-optimization

嵌套基本常量定义为:

nested radical constant

我正在编写一个Java程序来计算嵌套的基本常量的值,精度为10 ^ -6,并且还打印达到该精度所需的迭代次数。这是我的代码:

functions = {'h': h, 'g': g}
while result is None:
    funcIn = raw_input('Which function do you want to use? (g or h): ')
    if funcIn in functions:
        result = integrate(functions[funcIn],aIn,bIn,nIn)
    else:
        print 'This function is not available'

这段代码完成了它的预期,但速度很慢。我该怎么做才能优化这个程序?有人可以建议另一种可能的方式来实施这个程序吗?

我也想在MATLAB中编写一个相同类型的程序。如果有人能将这个程序翻译成MATLAB,那就太好了。

1 个答案:

答案 0 :(得分:1)

我在此代码中进行了一些更改,现在它存储了loop(n - 1)的值,而不是每次都计算它。现在这个程序似乎比以前更加优化了。

public class nested_radical {

public nested_radical() {
    int n = 1;
    double x = 0, y = 0, p = 1;
    while ( p > 10e-6) { 
        y=x;             /*stored the value of loop(n - 1) instead of recomputing*/
        x = loop(n);
        p = x - y;
        n++;
    }
    System.out.println("value of given expression = " + x);
    System.out.println("Iterations required = " + n);
}

public double loop(int n) {
    double sum = 0;
    while (n > 0) {
        sum = Math.sqrt(sum + n--);
    }
    return (sum);
}


public static void main(String[] args) {
    new nested_radical();
}

}

我也在MATLAB中成功翻译了这段代码。这是MATLAB的代码:

n = 1;
x = 0;
p = 1;
while(p > 10e-6)
    y = x;
    sum = 0;
    m=n;
    while (m > 0)
        sum = sqrt(sum + m);
        m = m - 1;
    end
    x = sum;
    p = (x-y);
    n = n + 1;
end
fprintf('Value of given expression: %.16f\n', x);
fprintf('Iterations required: %d\n', n);