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

112 чел.

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

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

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

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

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

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

Манепова А. М

группы: ГИ-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


 

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

66546. МНОГОПОТОЧНОСТЬ. МЕЖПРОЦЕССНЫЕ ВЗАИМОДЕЙСТВИЯ 64.6 KB
  Написать программу, создающую два потока, которые выполняются в одном адресном пространстве (в одном процессе). Их разделяемый ресурс - целочисленный массив, который содержит данные совместного использования. Потоки должны обрабатывать массив поочередно.
66547. Разработка и отладка алгоритмов и программ c использованием структур данных 87.42 KB
  Цель работы: Получить практические навыки в разработке алгоритмов и написании программ на языке С с использованием структур данных. Оборудование: IBM – совместимый компьютер, Система программирования QC 2.5.
66548. Электрические аппараты систем автоматического управления 2.5 MB
  К этой группе относятся реле и датчики. Если при плавном изменении входной регулируемой величины выходной сигнал аппарата изменяется скачком то мы имеем дело с реле. К ним относятся автоматические выключатели реле тока напряжения плавкие предохранители тепловые реле и пр.
66549. Решение граничных задач для ОДУ. Метод сеток для дифференциальных уравнений в частных производных 196.5 KB
  В прямоугольной области строится сеточная область из одинаковых ячеек и приближающая область. В каждом узле исходное уравнение заменяется конечно-разностным уравнением. Приближенные значения производных в каждом узле находятся по значениям искомой функции в соседних узлах.
66550. Исследование дополнительных режимов работы беспроводного оборудования с применением антенно-фидерного оборудования 52 KB
  Цель работы: исследовать зоны покрытия электромагнитных волн антенн и антенно-фидерное оборудование. I.Исследование штатной антенны точки доступа DWL-2100AP 1.Включаем точки доступа DWL-G132 и DWL-2100AP 2.Выбираем внешнюю или внутреннюю антенны у DWL-2100AP...
66551. ДОСЛІДЖЕННЯ ТРИФАЗНОГО ЕЛЕКТРИЧНОГО КОЛА ПРИ 3’ЄДНАННІ СПОЖИВАЧІВ ЗІРКОЮ 1.01 MB
  Дослідити і вивчити режими роботи та властивості трифазних електричних кіл при з’єднанні фаз споживачів зіркою з нейтральним проводом і без нього. Перевірити співвідношення між фазними і лінійними напругам та струмами.
66552. Нейро-нечіткі мережі для поданя і обробки знань 102.15 KB
  Нейрониі мережі, наприклад, є зручними для задач розпізнавання образів, але дуже незручні для пояснення, як вони таке розпізнавання здійснюють. Вони можуть автоматично здобувати знання, але процес їхнього навчання найчастіше відбувається досить повільно
66553. Діагностика ПК POST-картами 140 KB
  Мета: Навчитися проводити діагностику ПК за допомогою POSTкартами Одним з найпростіших і ефективніших способів діагностики стану материнських плат при технічному обслуговуванні і ремонті персональних комп'ютерів є використання результатів виконання спеціальної процедури...
66554. Освоение технологии структурного программирования и применения стандартных методов работы с двумерными массивами при разработке и создании программы на языке Турбо Паскаль 130.5 KB
  Цели работы: Освоение методики нисходящей разработки (проектирования) программы методом пошаговой детализации с помощью псевдокода при решении задач с помощью ПК. Освоение методов структурного программирования при разработке и создании программы на языке Турбо Паскаль для обработки двумерных массивов.