泰勒级数。程序进行更少的迭代
Taylor series. Program does fewer iterations
所以我需要使用泰勒级数的分解形式递归计算 e^x:
等式:e^x = 1 +x + (x^2)/2! + ... + ((x^n)/n!))
U(n) = U(n-1)*(x/n)
断点|U(n)| < 每股收益
package lab2;
import java.util.Scanner;
public class Lab2 {
public static void main(String[] args) {
// TODO code application logic here
Scanner in = new Scanner(System.in);
System.out.println("Enter x: ");
int x = in.nextInt();
System.out.println("Enter 0 < e < 1: ");
double e = in.nextDouble();
double result = 1.0;
int n = 1;
double U = x / n;
while (Math.abs(U) >= e)
{
double fa = 1;
for (int i = 1; i <= n; i++)
fa *= i;
result += Math.pow(x, n) / fa;
U *= x / ++n;
}
System.out.println("e^x = " + result);
}
}
它只工作了 x+1 次,然后调试说 U 等于 0 并且它是我们的断点。我不明白为什么会这样。你能帮帮我吗?
由于 x
和 n
是整数,因此将使用 integer division 将它们相除。只有在除法下降后,结果才会提升为 double
,以便存储在 U
中。为了执行浮点除法,您可以将 x
定义为 double
或在除法时显式转换它:
double U = ((double) x) / n;
所以我需要使用泰勒级数的分解形式递归计算 e^x:
等式:e^x = 1 +x + (x^2)/2! + ... + ((x^n)/n!))
U(n) = U(n-1)*(x/n)
断点|U(n)| < 每股收益
package lab2;
import java.util.Scanner;
public class Lab2 {
public static void main(String[] args) {
// TODO code application logic here
Scanner in = new Scanner(System.in);
System.out.println("Enter x: ");
int x = in.nextInt();
System.out.println("Enter 0 < e < 1: ");
double e = in.nextDouble();
double result = 1.0;
int n = 1;
double U = x / n;
while (Math.abs(U) >= e)
{
double fa = 1;
for (int i = 1; i <= n; i++)
fa *= i;
result += Math.pow(x, n) / fa;
U *= x / ++n;
}
System.out.println("e^x = " + result);
}
}
它只工作了 x+1 次,然后调试说 U 等于 0 并且它是我们的断点。我不明白为什么会这样。你能帮帮我吗?
由于 x
和 n
是整数,因此将使用 integer division 将它们相除。只有在除法下降后,结果才会提升为 double
,以便存储在 U
中。为了执行浮点除法,您可以将 x
定义为 double
或在除法时显式转换它:
double U = ((double) x) / n;