49800

Нахождение корней нелинейного уравнения

Курсовая

Информатика, кибернетика и программирование

Блок-схемы реализующие численные методы -для метода дихотомии: Блок-схема для метода хорд: Блок-схема для метода Ньютона: Листинг программы unit Unit1; interfce uses Windows Messges SysUtils Vrints Clsses Grphics Controls Forms Dilogs TeEngine Series ExtCtrls TeeProcs Chrt Menus OleCtnrs StdCtrls xCtrls OleCtrls VCF1 Mth; type TForm1 = clssTForm GroupBox1: TGroupBox; OleContiner2: TOleContiner; MinMenu1: TMinMenu; N1: TMenuItem; Chrt1: TChrt; Series1:...

Русский

2014-01-08

3.95 MB

106 чел.

РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ НЕФТИ И ГАЗА им. И.М. ГУБКИНА

Кафедра информатики

Курсовая работа

по дисциплине «Информатика».                                                                                        

Тема: «Нахождение корней нелинейного уравнения»

Выполнил: студентка

Манепова А. М

группы: ГИ-12-05

Проверил:

                                                 Москва, 2013


Оглавление

[1]  

[2]
Задание на выполнение курсовой работы.

[3]
Теория нахождения корней нелинейного уравнения. Описание используемых численных методов.

[4]                           1. Метод половинного деления (дихотомии)

[4.1] 2.Метод хорд

[4.2] 3. Метод Ньютона

[4.3] Расчеты в математическом пакете Mat lab

[5]
Отчет о результатах вычисления приближенного значения корня уравнения в MS Excel.  

[5.1] Результаты расчета с использованием Побора Параметра

[5.2]
Результаты расчета с использованием Поиска Решений

[6]
Описание приложения созданного в среде Delphi.

[6.1]
Блок – схемы реализующие численные методы

[6.2] Листинг программы

[6.3]
Изображение окна приложения

[7]
Анализ полученных результатов

[8]
Литература.

 


Задание на выполнение курсовой работы.

  1.  расчет, выполненный в математическом пакете Matlab (Mathematica 5.) (файл-функция для описания нелинейного уравнения, график, решение в символьном и численном виде).
  2.  Нахождение корней нелинейного уравнения  в электронных таблицах MS Excel (вид нелинейного уравнения, график нахождения корней нелинейного уравнения, найти корень нелинейного уравнения, используя средства условного анализа: «Побор параметра», «Поиск решения»).
  3.  Создание приложения для нахождения корней нелинейного уравнения в среде Delphi (вид нелинейного уравнения, график на заданном интервале, для каждого метода: результаты табулирования функции на заданном интервале с заданным шагом,  для каждого метода численного метода пользовательскую подпрограмму с передачей параметров). Результаты отобразить на форме в виде таблицы и в файле. Предусмотреть изменение точности значения (Е <= 0,001).
  4.  вид уравнения  


Теория нахождения корней нелинейного уравнения. Описание используемых численных методов.

Пусть задана функция , непрерывная вместе со своими несколькими производными. Требуется найти все или некоторые вещественные корни уравнения

.
Данная задача распадается на несколько подзадач. Во-первых, необходимо определить количество корней, исследовать их
 характер и расположение. Во-вторых, найти приближенные значения корней. В-третьих, выбрать из них интересующие нас корни и вычислить их с требуемой точностью e. Первая и вторая задачи решаются, как правило, аналитическими или графическими методами. В случае, когда ищутся только вещественные корни уравнения, полезно составить таблицу значений функции . Если в двух соседних узлах таблицы функция имеет разные знаки, то между этими узлами лежит нечетное число корней уравнения (по меньшей мере, один). Если эти узлы близки, то, скорее всего, корень между ними только один. 
Найденные приближенные значения корней можно уточнить с помощью различных итерационных методов.

Рассмотрим три метода: 1) метод дихотомии (или деление отрезка пополам); 2) метод простой итерации и 3) метод Ньютона. 

                          1. Метод половинного деления (дихотомии) 

 
