/***************************************************************/ /* Verf. : Prof. Dr. Gregor Büchel */ /* Zweck : Baukasten zur Polynomberechnung mit dem Horner */ /* Schema ueber ein Intervall [ug,og] */ /* Quelle: PolyBauK.java */ /* Stand : 30.10.2015 */ /***************************************************************/ class PolyBauK {static double[] einPolyN5(double d, double b, double c) /**************************************************************/ /* Gegeben: d, b, c: Nullstellen des Polynoms p(x) vom Grad 5 */ /* Rueckgabe: a[] : Feld der Koeffizienten von p(x) */ /* Verarbeitung: p(x) hat folgende spezielle Form: */ /* p(x) = (x-d)*(x*x - b*b)*(x*x - c*c) */ /**************************************************************/ { double a[]=new double[6]; a[1]=b*b*c*c; a[0]=-d*a[1]; a[3]=-(b*b+c*c); a[2]=-d*a[3]; a[4]=-d; a[5]=1.; return a; } static double[] abTast5(double d, double b, double c, int m) /**************************************************************/ /* Gegeben: d, b, c: Nullstellen des Polynoms p(x) vom Grad 5 */ /* m : Kehrwert der Laenge des Abtastintervalls */ /* DELT=1/m (z.B. m=4 => DELT=0.25) */ /* Rueckgabe: r[] : Feld mit wichtigen Daten der Abtastung */ /* r[0] = OG = (d+b+c)+1 */ /* r[1] = UG = -OG */ /* r[2] = DELT */ /* Verarbeitung: Der Zusammenhang zwischen den Abstastgroessen*/ /* ist durch folgende Formel bestimmt: (OG-UG)/n=DELT */ /* Da DELT=1/m ist und UG=-OG ist, folgt daraus: 2*OG/n=1/m, */ /* das ist aequivalent zu: 2*OG*m=n. n ist in diesen Formeln */ /* die Anzahl der Abstastintervalle. */ /**************************************************************/ { double r[]=new double[3]; r[0]=d+b+c+1; r[1]=-r[0]; r[2]=1./m; return r; } static void ausPolySymb(double a[]) /**************************************************************/ /* Gegeben: a[] : Feld der Koeffizienten von p(x) */ /* Verarbeitung: Ausgabe von p(x) in symbolischer Form */ /**************************************************************/ { String paus="", add="+", leer="", con=""; int n; /* Grad des Polynoms = Feldlaenge-1 */ int i; n=a.length-1; paus=paus+a[n]+"*x^"+n; for(i=n-1;i>=0;i--) {if (a[i]<0.) con=leer; else con=add; paus=paus+con+a[i]+"*x^"+i; } System.out.println(paus); return ; } static double polyH(double a[], double x) {/**************************************************************/ /* Gegeben: a[] : Feld der Koeffizienten von p(x) */ /* x : eine Stelle, an der p(x) berechnet werden */ /* soll. */ /* Verarbeitung: y = p(x) wird mit dem Algorithmus des Horner */ /* Schemas berechnet */ /**************************************************************/ double y; int i,n; n=a.length-1; /*Polynomgrad = Feldlaenge-1 */ y=a[n]; for (i=n; i>=1; i--) { y=y*x+a[i-1]; } return y; } }