algorytm.org

Implementacja w Java



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Algorytm Shaw-Trauba - Implementacja w Java
Ocena użytkownikóww: *****  / 3
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 08 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Show.java:
/**
 * Algorytm Show-Trauba
 * www.algorytm.org
 * Tomasz Lubinski (c)2005
 * 
 */
public class Show {


	private static int n,p,q,stopien;
	private static double a[];
	private static double x,wynik;

	//	funkcja pomocnicza s(j)
	private static double s(int j)	{
		return (n-j)%q;
	}
	
    //funkcja pomocnicza r(j)
	private static double r(int j)	{
		if (j%q==0)
			return q;
		else
			return 0;
	}

	 //funkcja pomocnicza r(j)
	private static double T(int i, int j, double x)	{
		if (x==0)                     //by mozna bylo obliczyc pochodna w punkcie x=0
			return a[j];
		else
			if (j==-1)
				return a[n-i-1]*Math.pow(x,s(i+1));
			else
				if (i==j)
					return a[n]*Math.pow(x,s(0));
				else
					return T(i-1, j-1, x)+T(i-1, j, x)*Math.pow(x,r(i-j));
	}

	private static double pochodna(int stopien, double punkt) {
		if (punkt==0) 
			return T(n,stopien,punkt); 
		else 
			return T(n,stopien,punkt)/Math.pow(punkt,stopien%q);
	} 
	
	public static void main(String[] args) {
		int i;

		System.out.println("Algorytm Show-Trauba - obliczanie pochodnych znormalizowanych wielomianu\nPodaj stopien wielomianu");
		n = Console.readInt("?");
		a = new double[n+1];

		System.out.println("Podaj teraz kolejne wspolczynniki wielomianu.\nZaczynij od tego z najwieksza potega.\n");
		for(i=n; i>=0; i--) {
			a[i] = Console.readDouble("a" + i);
		}

		System.out.println("Podaj punkt x");
		x = Console.readInt("?");

		System.out.println("Podaj wartosc parametru p");
		p  = Console.readInt("?");
		q=(n+1)/p;
		if (p*q!=n+1) {
			System.out.println("Zla wartosc parametru p (musi byc on dzielnikiem n+1)");
			return;
		}

		System.out.println("Podaj stopien znormalizowanej pochodnej do obliczenia");
		stopien = Console.readInt("?");
		if (stopien>n) {
			System.out.println("Stopien pochodnej nie moze byc wiekszy od stopnia wielomianu"); 
			return;
		}
		if (stopien<1) {
			System.out.println("Stopien pochodnej nie moze byc mniejszy od 1");
			return;
		}

		wynik=pochodna(stopien,x);
		System.out.println("Znormalizowana pochodna " + stopien + " stopnia w punkcie  " + x + " ma wartosc " + wynik);
		
		return;
	}
}
Dodaj komentarz