// a java program that displays the maclaurinseries math function
// sin x = x - x^3/3! + x^5/5! - x^7/7!
// sin x = (-1)^n * x^(2n+1) / (2n+1)!
import java.util.Scanner;
public class maclaurinseries
{
public static void main(String args[])
{
double x;
double counter=1;
double factorial =1;
double result=0;
Scanner input=new Scanner(System.in);
System.out.println("enter a number");
x=input.nextDouble();
while(x>=counter) {
factorial=2*factorial*counter+1;
result=result+(Math.pow(-1,counter)) * (Math.pow(x,2*counter+1))/(factorial);
counter++;
}
System.out.println("Maclaurin series is" +result);
}
}
当我为x:
输入数字3.14时,这是我的代码的输出输入一个数字 3.14 Maclaurin系列是-24.935440878754584
正如你所看到的,当我用x = 3.14代入函数sin x时,我的输出应为0,而不是-24.935330878754583。我做错了什么?
答案 0 :(得分:3)
首先,您不希望迭代次数由您输入的值控制。您需要合理数量的迭代才能合理准确。
while (counter <= 10) {
其次,你的因子计算搞砸了。你想要(2n + 1)!每个循环,你仍然希望第一个循环有1!。将计算更改为包含因子2n和因子(2n + 1),并在result
加法后移动因子计算,以将其设置为下一个循环。您还希望第一个术语为正数,因此在符号确定中使用counter + 1
作为指数。
result = result + (Math.pow(-1, counter + 1)) *
(Math.pow(x, 2 * counter - 1)) / (factorial);
factorial = factorial * (2 * counter) * (2 * counter + 1);
counter++;
}
(修改:将Math.pow(x, 2 * counter + 1)
更改为Math.pow(x, 2 * counter - 1)
,因为counter
已从1
开始。)
示例输出:
enter a number
3.14
Maclaurin series is 0.001592652393160744
更多:
enter a number
3.14159
Maclaurin series is 2.6530608840492444E-6
更多:
enter a number
1.57079
Maclaurin series is 0.9999999999799855