Автоматизация решения алгебраических уравнений. Метод половинного деления

 

Содержание 

       Введение                                                                                                                 

1.Общая часть

    1.1 Постановка задачи                                                                                         

    1.2 Описание математической модели                                                              

    1.3 Обоснование и описание метода  реализации                                             

2.Специальная  часть

    2.1 Описание алгоритма                                                                                      

    2.2 Описание программы                                                                                 

    2.3 Руководство системного программиста

    2.4 Руководство программиста                                                                         

    2.5 Руководство оператора                                                                                

    2.6 Интерпретация и анализ результатов                                                         

       Заключение                                                                                                           

       Список  используемой литературы                                                                     

Приложение

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

2.Результат решения  программы                                                                        3.Контрольный пример                                                                                        
 

 

   

   Аннотация 

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

       Программа написана на языке Borland Delphi 7.0.

       Курсовая  работа состоит из следующих частей:

1. общей  части с постановкой задачи, описанием  математической модели, обоснованием  и описанием метода реализации.

2. специальной  части с описанием алгоритма,  описанием программы, руководством  системного программиста, руководством  программиста, руководством оператора,  интерпретацией и анализом результатов.

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

 

       

       Введение 

       Цель  создания данного программного продукта – автоматизировать решения алгебраических уравнений.

       Программа осуществляет наглядный интерфейс  решения уравнений методом половинного  деления с нахождением отрезков, погрешности, корнем уравнения, количеством  шагов приближения.

       Также в этой программе можно увидеть  график функции при задании границ отрезка, при нахождении середины отрезка  и точного корня(t). 

       Программа выполнена в среде программирования Borland Delphi7, что позволяет осуществить более дружелюбный интерфейс с пользователем.

 

    Общая часть 

    1.1 Постановка задачи 

       В курсовой работе необходимо разработать  программу «Автоматизация решения  алгебраических уравнений. Метод половинного  деления».

       Поэтому мы реализуем решение кубических уравнений методом половинного  деления  с точностью Е=0,001.

       Для того чтобы найти приближенное значение корня с точностью до Е>0, необходимо остановить процесс половинного  деления на таком шаге n, на котором будет иметь длину и вычислить .

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

       Количество  шагов приближения зависит от и заданной точности Е.

 

1.2 Описание математической  модели 

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

       График  функции в нашей курсовой работе основан на графических возможностях  Delphi.

         Графические инструменты  объединены  под названием GDI (Graphic Devise Interface) – интерфейс графического устройства.

       Все функции для работы с графикой находятся в динамической библиотеки GDI.dll .  Все GDI функции аппаратно независимы и это означает, что результат вывода графики будет одинаков вне зависимости от графического устройства, установленного в компьютере.

 

       

       1.3 Обоснование и  описание метода  реализации 

       Для реализации данного программного продукта выбрана система визуального  программирования Delphi 7.0, которая позволяет быстро и удобно разрабатывать эффективные приложения.

       В Delphi достаточно хорошо развиты возможности по созданию пользовательского интерфейса, широкий набор функций для решения расчётно-вычислительных задач.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

2.Специальная  часть

2.1 Описание алгоритма 

  

       Для реализации данного программного продукта необходим алгоритм, состоящий из 5 частей:

  • Нахождение количества корней  и нахождение отрезков, где содержится корень
  • Построение графика
  • Проверка отрезка
  • Решение
  • Создатели

      Общая блок схема

 
*Блок схема  "Метод половинного деления" 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

         2.2 Описание  программы     

       В данной курсовой работе разработана  программа «Решение кубических  уравнений».

       Для работы данной программы необходима операционная система не ниже Windows 2000. Программа написана на языке Borland Delphi 7.0 и предназначена для автоматизации решений алгебраических уравнений.

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

       Ограничения данного программного продукта состоят  в том, что программа решает только кубические уравнения.

       В данной курсовой работе методом реализации является … 

 

2.3 Руководство системного  программиста

       Программа используется для нахождение корней кубического уравнения. Для выполнения данной программы используется файл с расширением .ехе Необходимо использовать Windows не ниже 2000 и Microsoft Word.

       Программа представляет собой интерфейс который  состоит из одной формы.

       Программа запускается через файл с расширением .ехе.  открывается форма. В которой  предусмотрено решения кубического  уравнения четырьмя методами, построения графика, проверка отрезка.

       Проверить работу программы можно запустив файл .ехе на исполнение. 
 
 

 

