|
Разработка программного обеспечения для решения уравнений с одной переменной методом Ньютона (касательных) |
Разработка программного обеспечения для решения уравнений с одной переменной методом Ньютона (касательных)
54 ВВЕДЕНИЕВ данный момент существует много программ для решения уравнений, вычисления интегралов и дифференциалов: MathCAD, MATLAB, и т.д. Они имеют высокую точность вычисления, высокую функциональность, но имеют и свои недостатки. Главные из них - сложный непонятный интерфейс, высокая многофункциональность недоступна рядовому пользователю. Рынок нуждается в более простых аналогах приведенных выше программ. Созданный программный продукт способен решать уравнения с одной переменной методом Ньютона (касательных). Он прост в эксплуатации, имеет интуитивно понятный интерфейс и способен выстраивать график уравнения, что является очень важным для пользователя. Программа будет полезна всем, как студентам высших учебных заведений, так и школьникам. 1. ПОСТАНОВКА ЗАДАЧИЦель создания программного продуктаГлавной целью работы является разработка программы способной решать уравнения с одной переменной методом Ньютона (касательных), что должно являться пособием для студентов высших учебных заведений и для учащихся математических классов среднеобразовательных школ в снижении ненужной нагрузки, связанной с многочисленными массивами вычислений. 1.2. Постановка задачиВ данном программном продукте необходимо реализовать решение двух видов уравнений: y(x) =aЧln(bЧx), y(x) =ax2+bx+c. Вместо коэффициентов должны использоваться параметры a, b, c, которые принимают значения, вводимые пользователем. Для нахождения корней, обязательным является указание промежутков, на которых определена функция, поэтому пользователь обязательно вводит промежутки функции m, n. Метод Ньютона является итерационным методом, следовательно, должна указываться погрешность вычисления е. Обязательным является построение графика выбранной функции на заданном промежутке. 2. МАТЕМЕТИЧЕСКАЯ МОДЕЛЬДисциплина "Численные методы" содержит набор методов и алгоритмов приближенного (численного) решения разнообразных математических задач, для которых точное аналитическое решение либо не существует, либо слишком сложно для использования на практике. При численном решении задач всегда возникает погрешность. Выделяют абсолютную и относительную погрешность. Пусть р - точное значение искомого ответа, а p? - приближённое значение, полученное с помощью численного метода. Тогда - абсолютная погрешность, - относительная погрешность. На первом этапе необходимо найти отрезок [a,b], на котором функция имеет ровно один корень. На втором этапе происходит уточнение корня на отрезке с заданной точностью с помощью одного из численных методов. Метод, реализуемый в РУОП, называется методом Ньютона. Другое название метода - метод касательных. Начальное условие: Дано: уравнение f(x) =0,где f(x) C'' [m,n], f(m) f(n) <0,f'(x) и f''(x) знакопостоянны на отрезке [m,n] ; точность . Найти: решение уравнения с заданной точностью. Пусть корень где - некоторое приближение к корню, - необходимая поправка. Разложим f(x) линейно в ряд Тейлора в окрестности xn (что соответствует замене функции в точке на касательную): f(о) =0=f(xi+hi) ?f(xi) +f'(xi) hi. Отсюда: . Закон получения приближений к корню: (2.1) Начальное приближение x0 выбирается из условия: . (2.2) Графическая иллюстрация метода приведена на рисунке 2.1. Начальная точка в этом случае совпадает с n. Рисунок 2.1. - Метод НьютонаИдея метода заключается в том, что последовательность приближений к корню строится путем проведения касательных к графику функции и нахождения их точек пересечения с осью ОХ. Алгоритм метода. Шаг 1. Найти первое приближение к корню x0 по формуле (2.2). Шаг 2. Находить следующие приближения к корню по формуле (2.1), пока не выполнится условия окончания: |xi-xi+1|<. Последнее найденное приближение и будет корнем. 3. ОПИСАНИЕ И ОБОСНОВАНИЕ ВЫБОРА МЕТОДА РЕШЕНИЯДля обоснования выбора метода Ньютона для нахождения корней уравнений с одной переменной рассмотрим два другие итерационные метода. 3.1. Метод половинного деленияДругое название метода - метод дихотомии. Дано: уравнение f(x) =0,где f(x) C [m,n], f(m) f(n) <0; точность . Найти: решение уравнения с заданной точностью. Другими словами, необходимо найти нуль функции на отрезке с заданной точностью. При этом функция непрерывна и в концах отрезка принимает значения разных знаков. Алгоритм метода: Шаг 1. Отрезок делится пополам. Находится точка с: = (b+a) /2 (см. рисунок 3.1). f(x) f(n) 0mknxf(m) Рисунок 3.1. - Метод половинного деленияШаг 2. Проверяются следующие условия. 1. Если f(c) =0 - корень найден. 2. Если f(a) f(c) <0 - корень на [a,c], поэтому b: =c. 3. Если f(c) f(b) <0 - корень на [c,b], поэтому a: =c. Шаг 3. Проверяется условие |a-b|<е. Если условие выполнено, то считается, что корень найден. В этом случае он принимается равным а (хотя можно принять его равным b или даже (a+b) /2). Иначе переход к шагу 1. 3.2. Метод итерацийДано: уравнение f(x) =0,где f(x) C' [m,n], f(m) f(n) <0,f'(x) знакопостоянна на отрезке [a,b] ; точность . Найти: решение уравнения с заданной точностью. Идея метода заключается в том, что от уравнения f(x) =0 переходим с помощью равносильных преобразований к уравнению вида x=ц(x).Т. е. задача сводится к нахождению абсциссы о точки пересечения двух графиков функции (см. рис.2). В общем случае ц(x) =x-f(x) *C. Рисунок 3.2. - Корень уравненияТочка о, для которой выполняется о= ц(о), называется неподвижной точкой процесса итераций. Очевидно, что эта точка является корнем уравнения f(x) =0. Константа С подбирается таким образом, чтобы функция ц(x) удовлетворяла условиям сходимости метода итераций: 1) - является непрерывной и дифференцируемой на [m,n] ; 2) значения ; 3) для . Если , то С нужно выбирать так, чтобы и для . Метод состоит в построении последовательности приближений к корню. В качестве начального приближения выбирается любая точка x0 [a,b]. Для определенности можно брать середину отрезка [a,b]. В качестве формулы получения последующих приближений выступает сама ц(x): Алгоритм метода: Шаг 1. Найти первое приближение к корню x0 как середину отрезка [m,n]. Шаг 2. Находить следующие приближения к корню по формуле, пока не выполнится условия окончания: |xi - xi+1|<. Последнее найденное приближение и будет корнем. 3.3. Обоснование выбора методаПри рассмотрении обоих методов видно, что скорость сходимости метода Ньютона (касательных) выше скорости сходимости метода секущих (хорд) и метода итераций, следовательно, оптимальным для реализации в программе является метод Ньютона. 4. ОБОСНОВАНИЕ ВЫБОРА ЯЗЫКА ПРОГРАММИРОВАНИЯРеализация поставленной задачи совершается на языке программирования Turbo Pascal 7.0. Система программирования Turbo Pascal, разработанная американской корпорацией Borland, остаётся одной из самых популярных систем программирования в мире. Этому способствует простота лежащая в основе языка программирования Pascal, а также поддержка графического и текстового режимов, что делает Turbo Pascal мощной современной профессиональной системой программирования. 5. ОПИСАНИ ПРОГРАММНОЙ РЕАЛИЗАЦИИ5.1 Информационные потокиДля наглядности работы программы, движению информации и взаимодейстия програмной части с аппаратной, разработана схема информационных потоков (рисунок 5.1). ПРОГРАММАРисунок 5.1 - Схема информационных потоковРисунок 5.1 - Схема информационных потоков (продолжение) Условные обозначения: - Данные, ввидение которых возможно как из файлов, расположенных нажёстком диске, так и с клавиатуры; -Данные, выводимые на экран; Данные, вводимые из файла. 5.2. Описание функционирования программыПри запуске программы на экране появляется титульный лист, отображающий информацию о студенте; далее загружается меню программы, состоящее из пяти пунктов: Рисунок 5.2 - Схема функционирования программы- Справка- y(x) =a*ln(b*x) - y(x) =a*x^2+b*x+c- Построение графика- ВыходПункт "Справка" включает в себя информацию о методе Ньютона. Пункты "y(x) =a*ln(b*x)" и "y(x) =a*x^2+b*x+c" представляют собой решения уравнений, где задаются промежутки m и n, параметры a, b(, c), погрешность E и выполняется сохранение в файлы. Пункт "Построение графика" строит график выбранного уравнения в зависимости от введённых параметров и промежутков. Пункт "Выход" - выход из программы. Схема функционирования представлена на рисунке 5.2. 5.3. Описание процедур и функций программыProcedure title () - выводит титульную страницу на экран монитора; Procedure graphica () - инициализирует графику. Procedure pro () - содержит в себе переменную р, которая отвечает за номер выделяемой кнопки, передаётся как параметр в procedure key (p) и в procedure eat (p, bool), а также содержит в себе переменную bool, отвечающую за цикл в рамках procedure pro, передаётся как параметр в procedure eat (p2, bool); Procedure eat (p2: byte; var bool: boolean) - в зависимости от параметра p2 выполняет один из пяти вариантов дальнейших действий программы. Переменная bool передаётся как параметр обратно в procedure pro; Procedure key (p1: byte) - выстраивает графическую картинку меню в зависимости от параметра р1; Procedure equation_1 () - решение уравнения вида y(x) =aЧln(bЧx). Переменная Е (погрешность) принимается как параметр из procedure load_file_3 (E), передаёт переменную Е как параметр в procedure save_file (E); Procedure equation_2 () - решение уравнения вида y(x) =aЧx2+bЧx+c. Переменная Е (погрешность) принимается как параметр из procedure load_file_3 (E), переменная Е передаётся как параметр в procedure save_file (E); Procedure load_file_1 () - загружает переменные m и n (промежутки функции) из файла, либо обеспечивает их ввод с клавиатуры, в зависимости от желания пользователя. m, n - глобальные переменные в рамках программы; Procedure load_file_2 () - загружает переменные a и b либо a, b, c (в зависимости от вида функции) (коэффициенты уравнения) из файла, либо обеспечивает их ввод с клавиатуры, в зависимости от желания пользователя. a, b, c - глобальные переменные в рамках программы; Procedure load_file_3 (var E: real) - загружает переменную Е (погрешность функции) из файла, либо обеспечивает их ввод с клавиатуры, в зависимости от желания пользователя. Е передаётся как параметр и принимается как переменная в procedure equation_1 и equation_2; Procedure save_file (E: real) - сохраняет переменные a, b, (c,) m, n - глобальные в рамках программы в файлы либо не сохраняет, сохраняет переменную Е в виде параметра в файл, либо не сохраняет; Procedure groffunc () - выстраивает график по значениям глобальных в рамках программы переменных a, b, (c,) m, n, с отмеченными на оси х приближениями и корнем уравнения. Содержит в себе function f (x: real): real, высчитывающую значение одной из функций в зависимости от аргумента х. Переменные у0 (масштаб) и у2 (максимальное значение функции) передаются в виде параметров в procedure setka (y0, y2); Procedure setka (yn: integer; y2: real) - выстраивает координатную сетку и оцифровку осей x и y в зависимости от глобальных в рамках программы переменных m, n и параметров yn и y2; Procedure help () - предоставляет пользователю непосредственную методологическую помощь. 5.4. Схема взаимодействия процедур программыДля наглядности работы подпрограмм программы необходимо изобразить в виде схемы их взаимодействие между собой. Взаимодействие подпрограмм изображено на рисунке 5.3. Рисунок 5.3 - Взаимодействие процедур программыУсловные обозначения: - запуск процедуры на которую указывает стрелка, из процедуры из которой она исходит. 5.5. Перечень обозначений5.5.1 Обозначения вводимых данныхm, n - промежутки функции; a, b, c - коэффициенты уравнения, представленные в виде параметров; E - погрешность, аналог е в разделе "Описании математической модели" и в разделе "Описание (и обоснование выбора) метода решения". 5.5.2 Обозначения выводимых данныхy(x) =a*ln(b*x), y(x) =a*x^2+b*x+c - уравнения используемые в программе; x - неизвестная, корень уравнения; ln - логарифм; x^2 - неизвестная x в степени 2. 5.6 Входные и выходные данные5.6.1 Входные данныеy(x) =a*ln(b*x), y(x) =a*x^2+b*x+c - функция; m, n: real - левый и правый промежутки функции соответственно; a, b, c: real - параметры, коэффициенты уравнения; E: real - погрешность; "Помощь и справочная информация". 5.6.2 Выходные данныеx1: real - значение корня уравнения; st: string - текстовые сообщения, возникающие в процессе выполнения программы (ошибки и варианты дальнейшего продолжения). 5.6.3 Промежуточные данныеBool_of: Boolean - определяет цикл выполнения алгоритма решения; mass: real - массив [1. . 20] ; number: byte - глобальная переменная, номер функции; code_of: byte - переменная, отвечающая за необходимость поиска корня уравнения; root: real - разность приближений. 5.7. Алгоритм решения задачи5.7.1. Алгоритм нахождения корня уравнения y(x) =aЧln(bЧx) Алгоритм решения уравнения вида y(x) =aЧln(bЧx) приводится на рисунке 5.4. выполнятьвыполнятьесли (a = 0) то выводnumber: =0; иначевыполнятьi: =1; если (a*ln(b*m) *(-a/sqr(m))) > 0 то mass [i]: =m; code_of: =1; иначеРисунок 5.4 - Алгоритм решения уравнения вида y(x) =aЧln(bЧx)
Страницы: 1, 2, 3
|
|
|
© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент. |
|
|