Заключение
Данный отчет был подготовлен в течение нескольких дней. Все досконально изучив и наладив, проверив программу, результаты работы меня удволетворили.
Приложение
Код программы
package Program;
import java.util.Random;
import java.util.Scanner;
public class Program {
public static Double bernoullisMethod(Double[] coeffs) { //метод Бернули
int n = coeffs.length - 1; //инициализация переменной размера массива для коэфф-в c[i]
double[] c = new double[n]; // создание экземпляра массива
for (int i = 1; i < coeffs.length; i++) // в цикле -
c[i - 1] = (-1) * coeffs[i] / coeffs[0]; // - подсчет c[i] коэфф-в
double[] u = new double[n * 2]; // создание экземпляра массива для u[i] коэфф-в
for (int i = 0; i < n - 1; i++)
u[i] = 0; // инициализация элементов до n по начальным условиям
for (int k = 1; k <= n; k++) { // в цикле для каждого u[n+k] элемента
u[n - 1] = k; // присвоение значения по условию
for (int j = 1; j <= n; j++) // вложенный цикл (сумма u[n+k])
u[(n + k) - 1] = c[j - 1] * u[(n + k - j) - 1]; // подсчет u[n+k-j] коэфф-в
}
double g = u[n + n - 2] / u[n + n - 3]; // подсчет корня по первому условию
double gg = u[n + n - 1] / u[n + n - 3]; // подсчет корня по второму условию
return Math.max(g, gg); // вывод максимального корня
|
|
}
public static void main(String[] args) {
while (true) {
int n; //число коэфициентов
Double[] coeffs; //массив коэффициентов
try { //попытка выполнить дальнейший код
// инициализация коэффициентов
System.out.print("введите число коэфициентов полинома n = "); // вывод в консоль
n = new Scanner(System.in).nextInt(); //ввод числа n с консоли
//исключение простых уравнений, где n < 3
if (n < 3) {
System.out.println("задайте n больше ");
continue;
}
coeffs = new Double[n]; //создание массива коэфф-в
System.out.println("введете коэффиценты c[i] сами? да/нет"); // вывод в консоль
String answer; //переменная ответа
answer = new Scanner(System.in).nextLine(); //ввод ответа с консоли
if (answer.equals("да")) { //проверка ответ. если "да", то происходит ввод значения коэфф-в вручную
System.out.println("вводите коэффициенты в одну строку, отделяя пробелами"); // вывод в консоль
String[] arrcoeffs = new Scanner(System.in).nextLine().split("\\s+"); //инициализация массива коэфф-в (строки)
if (n == arrcoeffs.length) { //проверка равенства n и длины массива
try { //попытка выполнить дальнейший код
for (int i = 0; i < n; i++) { //для каждого коэфф-та -
coeffs[i] = Double.parseDouble(arrcoeffs[i]); // - его конвертация из строки в вещественное число
}
} catch (NumberFormatException ex) { //перехватывание исключения NumberFormatException
System.out.println("ошибка ввода: "
+ ex.getMessage() + "\n повторите ввод"); //вывод в консоль
continue;
} catch (NullPointerException ex) { //перехватывание исключения NullPointerException
System.out.println("ошибка ввода: "
+ ex.getMessage() + "\n повторите ввод"); //вывод в консоль
continue;
} catch (Exception ex) { //перехватывание общего исключения (ошибки)
System.out.println("один из коэф-тов не является числом "); //вывод в консоль
continue;
}
} else { //когда n не совпадает с размерностью массива
|
|
System.out.println("количество к-в не соответствует "
+ "введенному n\n повторите ввод"); // вывод в консоль
continue;
}
} else { //если ответ не "да", коэфф-ты задаются рандомно
int lim = 20; //предел рандомизации
System.out.println("выбраны случайные целые коэффициэнты "
+ "из интервала [" + (-1) * lim + "," + lim + "]"); // вывод в консоль
Random rnd = new Random(); //создание экземпляра класса Random
for (int i = 0; i < n; i++) { // задание произвольных коэфф-в в цикле -
coeffs[i] = (double) rnd.nextInt(lim + 1) - lim; // - значения берутся из интервала [-lim;lim]
System.out.format("%.2f ", coeffs[i]); // последовательный вывод в консоль
}
}
// подсчет корней
double root = bernoullisMethod(coeffs); //применение метода Бернули
System.out.println("\nметодом Бернули посчитан один из максимальных "
+ "корней \ng1 = " + root
+ "\n хотите посчитать новые (или выйти)? да/нет"); //вывод в консоль
// условие невыхода
answer = new Scanner(System.in).nextLine(); // ввод ответа с консоли
if (answer.equals("да")) // проверка ответа. если "да", то программа начинается сначала
continue;
else
return; //иначе происходит выход
} catch (Exception ex) { // перехватывание общего исключения
System.err.println(ex); //вывод исключения через поток err
System.out.println("повторите ввод"); // вывод в коноль
continue;
}
}
}
}
Пример программы:
Литература
1. Вержбицкий В.М. - Основы численных методов. Учебник для вузов. Высш. школа – 2002г.
2. Латыпова Н.В. «Методические указания и рекомендации по вычислительной практике» УдГу, Ижевск,2004г
3. Ким И.Г, Латыпова Н.В., Моторина О.Л. «Численные методы ч.2» УдГу, Ижевск,2013г
4. Ким И.Г, Латыпова Н.В.«Численные методы ч.1» УдГу, Ижевск,2012г