Программная реализация решения алгебраического уравнения методом Бернулли

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    111,3 Кб
  • Опубликовано:
    2015-06-19
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программная реализация решения алгебраического уравнения методом Бернулли

Введение

Вычислительная техника наших дней представляет собой мощные средства для фактического выполнения счетной работы. Благодаря этому во многих случаях стало возможным отказаться от приближенной трактовки прикладных вопросов и перейти к решению задач в точной постановке. Решение уравнений - алгебраических или трансцендентных - представляет собой одну из существенных задач прикладного анализа, потребность в которой возникает в многочисленных и самых разнообразных разделах физики, механики, техники и естествознания в широком смысле этого слова. Курсовая работа посвящена одному из методов решения алгебраических уравнений - методу Бернулли.

Обозначения

coeffs - массив коэффициентов

с - массив коэффицентов (по Вержбницкому В.М. c[i])- счетчик цикла.length - длина массива coeffs- массив коэффицентов (по Вержбницкому В.М. u[i]) , i, j - счетчики циклов- корень (по первому условию)- корень (по второму условию)- число коэфициентов- строка для ввода с консоли- строчный массив коэффицентов

arrcoeffs.length - длина массива

ex - исключение типа NumberFormatException- исключение типа NumberFormatException - исключение типа Exception

lim - предел рандомизации

rnd - объект типа Random

root - корень

1. Постановка задачи

Метод Бернулли позволяет найти наибольший и наименьший по модулю корень алгебраического уравнения, но и несколько ближайших к нему (по модулю) корней.

Вычисления по методу Бернулли сводятся в основном к построению некоторой последовательности чисел , для построения которой выбираются вначале некоторые, вообще говоря, произвольные значения . После этого значения  вычисляются с помощью рекуррентной формулы:

,

Далее по виду последовательности определяется вид наибольшего (наименьшего) по модулю корня и значение этого корня.

Далее после того, как наибольший корень вычислен с достаточной степенью точности, определяется второй по величине модуля корень. Для второго корня строиться новая последовательность , вид которой определяется на основании типа сходимости последовательности построенной для предыдущего корня.

После того как найден второй по модулю корень, аналогично находятся третий и последующие корни.

Пусть погрешность округления во всех вычислениях постоянна и равна . Тогда относительная погрешность первого корня равна

, где .

Потеря точности для последующих корней может быть значительно больше.

 

2. Структура данных

Входные данные: double[] coeffs, int n

Выходные данные: double g1

Промежуточные данные:

Double - вещественный объектный тип int - целочисленный примитивный тип double - вещественный примитивный тип String - строковый тип NumberFormatException - тип исключения NullPointerException - тип исключения NumberFormatException - тип исключения Exception - тип исключения Random - тип Random

k, i, j - примитивный целочисленный тип

lim - примитивный целочисленный тип

root - вещественный объектный тип

ex - примитивный целочисленный тип.length- примитивный целочисленный тип

с ,u,n - примитивный целочисленный тип

arrcoeffs - примитивный целочисленный тип

программа уравнение корень бернулли

3. Алгоритм

Рис. 1

 

Заключение

Данный отчет был подготовлен в течение нескольких дней. Все досконально изучив и наладив, проверив программу, результаты работы меня удволетворили.

 

 

1.  Вержбицкий В.М. - Основы численных методов. Учебник для вузов. Высш. школа - 2002г.

2.  Латыпова Н.В. «Методические указания и рекомендации по вычислительной практике» УдГу, Ижевск,2004г

3.      Ким И.Г, Латыпова Н.В., Моторина О.Л. «Численные методы ч.2» УдГу, Ижевск,2013г

.        Ким И.Г, Латыпова Н.В.«Численные методы ч.1» УдГу, Ижевск, 2012г

Приложение

 

Код программы

Program;java.util.Random;