Пусть на отрезке [a, b] задана непрерывная функция
  Если значения функции на концах отрезка имеют разные знаки, т.е.  то это означает, что внутри данного отрезка находится нечетное число корней. Пусть для определенности корень один. Суть метода состоит в сокращении на каждой итерации вдвое длины отрезка. Находим середину отрезка [a,b] по фомуле:  Вычисляем значение функции  и выбираем тот отрезок, на котором функция  меняет свой знак. Новый отрезок вновь делим пополам. И этот процесс продолжаем до тех пор, пока длина отрезка не сравняется с наперед заданной погрешностью вычисления корня Е.

2.Метод хорд

При решении нелинейного уравнения методом хорд задаются интервалы [a,b], на котором существует только одно решение, и точность Ɛ. Затем через две точки с координатами (a,F(a)) и (b,F(b)) проводим отрезок прямой линии (  хорду) и определяем точку пересечения этой линии с осью абцисс. Ели при этом F(a)*F(b) <0, то праву границу интервала пееносиим в точку x (b=x). Если указанное условие не выполняется, то в точку x переносится левая граница интервала (a=x). Поиск решения пекращается при достижении заданной точности |F(x)|>Ɛ. Вычисления ведутся до тех пор, пока не выполнится неравенство: .  Итерационная формула метода хорд имеет вид:

3. Метод Ньютона

 

Чтобы численно решить уравнение  методом простой итерации, его необходимо привести к следующей форме: , где  — сжимающее отображение.

Для наилучшей сходимости метода в точке очередного приближения  должно выполняться условие . Решение данного уравнения ищут в виде , тогда:

В предположении, что точка приближения «достаточно близка» к корню , и что заданная функция непрерывна , окончательная формула для  такова:

С учётом этого функция  определяется выражением:

Эта функция в окрестности корня осуществляет сжимающее отображение[1], и алгоритм нахождения численного решения уравнения  сводится к итерационной процедуре вычисления:

Расчеты в математическом пакете Mat lab

В математическом пакете по условию задания был построен график функции и найден корень уравнения с использование символьного решения(solve) и в численном виде используя встроенные функции: fzero и fsolve. Для описания моей функции использовала файл-функцию.

На следующем рисунке представлен графи функции:


Для записи команд использовала
M-файл:


В командном окне были получены следующие результаты:

r1 =

-8

r2 =

   -8

r3 =

   -8

r4 =

  -8.0000

r5 =

  -7.9979   -8.0000


Отчет о результатах вычисления приближенного значения корня уравнения в MS Excel.  

MS Excel  был проведен расчет приближенного значения корня уравнения с помощью встроенных возможностей «Подбор параметров» и «Поиск решений». Для выбора начального приближения предварительно мной была построена диаграмма.

Результаты расчета с использованием Побора Параметра

В качестве начального приближения был выбран x=-9 (исходя из диаграммы)

В результате использования Подбора Параметра был найден корень x=-8,01.


Результаты расчета с использованием Поиска Решений

В качестве начального приближения был выбран x=-9 (исходя из диаграммы)


После выполнения был получен следующий результат:

Поиск решения дал мне значение x= -8,00002


Описание приложения созданного в среде Delphi.

При создании приложения в среде Delphi в интерфейсе был предусмотрен вывод вида функции и графика. Нахождение корня нелинейного уравнения было реализовано с использование трех методов: Метод дихотомии, Метод Хорд и Метод Ньютона. В отличии от расчета в Excel,  где корни находились с помощью подбора параметров и поиска решения, в программе предусмотрен ввод точности вычисления пользователем. Результаты расчета выводятся как в окно приложения так и в текстовый файл.  


Блок – схемы реализующие численные методы

Блок-схема для метода дихотомии:


Блок-схема для метода хорд:


Блок-схема для метода Ньютона:


Листинг программы

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Menus, OleCtnrs,

 StdCtrls, AxCtrls, OleCtrls, VCF1, Math;

