//java program that asks the user to input a number that e^x=1+x+x^2/2! +x^3/3!... e is a mathematical constant equal to 2.718...
import java.util.Scanner;
public class taylor_2 {
public static void main(String args[]) {
Scanner input=new Scanner(System.in);
double x; //input for x
double factorial=1; //initializes factorial
int counter=1; //initializes counter
double result=1; //initializes result
System.out.println("Enter non negative number"); //asks user to enter x
x=input.nextInt();
//output in while loop will continue to be generated if user doesn't entered a negative number
while(x<1){
System.out.println("I said entered a positive number");
x=input.nextInt();
}
while(x>counter){
factorial=factorial*counter;//factorial formula
result=result+(Math.pow(x,counter))/factorial; //equation for e^x=1+x+x^2/2! +x^3/3!
counter++;
}
System.out.println("Taylor series is " +result);//output for taylor equation e^x
}
}
以下是我的代码输出:
输入非负数
2
泰勒系列是4.0
当我输入2时,它应该输出7.3890560983而不是4.0,因为e = 2.718 ...并且e ^ 2 = 7.3890560983。我做错了什么?
答案 0 :(得分:0)
问题是泰勒级数与e ^ x的功能不同。 它将返回一个接近函数e ^ x的函数。
为了更好地理解它,我建议你查看下一个链接的第二张图片:
https://en.wikipedia.org/wiki/Taylor_series
您可以在上一张图片中看到,随着n越来越大,功能越来越准确。
您的代码的问题是,您的x
值是您的n
值,而事实并非如此。
x:必须是您想要的值e ^ x。
n:你的等式是否准确。更大意味着更准确。
因此,您必须使用while(x>counter)
更改while(n>counter)
,其中n可以是具有用户选择精度的变量,也可以是具有所选精度的常量。
我认为在x=100
之前,n=150
应该有效。
我希望能帮到你! :)
答案 1 :(得分:0)
这里似乎有一个答案:EXP to Taylor series用于c ++,即使算法与你的算法略有不同。这是它的Java版本:
public class TaylorSeries {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("Enter x:");
double x = input.nextDouble();
double result = calcExp(x);
System.out.println("calcExp(x) = " + result);
System.out.println(" e^x = " + Math.pow(Math.E, x));
}
static double calcExp(double x) {
double eps = 0.0000000000000000001;
double elem = 1.0;
double sum = 0.0;
boolean negative = false;
int i = 1;
sum = 0.0;
if (x < 0) {
negative = true;
x = -x;
}
do {
sum += elem;
elem *= x / i;
i++;
if (sum > Double.MAX_VALUE) {
System.out.println("Too Large");
break;
}
}
while (elem >= eps);
return negative ? 1.0 / sum : sum;
}
}
输出:
Enter x:
2
calcExp(x) = 7.389056098930649
e^x = 7.3890560989306495
所有信用都应该在这里找到答案:EXP to Taylor series。我只将c ++代码转换为Java