2.4 Руководство программиста

       Программа используется для вычисления корней кубического уравнения. Для выполнения данной программы необходимо наличие  на компьютере файла .ехе. Также необходим  объем ОЗУ - 512 Мб, принтер для вывода табеля успеваемости, ОС не ниже Windows 2000.

       Программа вычисляет успеваемость в пределах от 10 числа одного месяца до 10 числа  следующего месяца. Работа будет происходить, если только введен список студентов  и предметов.

       Программу можно вызвать с любого носителя и на любом компьютере. Чтобы запускать  ее, нужно нажать файл .ехе.

       Данная  программа используется в рамках Миасского геологоразведочного  колледжа.

 

2.5 Руководство оператора 

       Для правильной работы программы необходимо выполнить следующие действия:

       1. Запустить программу на исполнение;

       2. Выбрать отрезки (щелкнуть по  кнопке «Показать отрезки»);

       3. Выбрать границы отрезка (желтый  цвет показывает, что отрезок  задан);

       4. Проверить отрезок (щелкнуть по  кнопке «Проверить отрезок»);

       5. Выбрать метод решения уравнения  щелчком по кнопке (в нашем  случае Метод половинного деления);

       6. Построить график (щелкнуть по  кнопке «График»);

       При неправильном вводе данных на экране будут выдаваться «ошибки».

       Так как в нашей программе предусмотрена  только автоматизация решения кубических уравнений, то в уравнении ax3+bx2+cx+1=0 значение a не должно равняться 0. При несоблюдении этого условия также будет выдаваться ошибка.

 

2.6 Интерпретация и  анализ результатов      

       В результате работы программы на экран  выдаются границы отрезка, погрешность, количество вещественных корней уравнения, результат работы программы(t) и количество шагов. Также строится график функции. Это можно увидеть в Приложение 2. Результат решения программы.                                                                 

        

 

       

       Заключение 

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

       Достоинством  данной является простой и наглядный  интерфейс, интуитивное управление, и пятная цветовая гамма

 

       

       Список  используемой литературы

  1. Рудаков, А. В. Технология разработки программных продуктов: Учебные пособия для студентов средне профессиональных образований/ А. В. Рудаков: - М.: Академия, 2005. -208 с.
  2. Гагарина, Л. Г. Основы технологии разработки программных продуктов: Учебные пособия/ Б. Д. Виснадул, А. В. Игошин: – М.: Форум: Инфра-М, 2006. -192 с.
  3. Стандартизация разработки программных средств: Учебные пособия/ Благодатских, В. А. [и др.]; под ред. О. С. Разумова. - М.: Финансы и статистика, 2005. -288с.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Приложение 1

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

unit Unit1;

interface 

uses

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

  Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart; 

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Edit4: TEdit;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Button1: TButton;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    Panel1: TPanel;

    Panel2: TPanel;

    Edit5: TEdit;

    Edit6: TEdit;

    Edit7: TEdit;

    Panel3: TPanel;

    Edit8: TEdit;

    Edit9: TEdit;

    Edit10: TEdit;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Button5: TButton;

    Button6: TButton;

    Button7: TButton;

    Chart1: TChart;

    Series1: TLineSeries;

    Series2: TLineSeries;

    Series3: TLineSeries;

    Edit11: TEdit;

    Label10: TLabel;

    Button8: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Panel1Click(Sender: TObject);

    procedure Panel2Click(Sender: TObject);

    procedure Panel3Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure Edit5Click(Sender: TObject);

    procedure Edit6Click(Sender: TObject);

    procedure Edit7Click(Sender: TObject);

    procedure Edit8Click(Sender: TObject);

    procedure Edit9Click(Sender: TObject);

    procedure Edit10Click(Sender: TObject);

    procedure Edit5DblClick(Sender: TObject);

    procedure Edit6DblClick(Sender: TObject);

    procedure Edit7DblClick(Sender: TObject);

    procedure Edit8DblClick(Sender: TObject);

    procedure Edit9DblClick(Sender: TObject);

    procedure Edit10DblClick(Sender: TObject);

    procedure Button7Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure Edit1Change(Sender: TObject);

    procedure Edit2Change(Sender: TObject);

    procedure Edit3Change(Sender: TObject);

    procedure Edit4Change(Sender: TObject);

    procedure Button8Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end; 

