Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.util.Scanner;
- import java.math.*;
- public class Main
- {
- static double sum;
- static int n;
- static int N;
- static double[] ages;
- static double[] numbers;
- static double eps = 0.000001;
- public static void setAges(double[] ages) throws FileNotFoundException
- {
- Scanner sc = new Scanner(new File("Ages"));
- String s;
- int counter = 0;
- while(sc.hasNext()){
- s = sc.nextLine();
- ages[counter] = Double.parseDouble(s);
- counter ++;
- }
- }
- public static void setNumbers(double[] numbers) throws FileNotFoundException {
- Scanner sc = new Scanner(new File("Numbers"));
- String s;
- int counter = 0;
- while(sc.hasNext()){
- s = sc.nextLine();
- numbers[counter] = Double.parseDouble(s);
- counter ++;
- }
- }
- public static void PrintArr(double[] arr){
- for (int i = 0; i<arr.length; i++){
- System.out.println(arr[i]);
- }
- }
- public static void setLength(){
- n = ages.length;
- }
- public static void setSum(double[] numbers, double[] ages){
- for (int i = 0; i<n; i++)
- sum += numbers[i] * ages[i] ;
- }
- public static void setNumbersSum(double[] numbers){
- for (int i = 0; i<n; i++)
- N += numbers[i] ;
- }
- public static double getFunctionValue (double a) {
- double fa;
- double up = 0, bt = 0; // числитель и знаменатель
- for (int i = 0; i < n; i++) {
- up += numbers[i]*ages[i] * Math.exp(a * ages[i]);
- bt += numbers[i]* Math.exp(a * ages[i]);
- }
- up *= N;
- bt -= N;
- fa = sum + (N / a) - (up / bt);
- return fa;
- }
- public static double getDerivative (double a) {
- double Der;
- double up1 = 0, up2 = 0, bt = 0; // числитель и знаменатель
- for (int i = 0; i < n; i++) {
- up1 += numbers[i]*ages[i] * ages[i] * Math.exp(a * ages[i]);
- up2 += numbers[i]*ages[i] * Math.exp(a * ages[i]);
- bt += numbers[i]*Math.exp(a * ages[i]);
- }
- up1 *= N;
- up2 *= N;
- bt -= N;
- Der = - (N / (a * a)) - (up1 * bt - up2 * (up2 / N)) / (bt * bt);
- return Der;
- }
- public static double solveEquationForA (double old_a) {
- double a = old_a;
- double fa = 1;
- double der;
- double sol = 0;
- int i = 0;
- while(Math.abs(fa) > eps) {
- i++;
- sol = a;
- fa = getFunctionValue(a);
- der = getDerivative(a);
- a = a - fa / der;
- if (i > 100) {
- System.out.println("break");
- break;
- }
- //System.out.println(sol);
- }
- return sol;
- }
- public static double solveEquationForB (double a) {
- double bt = 0;
- for (int i = 0; i < n; i++) {
- bt += numbers[i]*Math.exp(a * ages[i]);
- }
- bt -= N;
- return (N * a) / bt;
- }
- public static void main(String[] args) throws FileNotFoundException
- {
- ages = new double[80];
- numbers = new double[80];
- setAges(ages);
- setNumbers(numbers);
- setLength();
- setSum(numbers,ages);
- setNumbersSum(numbers);
- double a, b;
- for (double i = 0.01; i < 0.25; i += 0.01) {
- a = solveEquationForA(i);
- b = solveEquationForB(a);
- System.out.println("a="+a+", b="+b);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement