嵌套基本常量定义为:
我正在编写一个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,那就太好了。
答案 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);