type

 TForm1 = class(TForm)

   GroupBox1: TGroupBox;

   OleContainer2: TOleContainer;

   MainMenu1: TMainMenu;

   N1: TMenuItem;

   Chart1: TChart;

   Series1: TPointSeries;

   N2: TMenuItem;

   N3: TMenuItem;

   N4: TMenuItem;

   N5: TMenuItem;

   Label1: TLabel;

   Edit1: TEdit;

   GroupBox2: TGroupBox;

   GroupBox3: TGroupBox;

   GroupBox4: TGroupBox;

   Label2: TLabel;

   Label3: TLabel;

   Edit2: TEdit;

   Edit3: TEdit;

   Edit4: TEdit;

   Label4: TLabel;

   Edit5: TEdit;

   Label5: TLabel;

   Edit7: TEdit;

   Label7: TLabel;

   F1Book1: TF1Book;

   F1Book2: TF1Book;

   F1Book3: TF1Book;

   F1Book4: TF1Book;

   procedure N1Click(Sender: TObject);

   procedure N3Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure N4Click(Sender: TObject);

   procedure N5Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

const

xmin:real=-20;

xmax:real=20;

var

 Form1: TForm1;

 x,y,t,a,b,cor:real;

 i,n:integer;

 fail:textfile;

implementation

{$R *.dfm}

function f(x:real):real;

begin

f:=(8+x)/(x*sqrt(sqr(x)-4));

end;

function f1(x:real):real;

begin

f1:=(-power(x,3)-16*x*x+32)/(x*X*sqrt(power(x*x-4,3)));

end;

procedure metoddix(ta,tb,eps:real;var xk:real;var kolvo: integer);

begin

kolvo:=0;

repeat

xk:=(ta+tb)/2;

kolvo:=kolvo+1;

Form1.F1book1.NumberRC[kolvo,1]:=xk;

Form1.F1book1.NumberRC[kolvo,2]:=f(xk);

if f(ta)*f(xk)<0 then tb:=xk

else ta:=xk;

until (abs(f(xk))<=eps);

end;

procedure metodhord(ta,tb,eps:real;var xk:real;var kolvo: integer);

begin

kolvo:=0;

repeat

xk:= ta-f(ta)*(ta-tb)/(f(ta)-f(tb));

kolvo:=kolvo+1;

Form1.F1book2.NumberRC[kolvo,1]:=xk;

Form1.F1book2.NumberRC[kolvo,2]:=f(xk);

if f(ta)*f(xk)<0 then tb:=xk

else ta:=xk;

until (abs(f(xk))<=eps);

end;

procedure metodnyutona(ta,eps:real;var xk:real;var kolvo: integer);

begin

kolvo:=0;

repeat

xk:= ta-f(ta)/f1(ta);

ta:=xk;

kolvo:=kolvo+1;

Form1.F1book3.NumberRC[kolvo,1]:=xk;

Form1.F1book3.NumberRC[kolvo,2]:=f(xk);

until (abs(f(xk))<=eps);

end;

procedure TForm1.N1Click(Sender: TObject);

begin

x:=xmin;

i:=0;

while x<=xmax do

begin

if abs(x)>5 then

 begin

 i:=i+1;

 y:=f(x);

 series1.Addxy(x,y);

 F1book4.NumberRC[i,1]:=x;

 F1book4.NumberRC[i,2]:=y;  

 end;

x:=x+0.5;

end;

end;

procedure TForm1.N3Click(Sender: TObject);         //Вычисление корня методом половинного деления

begin

F1book1.ClearRange(1,1,100,2,3);

t:=strtofloat(Edit1.Text);

a:=strtofloat(Edit2.Text);

b:=strtofloat(Edit3.Text);

metoddix(a,b,t,cor,n);

F1book4.TextRC[1,4]:='дихотомия';

F1book4.TextRC[2,4]:='корень=';

F1book4.NumberRC[2,5]:=cor;

F1book4.TextRC[3,4]:='y=';

F1book4.NumberRC[3,5]:=f(cor);

F1book4.TextRC[4,4]:='количество итераций =';

F1book4.NumberRC[4,5]:=n;

assignfile(fail,'отчет.txt');

append(fail);

writeln(fail);

writeln(fail,'Расчет методом дихотомии');

 writeln(fail,'Точность расчета = ',t:10:7);

