Применение языков программирования высокого уровня для реализации численных методов и прикладных программРефераты >> Программирование и компьютеры >> Применение языков программирования высокого уровня для реализации численных методов и прикладных программ
При использовании аналитических методов решение задачи удается выразить с помощью формул. В частности, если математическая задача состоит в решении простейших алгебраических или трансцендентных уравнений, дифференциальных уравнений и т.п., то использование известных из курса математики приемов сразу приводит к цели. К сожалению, на практике это слишком редкие случаи.
Основным инструментом для решения сложных математических задач в настоящее время являются численные методы, позволяющие свести решение задачи к выполнению конечного числа арифметических действий над числами; при этом результаты получаются в виде числовых значений. Многие ЧМ разработаны давно, однако при вычислениях вручную они могли использоваться лишь для решения не слишком трудоемких задач.
С появлением ЭВМ начался период бурного развития ЧМ и их внедрения в практику. Только вычислительной машине под силу выполнить за сравнительно короткое время объем вычислений в миллионы, миллиарды и более операций, необходимых для решения многих задач. При счете вручную человеку не хватило бы жизни для решения одной такой задачи. ЧМ наряду с возможностью получения результата за приемлемое время должен обладать и еще одним важным качеством - не вносить в вычислительный процесс значительных погрешностей.
Численные методы, используемые в данной работе.
При написании программы решения системы из двух нелинейных уравнений мною использовались два известных и широко применяемых численных метода. Это метод Ньютона и метод простых итераций.
Метод Ньютона. Этот метод обладает быстрой сходимостью и сравнительно хорошей точностью вычислений. В случае одного уравнения F(x)=0 алгоритм метода был легко получен путем записи уравнения касательной к кривой y=F(x). В основе метода ньютона для системы уравнений лежит использование разложения функций Fi(x1,x2, .xn) в ряд Тейлора, причем члены, содержащие вторые (и более высоких порядков) производные, отбрасываются.
Пусть приближенные значения неизвестных системы уравнений
F1(x1,x2, .xn)=0,
F2(x1,x2, .xn)=0,
(1)
Fn(x1,x2, .xn)=0,
(например, полученные на предыдущей итерации) равны соответственно a1,a2, .an. Задача состоит в нахождении приращений (поправок) к этим значениям Dx1, Dx2, , Dxn, благодаря которым решение системы (1) запишется в виде:
xi=ai+ Dx1, x2=a2+ Dx2, .,xn,=an+ Dxn. (2)
Проведем разложение левых частей уравнений (1) в ряд Тейлора, ограничиваясь лишь линейными членами относительно приращений:
F1(x1,x2, .xn) »F1(a1, .an)+
F2(x1,x2, .xn) »F2(a1, .an)+
Fn(x1,x2, .xn) »Fn(a1, .an)+.
Поскольку в соответствии с (1) левые части этих выражений должны обращаться в нуль, то приравняем нулю и правые части. Получим следующую систему линейных алгебраических уравнений относительно приращений:
=-F1
=-F2 (2)
=-Fn
Значения F1,F2, .,Fn и их производные вычисляются при x1=a1, x2=a2, .xn=an.
Определителем системы (2) является якобиан:
J=
Для существования единственного решения системы (2) он должен быть отличным от нуля на каждой итерации.
Таким образом, итерационный процесс решения системы уравнений (1) методом Ньютона состоит в определении приращений Dx1, Dx2, . Dxn, к значениям неизвестных на каждой итерации. Счет прекращается, если все приращения становятся малыми по абсолютной величине: max| Dxi|< e. В методе
i
Ньютона также важен выбор начального приближения для обеспечения хорошей сходимости. Сходимость ухудшается с увеличением числа уравнений системы.
В качестве примера рассмотрим использование метода Ньютона для решения системы двух уравнений
F1(x,y)=0, (3)
F2(x,y)=0.
Пусть приближенные значения неизвестных равны a,b. Предположим, что якобиан системы (3) при x=a; y=b отличается от нуля, т.е.:
J=¹0.
Тогда следующие приближения неизвестных можно аписать в виде
x=a-(F1
Величины, стоящие в правой части, вычисляются при x=a, y=b.
При программировании данного метода в качестве исходных данных задаются начальные приближения неизвестных a,b, погрешности e. Если итерации сойдутся, то выводятся значения x,y; в противном случае происходит вывод x,y по мере работы программы до прерывания ее пользователем.
Метод простой итерации.
Систему уравнений (1) представим в виде
x1=f1(x1 .xn),
x2=f2(x1 .xn), (4)
.
xn=fn(x1 .xn).
Алгоритм решения этой системы методом простой итерации напоминает метод Гаусса - Зейделя, используемый для решения систем линейных уравнений.
Пусть в результате предыдущей итерации получены значения неизвестных x1=a1, x2=a2, ., xn=an. Тогда выражения для неизвестных на следующей итерации имеют вид
x1=f1(a1,a2, .,an),
x2=f2(x1,a2, .,an),
xi=fi(xi, .,xi-1,ai, .,an),
xn=fn(x1, .,xn-1,an).
Итерационный процесс продолжается до тех пор, пока изменения всех неизвестных в двух последовательных итерациях не станут малыми, т.е. абсолютные величины их разностей не станут меньшими заданного малого числа.
При использовании данного метода успех во многом определяется удачным выбором начальных приближений неизвестных: они должны быть достаточно близкими к истинному решению. В противном случае итерационный процесс может не сойтись.
Часть первая.
Программа решения системы нелинейных уравнений методами Ньютона и простых итераций.
Общие сведения. Данная программа разработана как учебная и в силу этого не имеет кодового обозначения предусмотренного ГОСТом 19.402-78 и представляет собой исполняемый файл kursach.ехе.
Для функционирования программы необходим персональный компьютер с установленной операционной системой MS-DOS 3.30 и выше или полностью совместимой с ней.
Исходный текст программы написан на языке программирования высокого уровня С++ фирмы Borland версии 3.1 для DOS и WINDOWS и содержится в файле kursach.срр в форме пригодной к использованию его как текстового документа в среде ДОС. Исходный текст программы приведен в приложении 1.в
Функциональное назначение. Данная программа решает систему нелинейных уравнений методами Ньютона и простых итераций. Программа не является универсальной и решает только заложенную в неё систему только из двух нелинейных уравнений.