Программа нахождения минимума функции двух переменных

Автор работы: Пользователь скрыл имя, 31 Мая 2012 в 21:22, курсовая работа

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

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

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

Введение
1. Постановка задачи…………………………………………………….....5
2. Математическая формулировка задачи………………………...………6
3. Алгоритмизация задачи ………………………………………..…...…...8
4. Идентификаторы программы…………………………………………..10
5. Блок – схема алгоритма………………………………………………...11
6. Текст исходной программы…………………………………………….20
7. Результаты выполнения программы…………………………………...25
8. Анализ результатов……………………………………………………..28
9. Инструкция по работе с программой………………………………….29
Заключение
Список использованных источников

Файлы: 1 файл

Kursovaya.docx

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

     Okno(1,1,79,23,6,0);

       Writeln('                                С П Р А В К А         ');

       Writeln('           Данная программа обеспечивает  поиск минимума функции N перменных');

       Writeln('        методом спирального координатного  спуска и методом квадратичной ');

       Writeln('        интерполяции-экстраполяции. Вид  функции  задаётся в подпрограмме-');

     writeln('        функции. Определить минимум функции.');

       Writeln('           После перехода в меню выберите  клавишами управления курсора');

       writeln('        необходимый пункт и нажмите  <Enter>.');

       Writeln('           При выборе пункта меню "Метод  спирального координатного спуска" ');

       Writeln('        или "Метод квадратичной интерполяции-экстраполяции"  введите исходные');

       writeln('        данные программа выведет   полученные  результаты.');

       gotoxy(5,20);

       write('            Для возврата в меню нажмите  любую клавишу...');

       ch:=readkey;

       End;

 

  Procedure Mymenu;

       Begin

      clrscr;

   textcolor(0);

      For i:=1 to 4 do

         begin

          Gotoxy(20,i+7);

        if i=pos then Textbackground(10) else Textbackground(6);

          write(Menu[i]);

         end;

        End;

 

Procedure Zastavka;

Begin

hiddecursor;

Textcolor(0);

Okno(1,1,79,23,6,0);

gotoxy(3,1);

writeln(' ');

writeln('                Министерство образования Республики  Беларусь');

writeln('               Белорусский национальный технический  университет');

gotoxy(1,6);

writeln('                Программа поиска минимума функции  N переменных');

writeln;

writeln;

writeln;

writeln;

writeln('                           Курсовая работа         ');

writeln('                     по дисциплине "Информатика"   ');

gotoxy(1,15);

writeln('                                     Исполнитель: Хамицевич Д.Н ');

writeln('                                                  гр. 102810');

writeln('                                    Руководитель: Петренко С.М.');

writeln;

writeln;

writeln('                               Минск 2012          ');

Textcolor(4);

gotoxy(1,25);

writeln('                   Для продолжения нажмите <Enter>... ');

readln;

End;

 

function f (x: coords): real;

begin

  f:=sqr(sqr(x[1])+sqr(x[2])-1)+sqr(x[1]*sqr(x[1])-x[2]);

end;

 

procedure vvod1(var h, e: real; var x: coords);

  var i: integer;

begin

clrscr;

  normcursor;

  textcolor(0);

  writeln('                       "Метод спирального координатного  спуска"');

   write (' Шаг='); read (h);

  write (' Точность= '); read (e);

  for i:=1 to n do

  begin

    write (' Начальное значение х', i:1, ' ');

read (x[i]);                                                                                                           x[1]:=1;

end;                                                                                                                   x[2]:=1;

 writeln('Данные введены правильно? (Y/N)');

 key:=ord(readkey);

   while key<>121 do begin

   key:=ord(readkey);

    if key=110 then vvod1(h, e, x);

end;

end;

 

procedure vvod2(var h, e: real; var x: coords);

  var i: integer;

begin

clrscr;

  normcursor;

  textcolor(0);

  writeln('                       "Метод квадратичной интерполяции-экстраполяции"');

  write (' Шаг='); read (h);

  write (' Точность= '); read (e);

  for i:=1 to n do

  begin

    write (' Начальное значение х', i:1, ' ');

read (x[i]);                                                                                                           x[1]:=1;

end;                                                                                                                   x[2]:=1;

   writeln('Данные введены правильно? (Y/N)');

  key:=ord(readkey);

   while key<>121 do begin

   key:=ord(readkey);

    if key=110 then vvod2(h, e, x);

end;

end;

 

 

 

 

 

 

procedure Spysk (h, e: real; var x: coords);

  var f1, f2: real; i: integer;