var

  Form1: TForm1;

  a,b,c,d: real;  //значения функции

  p,q: real;      //Для Кардано

  Q1: Extended;   //Для Кардано

  x1,x2,y1,y2:real;  //Проверка корней

  ss:string;        //Округление

  a1,b1,a11,b11: real; //Границы отрезка

  kr1,kr2,kx,kx2,ky,kfx,kfx2 :real; //Для графика

  p1,p2,p3:real; //Проверка  выбран ли отрезок

  bolt,fp11,fp12,fp21,fp22:real;//Для  проверки и сокращения отрезка

  e: real; //Погрешность

  s:integer; //Cчетчик  количества шагов

  c1,fa,fc: real;//Переменные  Метода половинного деления

  fb:real;//переменые метода Хорд

  x: array [0..99] of real;

  fpx2,fpx,fx :real;

  x0,fpx0,x11,x12,e1:real;

  krr1, krr2:real; 

implementation 

uses Math; 

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject);

label Exit;

label N;

Label Y;

label YY;

label NN;

Label NNN;

Label YYY; 

begin 

a:=StrToFloat(Edit1.Text); 

 If a=0 then begin

             Application.MessageBox(PChar('Значение а не  должно быть равно 0. Измените  значение а'),'Отдел по проверке  главной функции',mb_OK);

             goto Exit;

             end;

b:=StrToInt(Edit2.Text);

c:=StrToFloat(Edit3.Text);

d:=StrToFloat(Edit4.Text);

  Button6.Enabled:=true;

  panel1.Color:=clWindow;

  panel2.Color:=clWindow;

  panel3.Color:=clWindow;

  Edit5.Color:=clWindow;

  Edit6.Color:=clWindow;

  Edit7.Color:=clWindow;

  Edit8.Color:=clWindow;

  Edit9.Color:=clWindow;

  Edit10.Color:=clWindow;

  Series1.Clear;

  Series2.Clear;

  Series3.Clear;

  kr1:=0;

  kr2:=0;

  kx:=0;

  kx2:=0;

  ky:=0;

  kfx:=0;

  kfx2:=0;

p:=-1*((b*b)/(3*a*a))+(c/a);

q:=((2*(b*b*b))/(27*(a*a*a)))-((b*c)/(3*a*a))+(d/a); 

Q1:=Power(p/3,3)+Power(q/2,2);

Q1:=RoundTo(Q1,-3);

label9.Caption:=FloatToStr(Q1);

if Q1<0 then Label7.Caption:='Уравнение  имеет три вещественных корня';

if Q1>0 then Label7.Caption:='Уравнение  имеет один вещественный корнень';

if (Q1=0) and (p<>0) then Label7.Caption:='Уравнение имеет два корня';

if (Q1=0) and (p=0) and (q=0) then Label7.Caption:='Уравнение имеет один корень';

x1:=-500;

y1:=a*Power(x1,3)+b*Power(x1,2)+ c*x1+d;

x2:=x1;

N:

if y1>0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2<=0 then begin

                            x1:=x2-1;

                            x1:=RoundTo(x1,-6);

                            Edit5.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit6.Text:=FloatToStr(x2);

                            goto Y;

                            end;

              goto N;

              end;

if y1<=0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2>=0 then begin

                            x1:=x2-1;

                            x1:=RoundTo(x1,-6);

                            Edit5.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit6.Text:=FloatToStr(x2);

                            goto Y;

                            end;

              goto N;

              end;

Y:

kr1:=x1;

kr2:=x2;

Panel1.Visible:=true;

if (Q1<0) or ((Q1=0) and (p<>0))then begin

x1:=x2;

y1:=a*Power(x1,3)+b*Power(x1,2)+ c*x1+d;

x2:=x1;

NN:

if y1>0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2<=0 then begin

                            x1:=RoundTo(x1,-6);

                            Edit7.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit8.Text:=FloatToStr(x2);

                            goto YY;

                            end;

              goto NN;

              end;

if y1<=0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2>=0 then begin

                            x1:=RoundTo(x1,-6);

                            Edit7.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit8.Text:=FloatToStr(x2);

                            goto YY;

                            end;

              goto NN;

              end; 

YY:

kr2:=x2;

Panel2.Visible:=true;

End;

if Q1<0 then begin

x1:=x2;

y1:=a*Power(x1,3)+b*Power(x1,2)+ c*x1+d;

x2:=x1;

NNN:

if y1>0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2<=0 then begin

                            x1:=RoundTo(x1,-6);

                            Edit9.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit10.Text:=FloatToStr(x2);

                            goto YYY;

                            end;

              goto NNN;

              end;

if y1<=0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2>=0 then begin

                            x1:=RoundTo(x1,-6);

                            Edit9.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit10.Text:=FloatToStr(x2);

                            goto YYY;

                            end;

              goto NNN;

              end;

YYY:

kr2:=x2;

Автоматизация решения алгебраических уравнений. Метод половинного деления