Решение систем нелинейных уравнений

Методы решения нелинейного уравнения. Последовательный показ работы проекта на вычисление корней уравнения методом итераций, сравнение результатов программы с решением в математическом пакете 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.