Java程序,用于以10^-6的精度确定嵌套根常量的值
嵌套根常数定义为: 我正在编写一个Java程序,以10^-6精度计算嵌套根常量的值,并打印达到该精度所需的迭代次数。这是我的密码:Java程序,用于以10^-6的精度确定嵌套根常量的值,java,matlab,math,Java,Matlab,Math,嵌套根常数定义为: 我正在编写一个Java程序,以10^-6精度计算嵌套根常量的值,并打印达到该精度所需的迭代次数。这是我的密码: public class nested_radical { public nested_radical() { int n = 1; while ((loop(n) - loop(n - 1)) > 10e-6) { n++; } System.out.println("value of given exp
public class nested_radical {
public nested_radical() {
int n = 1;
while ((loop(n) - loop(n - 1)) > 10e-6) {
n++;
}
System.out.println("value of given expression = " + loop(n));
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)
的值,而不是每次都计算它。现在这个程序似乎比以前优化了很多
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);
只需记住
循环(n-1)
而不是重新计算,就可以使计算速度提高一倍。转到n=15
左右不应该那么慢。请解释代码以何种方式或在何种情况下慢。你是怎么测量的?我不是真的测量的。我刚刚注意到这个程序打印输出大约需要2-3秒。这就是为什么我认为它很慢。我认为记住循环(n-1)
是个好主意。非常感谢。