Javakurs/Übungsaufgaben/Lineare Funktionen/Musterlösung: Unterschied zwischen den Versionen
< Javakurs | Übungsaufgaben | Lineare Funktionen
Jörg F (Diskussion | Beiträge) K (hat „Javakurs2007/Lineare Funktionen/Musterlösung“ nach „Javakurs/Übungsaufgaben/Lineare Funktionen/Musterlösung“ verschoben) |
K (fix alignment) |
||
Zeile 1: | Zeile 1: | ||
<pre> | <pre> | ||
public class LinearFunctions { | public class LinearFunctions { | ||
+ | public static void main(String args[]) { | ||
+ | double[] y = new double[21]; | ||
− | + | System.out.println("Es wird ein 20 zelliges Array gefüllt mit Funktionswerten für f(x)= x * 2 - 5 für x in [0,20]"); | |
− | + | y = fillArray(y, 0, 2, -5); | |
− | + | System.out.println("Es sind " + biggerZero(y) + " Funktionswerte größer als 0."); | |
− | |||
− | |||
− | + | System.out.println(""); | |
+ | System.out.println("Flächenbetrag im Interval [0,5]: " + absArea(2, -5, 0, 5)); | ||
+ | System.out.println("Flächenbetrag im Interval [0,5]: " + absArea(2, -5, -2, 0)); | ||
− | + | System.out.println(""); | |
− | + | makeFunction(0, 1, polynomial1(0, 2, -5), polynomial1(1, 2, -5)); | |
+ | System.out.println(""); | ||
+ | makeFunction(0, 2.5, polynomial1(0, 2, -5), polynomial1(2.5, 2, -5)); | ||
+ | System.out.println(""); | ||
+ | makeFunction(1, 3, polynomial1(1, 2, -5), polynomial1(3, 2, -5)); | ||
+ | System.out.println(""); | ||
+ | makeFunction(3, 5, polynomial1(3, 2, -5), polynomial1(5, 2, -5)); | ||
− | + | System.out.println(""); | |
− | + | System.out.println("offset= 5: "); | |
− | + | y = offset(y, 5); | |
− | + | System.out.println("Es sind " + biggerZero(y) + " Funktionswerte" + " größer als 0."); | |
− | |||
− | + | System.out.println(""); | |
− | + | System.out.println("offset= -10: "); | |
− | + | y = offset(y, -10); | |
− | + | System.out.println("Es sind " + biggerZero(y) + " Funktionswerte" + " größer als 0."); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | } | ||
− | + | /* | |
− | + | * fills array with function values f(x) = x* m +n beginning by x= start | |
− | + | * iterated by one for each entry up to the end of the array | |
− | + | */ | |
− | + | public static double[] fillArray(double y[], double start, double m, double n) { | |
+ | for (int i = 0; i < y.length; i++) { | ||
+ | y[i] = polynomial1(start + i, m, n); | ||
+ | } | ||
+ | return y; | ||
+ | } | ||
− | + | /* | |
− | + | * calculates y for function y= x * m + n, a polynomial of grade one | |
− | + | */ | |
− | + | public static double polynomial1(double x, double m, double n) { | |
− | + | return (x * m + n); | |
+ | } | ||
− | + | /* counts number of entrys bigger zero */ | |
+ | public static double biggerZero(double y[]) { | ||
+ | int count = 0; | ||
+ | for (int i = 0; i < y.length; i++) { | ||
+ | if (y[i] > 0) { | ||
+ | count++; | ||
+ | } | ||
+ | } | ||
+ | return count; | ||
+ | } | ||
+ | /* moves graph along ordinate by given value */ | ||
+ | public static double[] offset(double y[], double value) { | ||
+ | for (int i = 0; i < y.length; i++) { | ||
+ | y[i] = y[i] + value; | ||
+ | } | ||
+ | return y; | ||
+ | } | ||
− | + | /* | |
− | + | * calculates y for function y= x * m + n, a polynomial of grade one | |
− | + | */ | |
− | + | public static double polynomial2(double x, double a, double b, double c) { | |
− | + | return (x * x * a + b * x + c); | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | /* calculates the area under the graph for f(x)= x*m + n, x in [a,b] */ | |
− | + | public static double area(double m, double n, double start, double end) { | |
− | + | /* | |
− | + | * define coefficients for a polynomial of grade 2 so that it is the | |
− | + | * antiderivative for f(x)= x*m + n, thus F(x)= x^2 * m/2 + x*n | |
− | + | */ | |
+ | double a = m / 2; | ||
+ | double b = n; | ||
+ | double c = 0; | ||
+ | return (polynomial2(end, a, b, c) - polynomial2(start, a, b, c)); | ||
+ | } | ||
− | + | /* | |
− | + | * calculates the absolut value of the area between the graph andthe | |
− | + | * ordinate in an interval | |
+ | */ | ||
+ | public static double absArea(double m, double n, double start, double end) { | ||
+ | /* is there a root in the interval? */ | ||
+ | if (polynomial1(start, m, n) * polynomial1(end, m, n) < 0) { | ||
+ | /* | ||
+ | * There is a root. Calculate the area under the abscissa, takeits | ||
+ | * absolut value and add the area from above the abscissa. | ||
+ | */ | ||
− | + | /* find root, 0= x*m + n, x= -n/m */ | |
− | + | double root = -n / m; | |
− | + | return (area(m, n, start, root) * (-1) + area(m, n, root, end)); | |
− | + | } else { | |
− | + | /* there is no spoon */ | |
− | + | double result = area(m, n, start, end); | |
− | + | if (result < 0) { | |
− | + | return result * (-1); | |
− | + | } else { | |
− | + | return result; | |
− | + | } | |
− | + | } | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | public static void makeFunction(double x1, double x2, double y1, double y2) { | ||
+ | /* define gradient */ | ||
+ | double m = (y2 - y1) / (x2 - x1); | ||
+ | double n = y1 - m * x1; | ||
+ | System.out.println("x1: " + x1 + " x2: " + x2 + " y1: " + y1 + " y2: " + y2); | ||
+ | System.out.println("Funktion ist: y= x*" + m + " +" + n); | ||
+ | } | ||
} | } | ||
</pre> | </pre> |
Aktuelle Version vom 4. März 2013, 14:18 Uhr
public class LinearFunctions { public static void main(String args[]) { double[] y = new double[21]; System.out.println("Es wird ein 20 zelliges Array gefüllt mit Funktionswerten für f(x)= x * 2 - 5 für x in [0,20]"); y = fillArray(y, 0, 2, -5); System.out.println("Es sind " + biggerZero(y) + " Funktionswerte größer als 0."); System.out.println(""); System.out.println("Flächenbetrag im Interval [0,5]: " + absArea(2, -5, 0, 5)); System.out.println("Flächenbetrag im Interval [0,5]: " + absArea(2, -5, -2, 0)); System.out.println(""); makeFunction(0, 1, polynomial1(0, 2, -5), polynomial1(1, 2, -5)); System.out.println(""); makeFunction(0, 2.5, polynomial1(0, 2, -5), polynomial1(2.5, 2, -5)); System.out.println(""); makeFunction(1, 3, polynomial1(1, 2, -5), polynomial1(3, 2, -5)); System.out.println(""); makeFunction(3, 5, polynomial1(3, 2, -5), polynomial1(5, 2, -5)); System.out.println(""); System.out.println("offset= 5: "); y = offset(y, 5); System.out.println("Es sind " + biggerZero(y) + " Funktionswerte" + " größer als 0."); System.out.println(""); System.out.println("offset= -10: "); y = offset(y, -10); System.out.println("Es sind " + biggerZero(y) + " Funktionswerte" + " größer als 0."); } /* * fills array with function values f(x) = x* m +n beginning by x= start * iterated by one for each entry up to the end of the array */ public static double[] fillArray(double y[], double start, double m, double n) { for (int i = 0; i < y.length; i++) { y[i] = polynomial1(start + i, m, n); } return y; } /* * calculates y for function y= x * m + n, a polynomial of grade one */ public static double polynomial1(double x, double m, double n) { return (x * m + n); } /* counts number of entrys bigger zero */ public static double biggerZero(double y[]) { int count = 0; for (int i = 0; i < y.length; i++) { if (y[i] > 0) { count++; } } return count; } /* moves graph along ordinate by given value */ public static double[] offset(double y[], double value) { for (int i = 0; i < y.length; i++) { y[i] = y[i] + value; } return y; } /* * calculates y for function y= x * m + n, a polynomial of grade one */ public static double polynomial2(double x, double a, double b, double c) { return (x * x * a + b * x + c); } /* calculates the area under the graph for f(x)= x*m + n, x in [a,b] */ public static double area(double m, double n, double start, double end) { /* * define coefficients for a polynomial of grade 2 so that it is the * antiderivative for f(x)= x*m + n, thus F(x)= x^2 * m/2 + x*n */ double a = m / 2; double b = n; double c = 0; return (polynomial2(end, a, b, c) - polynomial2(start, a, b, c)); } /* * calculates the absolut value of the area between the graph andthe * ordinate in an interval */ public static double absArea(double m, double n, double start, double end) { /* is there a root in the interval? */ if (polynomial1(start, m, n) * polynomial1(end, m, n) < 0) { /* * There is a root. Calculate the area under the abscissa, takeits * absolut value and add the area from above the abscissa. */ /* find root, 0= x*m + n, x= -n/m */ double root = -n / m; return (area(m, n, start, root) * (-1) + area(m, n, root, end)); } else { /* there is no spoon */ double result = area(m, n, start, end); if (result < 0) { return result * (-1); } else { return result; } } } public static void makeFunction(double x1, double x2, double y1, double y2) { /* define gradient */ double m = (y2 - y1) / (x2 - x1); double n = y1 - m * x1; System.out.println("x1: " + x1 + " x2: " + x2 + " y1: " + y1 + " y2: " + y2); System.out.println("Funktion ist: y= x*" + m + " +" + n); } }