Witam mam takie zadanie aby zrobić program który bedzie liczył funkcje \(\displaystyle{ \sin,\cos, e^x}\)
Korzystam ze wzorow pomijajac reszte:
\(\displaystyle{ \sin{x}=x-\frac{x^{3}}{3!}+\frac{x^{5}}{5!}+...+(-1^{n-1}) \cdot \frac{x^{2n-1}}{(2n-1)!} \\
\cos{x}=1-\frac{x^{2}}{2!}+\frac{x^{4}}{4!}+...+(-1^{n}) \cdot \frac{x^{2n}}{(2n)!} \\
e^{x}=1+\frac{x}{1!}+\frac{x^{2}}{2!}+...+\frac{x^{n-1}}{(n-1)!}}\)
Nie wiem jak uwzględnić okresowość funkcji (w ktorej ćwiartce), np jak podaje jako argument 1000 radianow to liczby z kosmosu wychodzą
Pozdrawiam z gory dziękuje za pomoc
[Java] Wzór McLaurina i okresowość funkcji sin,cos,ex
[Java] Wzór McLaurina i okresowość funkcji sin,cos,ex
Ostatnio zmieniony 12 mar 2017, o 15:57 przez Afish, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości. Symbol mnożenia to \cdot. Temat umieszczony w złym dziale.
Powód: Poprawa wiadomości. Symbol mnożenia to \cdot. Temat umieszczony w złym dziale.
[Java] Wzór McLaurina i okresowość funkcji sin,cos,ex
Kod: Zaznacz cały
package zad;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static int factorial(int iNo) {
if (iNo < 0)
throw new IllegalArgumentException("iNo >= 0");
int factorial = 1;
for (int i = 2; i <= iNo; i++)
factorial *= i;
return factorial;
}
public static double getMultiLastTwo(double liczba) {
double y = 0;
y = liczba - 1;
return liczba * y;
}
public static double calcSin(double x, int ilosc_wyrazow) {
double poprzedni_Licznik = 0;
double poprzedni_Mianownik = factorial(3);
double suma = 0;
for (int n = 1; n <= ilosc_wyrazow; n++) {
if (poprzedni_Licznik == 0) {
poprzedni_Licznik = x;
suma = x;
} else {
if (n > 2) {
poprzedni_Licznik *= Math.pow(x, 2);
poprzedni_Mianownik *= getMultiLastTwo((2 * n - 1));
suma += (Math.pow(-1, n - 1)) * (poprzedni_Licznik / poprzedni_Mianownik);
} else {
poprzedni_Licznik = poprzedni_Licznik * Math.pow(x, 2);
suma += (Math.pow(-1, n - 1)) * (poprzedni_Licznik / poprzedni_Mianownik);
}
}
}
return suma;
}
public static double calcCos(double x, int ilosc_wyrazow) {
return calcSin(x + (Math.PI / 2), ilosc_wyrazow);
}
public static double calcEx(double d, int ilosc_wyrazow) {
double poprzedni_Licznik = 1;
double poprzedni_Mianownik = 1;
double suma = 0;
for (int n = 1; n <= ilosc_wyrazow; n++) {
if (n > 1) {
poprzedni_Licznik *= d;
poprzedni_Mianownik *= (n - 1);
}
suma += poprzedni_Licznik / poprzedni_Mianownik;
}
return suma;
}
public static void addText(String content) {
BufferedWriter bw = null;
FileWriter fw = null;
try {
fw = new FileWriter(System.getProperty("user.home") + "/funkcje.txt", true);
bw = new BufferedWriter(fw);
bw.write(content + "
");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fw != null)
fw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static String diffrence(double arg1,double arg2){
BigDecimal diff=null;
BigDecimal big=new BigDecimal(arg1);
BigDecimal big2=new BigDecimal(arg2);
if( arg1>arg2 )
diff=big.subtract(big2);
else
diff=big2.subtract(big);
return "Roznica miedzy nimi: " +Math.abs(diff.floatValue());
}
public static void main(String[] args) {
System.out.println("Wprowdasz funkcje (sin,cos,ex) : ");
Scanner scanner = new Scanner(System.in);
String funkcja = scanner.nextLine();
System.out.println("Wprowdasz argument w radianach : ");
//1000
double argument = Double.parseDouble(scanner.nextLine());
System.out.println("Wprowdasz ilosc wyrazow : ");
int wyraz = Integer.parseInt(scanner.nextLine());
if (funkcja.equalsIgnoreCase("sin")) {
System.out.println("Funkcja sin wlasna: "+calcSin(argument, wyraz));
System.out.println("Funkcja sin wbudowana: "+Math.sin(argument));
System.out.println(diffrence(calcSin(argument, wyraz),Math.sin(argument)));
}
if (funkcja.equalsIgnoreCase("cos")) {
System.out.println("Funkcja cos wlasna: "+calcCos(argument, wyraz));
System.out.println("Funkcja cos wbudowana: "+Math.cos(argument));
System.out.println(diffrence(calcCos(argument, wyraz),Math.cos(argument)));
}
if (funkcja.equalsIgnoreCase("ex")) {
System.out.println("Funkcja ex wlasna: "+calcEx(argument, wyraz));
System.out.println("Funkcja ex wbudowana: "+Math.exp(argument));
System.out.println(diffrence(calcEx(argument, wyraz),Math.exp(argument)));
}
}
}
Ostatnio zmieniony 12 mar 2017, o 15:56 przez Afish, łącznie zmieniany 1 raz.
Powód: Umieszczaj kod na forum.
Powód: Umieszczaj kod na forum.