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

Автор работы: Пользователь скрыл имя, 07 Ноября 2012 в 09:28, курсовая работа

Описание работы

Часто приходится находить корни уравнений вида , где f(x) определена и непрерывна на некотором интервале.
Если f(x) представляет собой многочлен, то уравнение - алгебраическое, если в функцию входят функции типа: тригонометрических, логарифмических, показательных и т.п., то уравнение называется трансцендентным.

Содержание работы

ВВЕДЕНИЕ 2
ГЛАВА 1. ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ 3
1.1.Предпроектное обследование 3
1.2.Методы решения нелинейного уравнения 3
ГЛАВА 2. РАЗРАБОТКА ПРОГРАММЫ «РЕШЕНИЕ СИСТЕМЫ НЕЛИНЕЙНЫХ УРАВНЕНИЙ» 5
2.1.Постановка задачи 5
2.2.Функциональная структура программа 5
2.3. Математическое обеспечение программы 6
2.4. Разработка алгоритма программы 7
2.5. Описание пользовательского интерфейса 11
2.6. Техническое обеспечение программы 13
ЗАКЛЮЧЕНИЕ 14
ПЕРЕЧЕНЬ ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 15
ПРИЛОЖЕНИЕ А 16

Файлы: 1 файл

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

— 479.00 Кб (Скачать файл)

СОДЕРЖАНИЕ

 

 

ВВЕДЕНИЕ

 

Данный проект разработан для вычисления корней нелинейного уравнения методом итераций. Программа написана на языке высокого уровня Delphi.

……

Пояснительная записка  состоит из следующих разделов:  теоретическая часть – теория, описывающая правила вычисления коней нелинейного уравнения методом итераций, а также блок-схема метода, и практической реализации - создание и описание элементов (частей) из которых состоит данная программа, последовательный показ работы проекта на вычисление корней уравнения методом итераций, сравнение результатов программы с решением в математическом пакете Mathcad 14.

 

ГЛАВА 1. ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ

    1. Предпроектное обследование

Часто приходится находить корни уравнений вида , где f(x) определена и непрерывна на некотором интервале.

Если f(x) представляет собой многочлен, то уравнение - алгебраическое, если в функцию входят функции типа: тригонометрических, логарифмических, показательных и т.п., то уравнение называется трансцендентным.

    1. Методы решения нелинейного уравнения

Решение уравнения вида разбивается на два этапа:

  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.2.Функциональная структура программа

Соответственно описанной  выше методике составим блок–схему решения  уравнения методом итераций[2].

2.3. Математическое обеспечение  программы

Для вычисления корней уравнения  используется подпрограмма – функция 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.4. Разработка алгоритма программы

В главном окне выберем  пункт меню «Визуализация»;

Перед нами появляется окно, где демонстрируется  график функции, изоброженного красным  цветом, при этом предусмотрена возможность  визуализации итерационного процесса, зеленым цветом, посредством нажатия кнопки «Итерации».

Построение графика осуществляется в ниже следующем программном  коде:

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.5. Описание пользовательского интерфейса

Сначала создадим главное  окно программы, без которой нам  никак нельзя обойтись [1]. Сделаем в нем главное меню, состоящее из пунктов «Визуализация», «Исследование», «Титульный лист», «Выход». Далее нам будет необходимы поля для ввода и вывода данных, создадим поля «Начало промежутка», «Конец промежутка», «Точность», а так же поле «Корень», в которое после нажатия кнопки «Решение» будет выводиться ответ. Это окно будет являться опорным пунктом для наших дальнейших действий. Обозначим его как Form1.(Рис. 2)

 

Рисунок 7 - Form1

Далее, создадим другие «формы»  для последующей работы, на которые  в дальнейшем просто будем ссылаться:

· окно для визуализации метода итераций – Form2. Выводится при выборе пункта меню «Визуализация»:

 

Рисунок 8 - Form2

При нажатии на кнопку «Итерации» появится график, отражающий итерационный процесс

· окно заставки, появляющееся при запуске программы – Form3:

 

Рисунок 9 - Form3

· окно титульного листа – Form4:

Рисунок 10 - Form4

 

Теперь, после того как  мы создали все необходимые формы, можем приступать к создании программного кода, в котором будем ссылаться  на каждую из них [4]. В этом коде нам необходимо будет:

¾ для Form1 - обеспечить безошибочное подключение ко всем остальным формам.

¾ для Form2 -обеспечить вывод графика и визуализацию итерационного процесса.

¾ для Form3, Form4- включить в программу.

2.6. Техническое обеспечение программы 
                                                        ЗАКЛЮЧЕНИЕ

 

Разработан проект по вычислению корней нелинейных уравнений методом итераций, в среде программирования 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('Çàäàéòå äðóãîå  íà÷àëî ïðîìåæóòêà',mtinformation,[mbok],0);

    break;

  end;

until (d<=eps)or (x1>=xk);

if x1>=xk then

  j:=messagedlg('Íà çàäàííîì ïðîìåæóòêå êîðíåé íåò!',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('Íà÷àëî è êîíåö ïðîìåæóòêà'+#10#13+'äîëæíû áûòü îòëè÷íû îò íóëÿ',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;

Информация о работе Решение систем нелинейных уравнений