writeln(fail,'Начальное приближение:a = ',a:8:3,'  b = ',b:8:3);

 writeln(fail, 'Найден корень: x = ',cor:8:3,  '    y=f(x)= ',f(cor):8:6);

 writeln(fail, 'Количество итераций = ',n);

 closefile(fail);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

assignfile(fail,'отчет.txt');

rewrite(fail);

closefile(fail);

end;

procedure TForm1.N4Click(Sender: TObject);    // Вычисление корня методом хорд

begin

F1book2.ClearRange(1,1,100,2,3);

t:=strtofloat(Edit1.Text);

a:=strtofloat(Edit5.Text);

b:=strtofloat(Edit4.Text);

metodhord(a,b,t,cor,n);

F1book4.TextRC[6,4]:='хорды';

F1book4.TextRC[7,4]:='корень=';

F1book4.NumberRC[7,5]:=cor;

F1book4.TextRC[8,4]:='y=';

F1book4.NumberRC[8,5]:=f(cor);

F1book4.TextRC[9,4]:='количество итераций =';

F1book4.NumberRC[9,5]:=n;

assignfile(fail,'отчет.txt');

append(fail);

writeln(fail);

writeln(fail,'Расчет методом хорд');

 writeln(fail,'Точность расчета = ',t:10:7);

writeln(fail,'Начальное приближение:a = ',a:8:3,'  b = ',b:8:3);

 writeln(fail, 'Найден корень: x = ',cor:8:3,  '    y=f(x)= ',f(cor):8:6);

 writeln(fail, 'Количество итераций = ',n);

 closefile(fail);

end;

procedure TForm1.N5Click(Sender: TObject);      // Вычисление корня методом Ньютона

begin

F1book3.ClearRange(1,1,100,2,3);

t:=strtofloat(Edit1.Text);

a:=strtofloat(Edit7.Text);

metodnyutona(a,t,cor,n);

F1book4.TextRC[11,4]:='Ньютона';

F1book4.TextRC[12,4]:='корень=';

F1book4.NumberRC[12,5]:=cor;

F1book4.TextRC[13,4]:='y=';

F1book4.NumberRC[13,5]:=f(cor);

F1book4.TextRC[14,4]:='количество итераций =';

F1book4.NumberRC[14,5]:=n;

assignfile(fail,'отчет.txt');

append(fail);

writeln(fail);

writeln(fail,'Расчет методом Ньютона');

 writeln(fail,'Точность расчета = ',t:10:7);

writeln(fail,'Начальное приближение:a = ',a:8:3,'  b = ',b:8:3);

 writeln(fail, 'Найден корень: x = ',cor:8:3,  '    y=f(x)= ',f(cor):8:6);

 writeln(fail, 'Количество итераций = ',n);

closefile(fail);

end;

end.


Изображение окна приложения

Первоначальный интерфейс имеет следующий вид:

После выполнения расчетов при E<= 0,001:

В качестве отчета был сформирован файл  «Отчет.txt.»:


Анализ полученных результатов

В соответствии с заданием на курсовую работу в математическом пакете мною был найден корень нелинейного уравнения (x=-8) и построен график.

В электронных таблицах был найден корень уравнения с помощью двух встроенных возможностей «Подбор параметра» и «Поиск решения» , при этом «Поиск решения» все же дал более точное значение. Результаты практически совпали с результатами в Matlab.

Для поиска корня в среде Delphi пользователь имеет возможность ввести точность вычисления с клавиатуры. Тестирование программы показало,  что при одной и той же заданной точности вычисления метод Ньютона находит искомое значение при меньшем числе итераций.

Таким образом, расчеты показали, что решить нелинейное уравнение можно в разных средах. Наиболее трудоемким расчет оказался в среде Delphi.


Литература.

  1.  Амосов А.А. и др. вычислительные методы для инженеров М., Высшая школа, 1994.
  2.  Фаронов В.В. Delphi. Программирование на зыке высокого уровня

               3.    Уокенбах Д. Microsoft Office Excel 2007. Библия пользователя

       Волков В.Б. Понятный самоучитель Excel 2010


 

А также другие работы, которые могут Вас заинтересовать

