Решение систем нелинейных уравнений
Методы решения нелинейного уравнения. Последовательный показ работы проекта на вычисление корней уравнения методом итераций, сравнение результатов программы с решением в математическом пакете Mathcad 14. Алгоритм и математическое обеспечение программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.05.2013 |
Размер файла | 999,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1. Исследование предметной области
1.1 Предпроектное обследование
Часто приходится находить корни уравнений вида , где f(x) определена и непрерывна на некотором интервале.
Если f(x) представляет собой многочлен, то уравнение - алгебраическое, если в функцию входят функции типа: тригонометрических, логарифмических, показательных и т.п., то уравнение называется трансцендентным.
1.2 Методы решения нелинейного уравнения
Решение уравнения вида разбивается на два этапа:
1. отделение корней, т.е. отыскание достаточно малых областей, в каждой из которых заключен один и только один корень уравнения;
2. вычисление выделенного корня с заданной точностью.
Первый этап более сложный, в этом случае может помочь построение приближенного графика функции с анализом на монотонность, смену знака, выпуклость и т.д.
Для вычисления выделенного корня существует множество методов, например:
- метод итераций;
- метод половинного деления;
- метод Ньютона.
На рисунке 1 представлен график функции
y=x-2+sin (1/x)
Рисунок 1 - График функции y=x-2+sin (1/x)
В данной курсовой работе будет рассмотрено нахождение корней уравнения x-2+sin (1/x)=0 методом итераций.
Уравнение можно представить в виде: . То есть
x-2+sin (1/x)=0> x=2-sin (1/x)
Далее на отрезке [a, b], где функция имеет корень, выбирается произвольная точка x0 и далее последовательно вычисляется:
Процесс вычисления значений xk называется итерационным процессом.
Если на отрезке [a, b] выполнено условие |цґ(x)| ? q <1, то итерационный процесс сходится к корню уравнения .
Если необходимо вычислить корень с точностью е, то процесс итераций продолжается до тех пор, пока для двух последовательных приближений xn и xn-1 не будет выполнено:
,
где е задается погрешностью корня x*.
2. Разработка программы «решение системы нелинейных уравнений»
2.1 Функциональная структура программа
Соответственно описанной выше методике составим блок-схему решения уравнения методом итераций [2].
Размещено на http://www.allbest.ru/
2.2 Математическое обеспечение программы
Для вычисления корней уравнения используется подпрограмма - функция iter (x0, xk, eps:real): real. Она составлена по блок схеме представленной выше (1 теоритическая часть). Функции нужно сообщить начало и конец промежутка, результат функции корень уравнения;
function iter (x0, xk, eps:real): real;
var
x1, y, d, j:real;
begin
x1:=x0;
repeat
if (fnsh(x1)<1) then begin
y:=form1.fn(x1);
d:=abs (y-x1);
x1:=y;
end else begin
j:=messagedlg ('Задайте другое начало промежутка', mtinformation, [mbok], 0);
break;
end;
until (d<=eps) or (x1>=xk);
if x1>=xk then
j:=messagedlg ('На заданном промежутке корней нет!', mtinformation, [mbok], 0)
else
iter:=y;
end;
Уравнение задано подпрограммой - функцией tform1.fn (x:real): real
function tform1.fn (x:real): real;
begin
fn:=2-sin (1/x);
end;
Производная задана подпрограммрй - функцией fnsh (x:real): real;
function fnsh (x:real): real;
begin
fnsh:=cos (1/x)/sqr(x);
end;
В обоих случаях начальные данные это значение переменной x. В первом случае результат значение функции, во втором значение производной функции.
2.3 Разработка алгоритма программы
В главном окне выберем пункт меню «Визуализация»;
Перед нами появляется окно, где демонстрируется график функции, изображённого красным цветом, при этом предусмотрена возможность визуализации итерационного процесса, зеленым цветом, посредством нажатия кнопки «Итерации».
Построение графика осуществляется в ниже следующем программном коде:
procedure TForm2. FormCreate (Sender: TObject);
var
i:real;
begin
series1. Clear;
Series2. Clear;
i:=1;
While i<=1.5 do begin
if i<>0 then
series1. AddXY (i, i-2+sin (1/i), '', clred);
i:=i+0.0001;
end;
end;
График строится в момент создания Form2. Построение ведется на промежутке от 1 до 1,5. В цикле переменная i меняется в этих пределах с шагом 0,0001, и строится график от значения переменной i.
При нажатии кнопки итерации выполнятся следующий код:
procedure TForm2. Button1Click (Sender: TObject);
begin
x1:=strtofloat (form1.labelededit1.text);
xk:=strtofloat (form1.labelededit2.text);
eps:=strtofloat (form1.labelededit3.text);
series2. Clear;
Timer1. Enabled:=true;
end;
После чего запускается таймер, который повторяет свои действия через определенный промежуток времени.
procedure TForm2. Timer1Timer (Sender: TObject);
begin
y:=form1.fn(x1);
series2. AddXY (x1, y-x1,'', clgreen);
d:=abs (y-x1);
x1:=y;
if d<eps then timer1. Enabled:=false;
end;
Здесь строится итерационная кривая, показывающая последовательное приближение к корню уравнения до определенной точности. Основой кода построения итерационной кривой является блок - схема из теоретической части.
Запуская программу, появляется заставка:
Рисунок 2 - Заставка
Спустя 2 секунды окно заставки закрывается и появляется главное окно программы:
Рисунок 3. Главное окно
На нем, как и задумывалось, обозначены: главное меню состоящее из пунктов «Визуализация», «Титульный лист», «Выход», а также поля «Начало промежутка», «Конец промежутка», «Точность», а также поле «Корень», в которое после нажатия кнопки «Решение» будет выводится ответ.
Выбирая «Титульный лист», открывается окно, из которого узнаем о назначении программы, ее разработчике, а так же о проверяющем преподавателе.
Рисунок 4 - Титульный лист
В поля, расположенные в главном окне вводим соответствующие их названию данные, после чего нажимаем кнопку «Решение» и получаем результат. В программном коде предусмотрена обработка исключительных ситуаций, при возникновении которых выводится информационное окно с рекомендациями по устранению возникших неполадок.
Выбирая пункт меню «Исследование», мы открываем окно, где приведены результаты решения уравнения в математическом пакете Mathcad 14 и в созданной мной программе, а также разность этих значений:
Рисунок 5 - Исследование
Результаты записываются в текстовый Файл «issled.txt»
Выбирая пункт меню «Визуализация», отображается график уравнения и при нажатии кнопки итерации отображается итерационная кривая:
Рисунок 6 - Визуализация
2.4 Описание пользовательского интерфейса
Сначала создадим главное окно программы, без которой нам никак нельзя обойтись [1]. Сделаем в нем главное меню, состоящее из пунктов «Визуализация», «Исследование», «Титульный лист», «Выход». Далее нам будет необходимы поля для ввода и вывода данных, создадим поля «Начало промежутка», «Конец промежутка», «Точность», а так же поле «Корень», в которое после нажатия кнопки «Решение» будет выводиться ответ. Это окно будет являться опорным пунктом для наших дальнейших действий. Обозначим его как Form1. (Рис. 2)
Рисунок 7 - Form1
Далее, создадим другие «формы» для последующей работы, на которые в дальнейшем просто будем ссылаться:
окно для визуализации метода итераций - Form2. Выводится при выборе пункта меню «Визуализация»:
Рисунок 8 - Form2
При нажатии на кнопку «Итерации» появится график, отражающий итерационный процесс
окно заставки, появляющееся при запуске программы - Form3:
Рисунок 9 - Form3
окно титульного листа - Form4:
Рисунок 10 - Form4
Теперь, после того как мы создали все необходимые формы, можем приступать к создании программного кода, в котором будем ссылаться на каждую из них [4]. В этом коде нам необходимо будет:
для Form1 - обеспечить безошибочное подключение ко всем остальным формам.
для Form2 - обеспечить вывод графика и визуализацию итерационного процесса.
для Form3, Form4 - включить в программу.
Заключение
Разработан проект по вычислению корней нелинейных уравнений методом итераций, в среде программирования Delphi.
Спроектирован интерфейс программы и написан программный код на языке высокого уровня.
Проведена визуализация метода.
Также произведен вычислительный эксперимент и сравнение результатов решения полученных в математическом пакете Mathcad 14 и методом итераций. При подстановке в уравнение полученных корней значения функции более близки к нулю у корня, полученного в Mathcad 14, но стоит отметить, что значения корня совпадают до заданной точности.
Перечень литературы
1. Бобровский С.И. Delphi7. Учебный курс. - СПб.: Питер, 2003. - 736 с.
2. Информатика. Базовый курс. 2-е издание / Под ред. С.В. Симоновича. - СПб.: Питер, 2005. - 640 с.
3. Пискунов Н.С. Дифференциальное и интегральное исчисления: Учебник для втузов. В 2-х т. Т.1: - М.: Интеграл - Пресс, 2001. - 416 с.
4. Фаронов В.В. Delphi. Программирование на языке высокого уровня. Учебник для вузов. - СПб.: Питер, 2003. - 640 с.
5. Гагарин, Л.Г. Основы технология разработки программного обеспечения: учеб. пособие для студ. среднего проф. образования /Л.Г. Гагарин. - М.: Форум - Инфа, 2006. - 252 с.
6. Гагарин, Л.Г. Технология разработки программных продуктов: учеб. пособие для студ. среднего проф. образования /Л.Г. Гагарин., Е.В. Кокорев, Б.Д. Виснадул. - М.: Форум - Инфа, 2008. - 465 с.
7. Голицын О.Л., Партыко Г.Л., Попов И.И. Программное обеспечение. - М.: Форум - Инфа, 2006. - 784 с.
8. Основы теории коммуникации: учебник / М.А. Василик, М.С. Вершинин, В.А. Павлов / под ред. проф. М.А. Василика. - М.: Гардарики, 2006. - 615 с.
9. ГОСТ 7.1-2003 Библиографическая запись. Библиографическое описание. Общие требования и правила составления. - Введ. 2004-01-07. - М.: Издательство стандартов, 2004. - 156 с.
10. Боголюбов, А.Н. О вещественных резонансах с неоднородным заполнением / А.Н. Боголюбов, А.Л. Делицын, М.Д. Малых // Вест. Моск. ун-та. Сер. 3. Физика. Астрономия. - 2002. - №5. - С. 23-25.
Приложение А
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ImgList, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
N4: TMenuItem;
procedure Button1Click (Sender: TObject);
procedure N1Click (Sender: TObject);
procedure N2Click (Sender: TObject);
procedure N3Click (Sender: TObject);
function fn (x:real):real;
procedure N4Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit4, Unit5;
{$R *.dfm}
function tform1.fn (x:real): real;
begin
fn:=2-sin (1/x);
end;
function fnsh (x:real): real;
begin
fnsh:=cos (1/x)/sqr(x);
end;
function iter (x0, xk, eps:real): real;
var
x1, y, d, j:real;
begin
x1:=x0;
repeat
if (fnsh(x1)<1) then begin
y:=form1.fn(x1);
d:=abs (y-x1);
x1:=y;
end else begin
j:=messagedlg ('Caaaeoa a?oaia ia?aei i?iia?ooea', mtinformation, [mbok], 0);
break;
end;
until (d<=eps) or (x1>=xk);
if x1>=xk then
j:=messagedlg ('Ia caaaiiii i?iia?ooea ei?iae iao!', mtinformation, [mbok], 0)
else
iter:=y;
end;
procedure TForm1. Button1Click (Sender: TObject);
var
i:word;
f: Textfile;
begin
LabeledEdit4. Text:='';
if (LabeledEdit1. Text='') or (LabeledEdit2. Text='') then
i:=messagedlg ('Ia?aei e eiiao i?iia?ooea'+#10#13+'aie?iu auou ioee?iu io ioey', mtwarning, [mbok], 0)
else LabeledEdit4. Text:=floattostr (iter(strtofloat (LabeledEdit1. Text), strtofloat (LabeledEdit2. Text), strtofloat (LabeledEdit3. Text)));
form5. StringGrid1. Cells [1,1]:='1.307662716';
form5. StringGrid1. Cells [1,2]:=LabeledEdit4. Text;
form5. StringGrid1. Cells [2,1]:=floattostr (1.307662716-2+sin (1/1.307662716));
form5. StringGrid1. Cells [2,2]:=floattostr (strtofloat(LabeledEdit4. Text) - 2+sin (1/strtofloat (LabeledEdit4. Text)));
assignfile (f, 'issled.txt');
rewrite (f, 'issled.txt');
writeln (f, ' '+ form5. StringGrid1. Cells [1,0]+' '+form5. StringGrid1. Cells [2,0]);
writeln (f, form5. StringGrid1. Cells [0,1]+' '+form5. StringGrid1. Cells [1,1]+' '+form5. StringGrid1. Cells [2,1]);
writeln (f, form5. StringGrid1. Cells [0,2]+' '+form5. StringGrid1. Cells [1,2]+' '+form5. StringGrid1. Cells [2,2]);
closefile(f);
end;
procedure TForm1.N1Click (Sender: TObject);
var
i:word;
begin
form4.show;
end;
procedure TForm1.N2Click (Sender: TObject);
begin
close;
end;
procedure TForm1.N3Click (Sender: TObject);
begin
form2.showmodal;
end;
procedure TForm1.N4Click (Sender: TObject);
begin
form5.show;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeEngine, TeeFunci, Series, TeeProcs, Chart, StdCtrls;
type
TForm2 = class(TForm)
Chart1: TChart;
Series1: TLineSeries;
TeeFunction1: TAddTeeFunction;
Series2: TLineSeries;
Button1: TButton;
Timer1: TTimer;
procedure Timer1Timer (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure Button1Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form2: TForm2;
time:word=0;
x1, y, d, eps, xk:real;
implementation
uses Unit1;
procedure TForm2. FormCreate (Sender: TObject);
var
i:real;
begin
series1. Clear;
Series2. Clear;
i:=1;
While i<=1.5 do begin
if i<>0 then
series1. AddXY (i, i-2+sin (1/i), '', clred);
i:=i+0.0001;
end;
end;
procedure TForm2. Timer1Timer (Sender: TObject);
begin
y:=form1.fn(x1);
series2. AddXY (x1, y-x1,'', clgreen);
d:=abs (y-x1);
x1:=y;
if d<eps then timer1. Enabled:=false;
end;
procedure TForm2. Button1Click (Sender: TObject);
begin
x1:=strtofloat (form1.labelededit1.text);
xk:=strtofloat (form1.labelededit2.text);
eps:=strtofloat (form1.labelededit3.text);
series2. Clear;
Timer1. Enabled:=true;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, jpeg;
type
TForm3 = class(TForm)
Timer1: TTimer;
Image1: TImage;
procedure Timer1Timer (Sender: TObject);
procedure FormCreate (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form3: TForm3;
implementation
uses Unit1;
procedure TForm3. Timer1Timer (Sender: TObject);
begin
Timer1. Enabled:=False;
end;
procedure TForm3. FormCreate (Sender: TObject);
begin
Image1. Picture. LoadFromFile ('zastavka.jpg');
end;
end.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls
type
TForm4 = class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure FormCreate (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form4: TForm4;
implementation
procedure TForm4. FormCreate (Sender: TObject);
begin
Image1. Picture. LoadFromFile ('zastavka.jpg');
end;
end.
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm5 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form5: TForm5;
implementation
procedure TForm5. FormCreate (Sender: TObject);
begin
StringGrid1. Cells [0,1]:='Mathcad 14:';
StringGrid1. Cells [0,2]:='Eoa?aoee:';
StringGrid1. Cells [1,0]:='X';
StringGrid1. Cells [2,0]:='F(X)';
StringGrid1. ColWidths[1]:=200;
StringGrid1. ColWidths[2]:=200;
end;
end.
нелинейный уравнение программа итерация
Размещено на Allbest.ru
...Подобные документы
Разработка проекта по вычислению корней нелинейных уравнений методом итераций, в среде программирования Delphi. Интерфейс программы и ее программный код, визуализация метода. Сравнение результатов решения, полученных в Mathcad 14 и методом итераций.
контрольная работа [1,9 M], добавлен 10.12.2010Разработка с использованием приложения Mathcad алгоритма и программы решения нелинейного уравнения методами касательных, половинного деления и хорд. Решение с помощью ее заданных нелинейных уравнений. Создание графической иллюстрации полученных решений.
курсовая работа [665,7 K], добавлен 22.08.2013Решение нелинейного уравнения шаговым методом, методом половинного деления, методом Ньютона и простой итерации с помощью программы Mathcad. Разбиение промежутка на число n интервалов. Условия сходимости корня. Составление программы для решения на С++.
лабораторная работа [207,5 K], добавлен 10.05.2012Математический алгоритм вычисления корней нелинейного уравнения и его решение методом касательных. Особенности программной реализации решения таких уравнений. Процедура подготовки и решения задачи на ЭВМ, характеристика алгоритма и структуры программы.
курсовая работа [96,6 K], добавлен 02.06.2012Этапы численного решения нелинейных уравнений заданного вида: отделение (изоляция, локализация) корней уравнения аналитическим или графическим способами, уточнение конкретного выделенного корня методом касательных (Ньютона). Решение в системе MathCad.
курсовая работа [271,6 K], добавлен 22.08.2012Реализация решения нелинейного уравнения с заданными параметрами в виде процедуры-подпрограммы. Графический метод отделения корней уравнения. Основные методы уточнения корней уравнения. Описание процедур и функций, общий алгоритм и текст программы.
курсовая работа [1,7 M], добавлен 27.03.2011Особенности решения уравнений с одной переменной методом половинного деления. Оценка погрешности метода простой итерации. Суть решения уравнений в пакете Mathcad. Векторная запись нелинейных систем. Метод Ньютона решения систем нелинейных уравнений.
курсовая работа [2,1 M], добавлен 12.12.2013Отделение корней методом простых интеграций. Дифференцирование и аппроксимация зависимостей методом наименьших квадратов. Решение нелинейного уравнения вида f(x)=0 методом Ньютона. Решение системы линейных уравнений методом Зейделя и методом итераций.
курсовая работа [990,8 K], добавлен 23.10.2011Обзор существующих методов по решению нелинейных уравнений. Решение нелинейных уравнений комбинированным методом и методом хорд на конкретных примерах. Разработка программы для решения нелинейных уравнений, блок-схемы алгоритма и листинг программы.
курсовая работа [435,8 K], добавлен 15.06.2013Разработка программы для нахождения корней нелинейных уравнений несколькими методами: методом хорд, касательных, половинного деления, итераций. Реализации программы с помощью системы программирования Delphi 7. Методика работы пользователя с программой.
курсовая работа [1,3 M], добавлен 11.02.2013Математическое описание, алгоритм и программа вычисления нелинейного уравнения методом дихотомии. Метод половинного деления. Метод поиска корней функции. Написание текста программы с комментариями. Проведение тестовых расчетов. Вывод ответа на экран.
курсовая работа [67,2 K], добавлен 15.02.2016Изучение методов решения нелинейных уравнений таких как: метод Ньютона, модифицированный метод Ньютона, метод Хорд, метод простых Итераций. Реализация программы для персонального компьютера, которая находит решение нелинейного уравнения разными способами.
практическая работа [321,9 K], добавлен 24.06.2012Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.
курсовая работа [832,6 K], добавлен 24.07.2012Изучение численных методов решения нелинейных уравнений, используемых в прикладных задачах. Нахождение корня уравнения методом простой итерации и методом касательных (на примере уравнения). Отделение корней графически. Программная реализация, алгоритм.
курсовая работа [1,7 M], добавлен 15.06.2013Методика реализации решения нелинейного уравнения в виде процедуры-подпрограммы следующими методами: хорд, касательных (Ньютона), простой итерации, половинного деления. Основные методы уточнения корней уравнения. Программное решение задачи, алгоритм.
курсовая работа [4,0 M], добавлен 27.03.2011Отделение действительных корней нелинейного уравнения. Метод хорд и касательных (Ньютона), геометрическая интерпретация. Графическая схема алгоритма. Описание реализации базовой модели в MathCAD. График сравнения числа итераций в зависимости от точности.
курсовая работа [2,0 M], добавлен 16.05.2013Особенности точных и итерационных методов решения нелинейных уравнений. Последовательность процесса нахождения корня уравнения. Разработка программы для проверки решения нелинейных функций с помощью метода дихотомии (половинного деления) и метода хорд.
курсовая работа [539,2 K], добавлен 15.06.2013Нахождение с заданной погрешностью корней уравнения. Оценка скорости сходимости. Нахождение промежутка, в котором содержится какой-либо корень уравнения для методов итераций и Ньютона. Разработка текста компьютерных программ для решения данных уравнений.
лабораторная работа [253,9 K], добавлен 19.12.2012Создание параллельной программы на языке программирования высокого уровня С с расширением MPI и аналогичной программы на OpenMP для решения двумерного уравнения Пуассона итерационным методом Зейделя. Блок-схема алгоритма, анализ работы программы.
контрольная работа [62,9 K], добавлен 06.01.2013Численный метод для решения однородного дифференциального уравнения первого порядка методом Эйлера. Решение систем дифференциальных уравнений методом Рунге–Кутта. Решение краевой задачи. Уравнения параболического типа, а также Лапласа и Пуассона.
курсовая работа [163,5 K], добавлен 27.05.2013