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

114 чел.

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

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

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

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

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

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

Манепова А. М

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


 

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

67906. ЗАМЕЧАНИЯ К ПРОЕКТУ КОНСТИТУЦИОННОГО АКТА СОЮЗНОГО ГОСУДАРСТВА 39 KB
  Вызывает возражение само название документа его правовая природа. Предлагаю назвать его Конституция либо вернуться к незаслуженно забытому в наших государствах термину Основной Закон. Но при этом возникает вопрос: почему об этом не сказано в преамбуле проекта...
67907. ПОНЯТИЕ И СОДЕРЖАНИЕ АДМИНИСТРАТИВНО-ПРАВОВОГО СТАТУСА ОБЩЕСТВЕННЫХ ОБЪЕДИНЕНИЙ В РОССИЙСКОЙ ФЕДЕРАЦИИ 78 KB
  Последняя проблема как показало исследование наиболее значима для жизнедеятельности нашего общества; это обусловлено тем что общественные объединения являются важной составной частью правового государства выступают связующим элементом между государством и личностью.
67908. ИСТОРИЧЕСКИЕ ПРЕДПОСЫЛКИ СТАНОВЛЕНИЯ ГОСУДАРСТВЕННОЙ СЛУЖБЫ В РОССИИ 81.5 KB
  Развитие и реформирование государственной службы в современной России должно опираться на тот опыт который был накоплен в данной сфере в течение предшествующих периодов развития отечественной государственности. Специфические черты государственной службы в России обусловлены всем ходом ее исторического...
67909. Методические подходы к определению идентификационных признаков неблагополучных регионов 41 KB
  Гранберга на типологию регионов который справедливо полагает что в структуре проблемных регионов необходимо разграничивать отсталые депрессивные и кризисные регионы. К данному типу проблемных регионов принято относить регионы традиционно имеющие низкий уровень жизни по сравнению...
67910. ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ ГОСУДАРСТВЕННОЙ СОБСТВЕННОСТИ СУБЪЕКТОВ РФ ДЛЯ ОБЕСПЕЧЕНИЯ ПРЕДПРИНИМАТЕЛЬСКОЙ ДЕЯТЕЛЬНОСТИ 124 KB
  Ведение предпринимательской деятельности не является основной целью публичных образований в нашем случае субъектов Федерации. Вместе с тем существует множество случаев когда участие публичного образования в экономической деятельности необходимо. В частности регулируя предпринимательскую...
67911. МЕХАНИЗМ АДМИНИСТРАТИВНОГО РАССЛЕДОВАНИЯ ДЕЛ О МАТЕРИАЛЬНОЙ ОТВЕТСТВЕННОСТИ ВОЕННОСЛУЖАЩИХ 60 KB
  Механизм административно-правового регулирования расследования дел о материальной ответственности военнослужащих представляет собой способ организации и осуществления привлечения нарушителей к соответствующему виду юридической ответственности, содействует обеспечению правопорядка в Вооруженных Силах...
67912. ТАТАРСКАЯ ГОСУДАРСТВЕННОСТЬ В НАЧАЛЕ XXI ВЕКА: НОВЫЕ ЗАДАЧИ 68 KB
  Принятие новой редакции Конституции Республики Татарстан возобновило дискуссию о промежуточных итогах и перспективах восстановления единого конституционного и нормативно-правового пространства страны. Действующая Конституция Республики Татарстан сохранила пункты...
67913. СОДЕРЖАНИЕ АДМИНИСТРАТИВНО-ПРАВОВОГО СТАТУСА ГОСУДАРСТВЕННОГО ГРАЖДАНСКОГО СЛУЖАЩЕГО 80 KB
  Специальными правовыми актами определяются многие вопросы касающиеся регламентирования прав и обязанностей государственного служащего в военизированных и правоохранительных органах. В различных правовых актах предусматриваются права и обязанности государственного...
67914. ПОНЯТИЕ НЕПРИКОСНОВЕННОСТИ ЛИЧНОСТИ И ЕГО КОНСТИТУЦИОННО-ПРАВОВАЯ ХАРАКТЕРИСТИКА 104.5 KB
  В части 1 статьи 22 Конституции Российской Федерации от 12 декабря 1993 года провозглашающей высшей ценностью человека его права и свободы закреплено положение согласно которому каждый имеет право на свободу и личную неприкосновенность. Конституционное право на свободу и личную неприкосновенность...