54851. Збереження первоцвітів України 53 KB
  Всі квіти весняні Веселі кохані З під листя виходять Голівки підводять Од сну зимового До сонця ясного Зустрічайте до нас прийшла Весна. Познанська ЛЮТИЙ: Я хоч зимовий місяць але люблю квіти особливо пролісок. На лісовій галявині Погляньте любі діти Мов зірочки блакитнії Розквітли гарні квіти Весна :А відгадайте ще загадку ; про яку . Богиня Флора готувалась до карнавалу на який запросила всі весняні квіти .
54852. Первоцветы. (Классный час) 82.5 KB
  Почему же эти растения зацветают первыми так рано весной У некоторых подснежников цветки появляются даже раньше чем листья. Секрет в том что матьимачеха расцветает еще под снегом но раскрывает свои цветки только навстречу солнцу. Чуть позже на одном и том же стебельке можно увидеть цветки разной окраски: розовые фиолетовые и синие. Это цветки разного возраста: молодые зрелые и старые.
54853. Самый первый урок чешского языка 3.05 MB
  Желаем Вам успехов и до встречи в Праге Преподавательский коллектив Prgue Eduction Center Чешский алфавит Буква Название букв Звуковое соответствие в чешском языке Приблизительное звуковое соответствие в русском языке Произношение и примеры...
54854. Про куму-Лисичку і кума-Журавля. П’єса-казка 54 KB
  Дарма байдиків не бив Робив своє діло З обох кінців сцени назустріч одне одному виходять Журавель і Лисичка. Казкарка Щиросердно наш Журавель Дякує Лисиці Бо з кумою родичатись Треба як годиться. Журавель пообіцяв їй Прийти неодмінно З дому вийшов як джентльмен О четвертій рівно.
54855. Тварини. Домашні улюбленці 36 KB
  Boys and girls, today we are going to study a new topic Pets and animals, I am sure youll be very glad to study it, because all of you have some pets at home and love them very much. And by the end of the lesson youll be able to describe them in English. So, lets start our lesson.
54856. Восприятие искусства. Пейзажный жанр. Воссоздание настроения природы при помощи художественных техник («монотипия», техника работы «по сырому») 350.5 KB
  Воссоздание настроения природы при помощи художественных техник монотипия техника работы по сырому. Воссоздание настроения природы при помощи художественных техник монотипия техника работы по сырому. Ознакомить учащихся с особенностями работы в технике монотипии и по сырому; вырабатывать умения и навыки учащихся при работе в разных художественных техниках. Оборудование: Работы художников: И.
54857. Пейзаж «Я закоханий в дерево зеленовіте» 291.5 KB
  Наочні матеріали: репродукції пейзажних творів творчі роботи учнів. Уже в епоху неоліту зустрічалися умовні позначення неба земної поверхні частин світу к розписах Стародавнього Сходу присутній пейзаж у сценах полювання рибальства війн. Важливе місце пейзаж займає в мистецтві Китаю де його вважали наочним втіленням світового закону життя.
54858. Добро пожаловать в Photoshop 4 13.54 MB
  Коррекция цвета Коррекция на глазок Коррекция теней бликов средних тонов и насыщенности Клиппирование Сохранение и загрузка параметров коррекции Гистограммы Уровни и кривые Коррекция яркости с помощью команды Уровни Levels Команда Кривые Curves Цветовой баланс Коррекция яркости и контраста Цветовой тон и насыщенность Коррекция цветового тона и насыщенности Изменение цвета выделенного объекта Подкрашивание Общие сведения о каналах изображения Добавление нового канала Копирование канала Разделение каналов ...
54859. Нормативно-правова база з військових питань 557 KB
  Мета: ознайомити учнів з Воєнною доктриною України основними принципами будівництва Збройних Сил України структурою військової організації держави та сучасними зразками озброєння та техніки; пояснити учням що основою військової організації держави виступають Збройні Сили України; прищіліти інтерес до служби у Збройних Силах України; продовжити формування розгорнутої навчальної діяльності вміння самостійно здобувати знання; удосконалювати такі загально пізнавальні навички: аналізувати систематизувати виділяти головне та інші;...