begin

s:=1; f1:=0;

f2:=0;

  repeat

    for i:=1 to n do

    begin

      repeat

 

        f1:=f (x);

        x[i]:=x[i]+h;

        f2:=f(x);

      until f2>=f1;

    end;

    h:=(-1)*h/5;

  until abs(h)<=e/5;

end;

 

procedure interpol (h, e: real; var x: coords);

  var z, v, w , u, t: real; i: integer;

begin

  s:=0;                                                                                                 Spysk(0.01,e,x);

while S<>1 do begin

   for i:=1 to n do

    begin

      z:=x[i];

       v:=f(x);

          x[i]:=z-h;

           w:=f(x);

x[i]:=z+h;

u:=f(x);

t:=w*(2*z+h)+4*v*z+u*(2*z-h);

             t:=t/(w-2*v+u)/2;

              if abs(t-z)<e then s:=1;

               x[i]:=t;

                 end;

                    end;

 

end;

procedure vyvod1 (var x: coords);

  var i: integer;

begin

  writeln (' Результаты:');

  writeln (' Fmin(x1, x2)', f (x): 16:12);

  for i:=1 to n do

    writeln (' Xmin[', i:1, '] ', x[i]:16:12);

     HiddeCursor;

      textcolor(14);

       gotoxy(1,24);

        writeln(' Для ввода  новых значений нажмите <Y>, для выхода в главное меню  нажмите <N>');

        key:=ord(readkey);

   while key<>121 do begin

   key:=ord(readkey);

    if key=110 then break;

end;

if key=121 then begin vvod1(h, e, x);

Spysk(h, e, x);

vyvod1(x);

end;

end;

 

procedure vyvod2 (var x: coords);

  var i: integer;

begin

  writeln (' Результаты:');

  writeln (' Fmin(x1, x2)', f (x): 16:12);

  for i:=1 to n do

    writeln (' Xmin[', i:1, '] ', x[i]:16:12);

     HiddeCursor;

      textcolor(14);

       gotoxy(1,24);

         writeln(' Для  ввода новых значений нажмите  <Y>, для выхода в главное  меню нажмите <N>');

        key:=ord(readkey);

   while key<>121 do begin

   key:=ord(readkey);

    if key=110 then break;

end;

if key=121 then begin vvod2(h, e, x);

interpol(h, e, x);

vyvod2(x);

end;

        end;

 

BEGIN

        Clrscr;

        zastavka;

        TextMode(3);

 

11:     hiddecursor;

        pos:=1;

        Okno(1,1,79,23,6,0);

        Mymenu;

        k10:=readkey;

        while k10<>#13 do

         begin

          Case k10 of

           #72: if pos=1 then pos:=4 else pos:=pos-1;

           #80: if pos=4 then pos:=1 else pos:=pos+1;

         end;

         clrscr;

       Mymenu;

         k10:=readkey;

         textbackground(6);

        end;

        Case pos of

        1: spravka;

        2: begin   vvod1(h, e, x); Spysk(h, e, x); vyvod1(x);  end;

        3: begin   vvod2(h, e, x); interpol(h, e, x);vyvod2(x); end;

        4: exit;

 

end;

         goto 11;

 

END.

 

 

 

 

 

 

  1. Результаты работы программы

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

 

Рисунок 2. Окно заставки.

После нажатия любой клавиши  выводится окно с меню, представленное на рисунке 3.

Рисунок 3. Окно с меню.

 

При выборе пункта меню «Справка» открывается  соответствующие окно в котором 

находится справочная информация о программе. Пример такого окна представлен на

рисунке 4.

Рисунок 4. Окно справки.

 

При выборе пункта меню «метод спирального координатного спуска» открывается соответствующие окно, в котором вводятся исходные данные и выводятся результаты вычисления. Пример такого окна представлена на рисунке 5 .

Рисунок 5. Вычисление  методом спирального координатного спуска.

 

 

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

Рисунок 6. Вычисление  методом  квадратичной интерполяции-экстраполяции.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8. Анализ результатов

 

Для анализа результатов сведем данные нескольких расчетов в таблицу  1.

Таблица 2 – Результаты расчетов

Перемен

X10

X20

H

Е

1

1

1

0.01

0.0001

Метод спирального координатного спуска

Метод квадратичной интерполяции-экстраполяции

X1min

0,8259

0,8259

X2min

0,5635

0,5635

F(x1min, x2min)

3*10-8

3*10-8

Информация о работе Программа нахождения минимума функции двух переменных