import java.util.Scanner;class Program {static Double bernoullisMethod(Double[] coeffs) { //метод Бернули

int n = coeffs.length - 1; //инициализация переменной размера массива для коэфф-в c[i]

double[] c = new double[n]; // создание экземпляра массива(int i = 1; i < coeffs.length; i++) // в цикле - [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 по начальным условиям(int k = 1; k <= n; k++) { // в цикле для каждого u[n+k] элемента[n - 1] = k; // присвоение значения по условию(int j = 1; j <= n; j++) // вложенный цикл (сумма u[n+k])[(n + k) - 1] = c[j - 1] * u[(n + k - j) - 1]; // подсчет u[n+k-j] коэфф-в

}g = u[n + n - 2] / u[n + n - 3]; // подсчет корня по первому условиюgg = u[n + n - 1] / u[n + n - 3]; // подсчет корня по второму условиюMath.max(g, gg); // вывод максимального корня

}static void main(String[] args) {(true) {n; //число коэфициентов

Double[] coeffs; //массив коэффициентов{ //попытка выполнить дальнейший код

// инициализация коэффициентов.out.print("введите число коэфициентов полинома n = "); // вывод в консоль

n = new Scanner(System.in).nextInt(); //ввод числа n с консоли

}= new Double[n]; //создание массива коэфф-в.out.println("введете коэффиценты c[i] сами? да/нет"); // вывод в консоль

String answer; //переменная ответа= new Scanner(System.in).nextLine(); //ввод ответа с консоли

if (answer.equals("да")) { //проверка ответ. если "да", то происходит ввод значения коэфф-в вручную.out.println("вводите коэффициенты в одну строку, отделяя пробелами"); // вывод в консоль

String[] arrcoeffs = new Scanner(System.in).nextLine().split("\\s+"); //инициализация массива коэфф-в (строки)

if (n == arrcoeffs.length) { //проверка равенства n и длины массива{ //попытка выполнить дальнейший код(int i = 0; i < n; i++) { //для каждого коэфф-та -[i] = Double.parseDouble(arrcoeffs[i]); // - его конвертация из строки в вещественное число

}

} catch (NumberFormatException ex) { //перехватывание исключения NumberFormatException .out.println("ошибка ввода: "

+ ex.getMessage() + "\n повторите ввод"); //вывод в консоль

continue;

} catch (NullPointerException ex) { //перехватывание исключения NullPointerException.out.println("ошибка ввода: "

+ ex.getMessage() + "\n повторите ввод"); //вывод в консоль;

} catch (Exception ex) { //перехватывание общего исключения (ошибки).out.println("один из коэф-тов не является числом "); //вывод в консоль;

}

} else { //когда n не совпадает с размерностью массива.out.println("количество к-в не соответствует "

+ "введенному n\n повторите ввод"); // вывод в консоль;

}

} else { //если ответ не "да", коэфф-ты задаются рандомноlim = 20; //предел рандомизации.out.println("выбраны случайные целые коэффициэнты "

+ "из интервала [" + (-1) * lim + "," + lim + "]"); // вывод в консольrnd = new Random(); //создание экземпляра класса Random(int i = 0; i < n; i++) { // задание произвольных коэфф-в в цикле -[i] = (double) rnd.nextInt(lim + 1) - lim; // - значения берутся из интервала [-lim;lim].out.format("%.2f ", coeffs[i]); // последовательный вывод в консоль

}

}

+ "корней \ng1 = " + root

+ "\n хотите посчитать новые (или выйти)? да/нет"); //вывод в консоль

// условие невыхода= new Scanner(System.in).nextLine(); // ввод ответа с консоли(answer.equals("да")) // проверка ответа. если "да", то программа начинается сначала ;; //иначе происходит выход

} catch (Exception ex) { // перехватывание общего исключения .err.println(ex); //вывод исключения через поток err.out.println("повторите ввод"); // вывод в коноль;

}

}

}

}

Пример программы:

Похожие работы на - Программная реализация решения алгебраического уравнения методом Бернулли

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!