96719

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

Курсовая

Математика и математический анализ

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

Русский

2015-10-09

194.5 KB

1 чел.

Министерство образования и науки РФ

ФГБОУ ВПО «Удмуртский государственный университет»

Математический факультет

Кафедра вычислительной механики

Курсовая работа на тему:

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

           Научный руководитель:

Камидуллина Т.В.

Студент группы ОБ-010800-31

Копысов Е.С.

                                                      Ижевск 2015г

Содержание


Введение

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


Обозначения

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

с - массив коэффицентов (по Вержбницкому В.М. c[i])

i - счетчик цикла

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

u - массив коэффицентов (по Вержбницкому В.М. u[i])

k, i, j - счетчики циклов

g - корень (по первому условию)

gg - корень (по второму условию)

n - число коэфициентов

answer - строка для ввода с консоли

arrcoeffs - строчный массив коэффицентов

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

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

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

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

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

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

root - корень


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

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

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

,

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

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

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

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

, где .

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

Таким образом, метод Бернулли обладает очень простой вычислительной схемой. Основные вычисления сводятся к повторению операции накопления, что делает метод удобным для вычисления на ЭВМ. Кроме того, корни в методе Бернулли определяются не все сразу, а один или несколько наибольших (наименьших) по модулю корней, что приводит к потере точности для остальных корней.


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

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

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


Алгоритм


Заключение

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


Приложение

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

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г

PAGE   \* MERGEFORMAT 1


 

А также другие работы, которые могут Вас заинтересовать

31726. Педагогічне спілкування 28 KB
  Педагогічне спілкування Прагнення до людського спілкування виступає своєрідним внутрішнім стимулом рушієм діяльності особистості. Педагогічне спілкування це система органічної соціальнопсихологічної дії учителявихователя і вихованця в усіх сферах діяльності що має певні педагогічні функції спрямоване на створення оптимальних соціальнопсихологічних умов активної та результативної життєдіяльності особистості. Оптимальним треба вважати таке спілкування педагога з вихованцями у процесі навчальновиховної роботи яке створює найбільш...
31727. Методи педагогічної психології 29 KB
  Недоліки цього методу: пасивність спостерігача фіксація тільки зовнішніх проявів певних дій і вчинків складність кількісної обробки одержаних даних. Позитивні сторони методу – в його масовості швидкості одержання інформації легкої обробки даних можливості застосування математичних методів обробки даних і порівняльного аналізу декількох обстежень. Недоліки методу – важко розраховувати на повні правильні точні відповіді неможливість втручання в сам процес анкетування немає гарантій недобросовісного заповнення анкет тощо. Позитивні...
31728. Історія розвитку педагогічної психології 28 KB
  Історія розвитку педагогічної психології Становлення багатьох галузей наукового знання являє собою гетерогенний і гетерохронний і більше того розірваний у часі процес. поклала початок розвитку педагогічної теорії і цілеспрямованої організації шкільного навчання. Ця праця можна розглядати і як першу передумову тривалого суперечливого становлення педагогічної психології протягом більш ніж 250 років бо тільки в кінці 19 в. Весь шлях становлення і розвитку педагогічної науки може бути представлений трьома великими періодами етапами: Перший...
31729. Суспільна роль вчителя, його значення в перебудові суспільства 28.5 KB
  Діяльність педагога – вид соціально культурної діяльності спрямованої на передачу накопичених людством культури і досвіду від старших поколінь молодшим створення умов для їх всебічного гармонійного розвитку та підготовку до виконання певних соціальних ролей у суспільстві. Основою педагогічної діяльності є спільна діяльність людей у процесі якої кожен суб’єкт засвоює загальнолюдський досвід історично сформовані суспільні педагогічні комунікативні моральні та інші цінності знання і способи дій; формує себе як особистість. Метою...
31730. Вимоги педагогічної діяльності до особистості вчителя 27.5 KB
  Вимоги педагогічної діяльності до особистості вчителя Які ж особистісні якості необхідні для успішної педагогічної діяльності Ще Я. Перша така особливість – це педагогічні здібності тобто наявність внутрішнього натхнення до цієї діяльності. За відсутності цієї чутливості він неспроможний досягти в цій діяльності значних успіхів. Здібності до педагогічної діяльності можна виявити шляхом визначення темпів опанування педагогом професійних педагогічних знань глибини оволодіння основними прийомами та способами педагогічної діяльності.
31731. Педагогічні здібності вчителя та їх розвиток 28.5 KB
  Педагогічні здібності - це індивідуальні стійкі властивості особистості, що складаються в специфічної чутливості до об'єкта, засобів, умов педагогічної праці і створенню продуктивних моделей формування шуканих якостей в особистості воспитуемого.
31732. Психологічні передумови взаємин вчителя з учнями та колегами 30 KB
  Психологічні передумови взаємин вчителя з учнями та колегами Професіональне педагогічне спілкування комунікативна взаємодія педагога з учнями батьками колегами спрямована на встановлення сприятливого психологічного клімату психологічну оптимізацію діяльності і стосунків. Непрофесіональне педагогічне спілкування навпаки породжує страх невпевненість спричинює зниження працездатності порушення динаміки мовлення і внаслідок цього появу стереотипних висловлювань у школярів оскільки у них зменшується бажання думати і діяти самостійно....
31733. CASE-технологии 62.5 KB
  02 CSEтехнологии 1. Основные понятия и классификация CSEтехнологий Потребность контролировать процесс разработки ИС прогнозировать и гарантировать стоимость разработки сроки и качество результатов привела в конце 70х гг. Термин CSE означает Computer ided System Softwre Engineering. Под CSE средством понимается программное средство поддерживающее процессы жизненного цикла ИС включая анализ требований к системе проектирование прикладного ПО и баз данных генерацию кода тестирование документирование обеспечение качества...
31734. CASE-средства, практическое внедрение CASE-средств 150.5 KB
  Технология внедрения CSEсредств Процесс внедрения CSEсредств включает следующие этапы: определение потребностей в CSEсредствах; оценка и выбор CSEсредств; выполнение пилотного проекта; практическое внедрение CSEсредств. Несмотря на все потенциальные возможности CSEсредств существует множество примеров их неудачного внедрения в результате чего эти средства становятся полочным ПО shelfwre. В связи с этим необходимо отметить следующее: CSEсредства не обязательно дают немедленный эффект; он может быть получен только спустя...