/****************************************************************************** * Compilation: javac Taylor.java * Execution: java Taylor N * Dependencies: RationalPolynomial.java * * Taylor series of * * e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + ... * sin x = x - x^3/3! + x^5/5! - x^7/7! + ... * e^x sin x = x + x^2 + x^3/3 -x^5/30 -x^6/90 + ... * * % java Taylor 5 * e^x = 1/24 x^4 + 1/6 x^3 + 1/2 x^2 + 1 x + 1 * sin(x) = -1/6 x^3 + 1 x * e^x sin(x) = -1/24 x^5 + 1/3 x^3 + 1 x^2 + 1 x * ******************************************************************************/ public class Taylor { // return n! public static int factorial(int n) { if (n == 0) return 1; return n * factorial(n-1); } public static void main(String[] args) { // number of terms int N = Integer.parseInt(args[0]); // Taylor series for e^x RationalPolynomial e = RationalPolynomial.ZERO; for (int i = 0; i < N; i++) { BigRational coef = new BigRational(1, factorial(i)); RationalPolynomial term = new RationalPolynomial(coef, i); e = e.plus(term); } StdOut.println("e^x = " + e); // Taylor series for sin(x) RationalPolynomial sin = RationalPolynomial.ZERO; for (int i = 0; i < N; i++) { BigRational coef; if (i % 4 == 0) coef = BigRational.ZERO; else if (i % 4 == 1) coef = new BigRational(1, factorial(i)); else if (i % 4 == 2) coef = BigRational.ZERO; else coef = new BigRational(-1, factorial(i)); RationalPolynomial term = new RationalPolynomial(coef, i); sin = sin.plus(term); } StdOut.println("sin(x) = " + sin); StdOut.println("e^x sin(x) = " + e.times(sin).truncate(N)); } }