Решение систем нелинейных алгебраических уравнений

Автор: Пользователь скрыл имя, 24 Марта 2011 в 08:19, лабораторная работа

Краткое описание

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

Файлы: 1 файл

Отчет по 8 лабе.docx

— 103.91 Кб (Скачать)
 

Министерство  образования и науки Российской Федерации

Ульяновский государственный технический университет

Кафедра «Измерительно-вычеслительные комплексы» 
 
 
 
 
 
 
 
 

Отчет

По лабораторной работе №8

Решение систем нелинейных алгебраических уравнений.

( Вариант 6) 
 
 
 
 
 
 
 
 

                    Выполнил:

                    студент гр. ИСТд-12

                    Денисов Д.В.

                    Преподаватель:

                    к.т.н., доцент каф. ИВК

                    Степчева З.В. 
                     
                     
                     

Ульяновск,

2010 г.

Цель  работы:  Решить системы нелинейных алгебраических уравнений.

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

         На отрезке -5<x<5;

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

Текст программы:

program lab_8;

uses

     Crt,

     Graph,                   { модуль графической библиотеки }

     Consts,                  { модуль с константами }

     Types,                   { модуль описания типов данных }

     Mathem1,Mathem2,         { модули математических преобразований }

     Draw1,Draw2;             { модули процедур и функций для рисования }

procedure info;

begin

    clrscr;

    writeln('Лабораторная работа №8');

    writeln('"Решение систем нелиненых алгебраических уравнений"');

    writeln('');

    writeln('Выполнил студент группы ИСТд-12 Денисов Дмитрий');

    writeln('');

    writeln('Задание:');

    writeln('  Графически и численно решить систему нелинейных ');

    writeln('  алгебраических уравнений на примере поиска точек ');

    writeln('  пересечения двух функций. ');

    writeln('   ');

    writeln('Вариант №6: ');

    writeln('  / ');

    writeln('  | y=(x+5)/x^2+2 ');

    writeln(' < ');

    writeln('  | y=x^2-2x-3 ');

    writeln('  \ ');

end;

{ Первая математическая функция }

function F1(x:real):real;far; { Дальняя ссылка }

  begin

    F1:=(x+5)/(x*x+2);

  end;

{ Вторая математическая функция }

function F2(x:real):real; far; { Дальняя ссылка }

  begin

    F2:=x*x-2*x-3;

  end;

{ **************** Основная часть  **************** }

var

  M1,M2:TMatMas;          { Таблицы математических функций }

  Y1min,Y2min,            { Минимумы и ... }

  Y1max,Y2max,            { ... максимумы математических функций  }

  Ymin,Ymax:real;         { Абсолютный минимум и максимум функций }

  Ms1,Ms2:TScrMas;        { "Экранные" таблицы }

  Xo,Yo:word;             { Координаты "экранного" нуля }

  Kx,Ky:real;             { Масштабирующие коэффициенты }

  RootMas:TRoot;          { Массив точек пересечения }

  K:word;                 { Количество точек пересечения }

  Rect:Trect;             { Прямоугольник для вывода графика }

begin

info;

{ ********* Подготовка данных для рисования ***********  }

    with Rect do

     begin

       Origin.X:=originx;

       Origin.Y:=originy;

       Size.X:=Nx;

       Size.Y:=Ny;

     end;

{ Заполнение таблиц математических функций }

     EnterMatMas(M1,Nx,@F1,Xmin,Xmax);

     EnterMAtMas(M2,Nx,@F2,Xmin,Xmax);

{ Вычисление минимума и максимума математических функций }

     Y1min:=Min(M1,Nx); Y1max:=Max(M1,Nx);

     Y2min:=Min(M1,Nx); Y2Max:=Max(M2,Nx);

     Ymin:=Minimum(Y1min,Y2min);

     Ymax:=Maximum(Y1max,Y2max);

 { Вычисление масштабирующих коэффициентов  }

     Kx:=Nx/(Xmax-Xmin);

     Ky:=Ny/(Ymax-Ymin);

{ Заполнение "экранных" таблиц }

     EnterScrMas(Ms1,M1,Ymin,Ky,Rect);

     EnterScrMas(Ms2,M2,Ymin,Ky,Rect);

 { Вычислить координаты "экранного" нуля }

     Zero(Xmin,Xmax,Ymin,Ymax,Rect,Kx,Ky,Xo,Yo);

 { Найти точки пересечения }

     K:=Solution(Xmin,Xmax,@F1,@F2,RootMas);

{ ********************** Рисование ********************* }

     GraphInit;

{ Нарисовать рамку }

     Ramka(rect,Width,Cyan);

{ Рисование граничных значений по углам рамки }

     DrawBounds(Xmin,Xmax,Ymin,Ymax,Rect,Red);

 { Рисование координатной сетки }

     DrawGridLines(NgrX,NgrY,Rect,DarkGray);

 { Нарисовать оси }

     DrawAxis(Rect,Xo,Yo,Red);

 { Нарисовать функции }

     DrawFunction(Ms1,Nx,LightGreen);

     DrawFunction(Ms2,Nx,Yellow);

 { Вывести координаты точек пересечения }

     WriteCoord(RootMas,K,Rect,LightGreen);

     ReadKey;

     closegraph;

end. 
 

Модуль постоянных: 

unit Consts;

interface

const

  Nx=440;                  { Размер графика по оси X }

  Ny=480;                  { Размер графика оси Y    }

  OriginX=180; OriginY=40; { Левый верхний угол рамки }

  Xmin=-5; Xmax=5;         { Начальное и конечное значения аргумента }

  NgrX=10;  NgrY=26;       { Количество линий координатной сетки }

  Epsilon=0.001;           { Точность решения }

  R=10;                    { Количество поддиапазонов }

const

  Width=3;                 { Ширина рамки }

implementation

end. 

Модуль используемых типов: 

unit Types;

interface

uses Consts;

type

  TMatMas=array[1..Nx] of real;            { Тип математической таблицы }

  TScrMas=array[1..Nx] of word;            { Тип "экранной" таблицы     }

  TRealCoord=record x,y:real; end;         { Тип координата в действит. числах }

  TRoot=array[1..Nx div 10] of TRealCoord; { Тип массив точек пересечения }

  TIntCoord=record x,y:word; end;          { Тип координата в целых числах }

  TRect=record                             { Координаты прямоугольника }

    Origin:TIntCoord;                      { Левый верхний угол        }

    Size:TIntCoord;                        { Размер }

  end;

implementation

end. 

Модули математической обработки исходных данных: 

Первый модуль: 

unit Mathem1;

interface

uses Types, Consts;

procedure EnterMatMas (

   var M : array of real; { Таблица математической функции      }

   Nx    : word;          { Количество точек в таблице          }

   Func  : Pointer;       { Указатель на математическую функцию }

   Xmin,Xmax : real       { Начальное и конечное значения аргумента }

                      );

{ Вычисление точек пересечения }

function Solution(

    Xmin,Xmax:real;    { Минимум и максимум аргумента }

    F1,F2:pointer;     { Математические функции       }

var RootMas:TRoot):    { Массив координат пересечения }

    byte;              { Количество точек пересечения }

implementation

procedure EnterMatMas(

   var M : array of real; { Таблица математической функции      }

   Nx    : word;          { Количество точек в таблице          }

   Func  : Pointer;       { Указатель на математическую функцию }

   Xmin,Xmax : real       { Начальное и конечное значения аргумента }

                      );

  type

    TFunc = function (x:real):real; { Описание типа функции }

  var

    F  : TFunc; { Математическая функция    }

    x  : real;  { Значение аргумента        }

    dx : real;  { Шаг вычисления функции    }

    i  : word;  { Счетчик вычисляемых точек }

  begin

    F:=TFunc(Func);     { Сделать ссылку на математическую функцию }

    dx:=(Xmax-Xmin)/(Nx-1); { Вычислить шаг вычисления функции         }

    x:=Xmin;              { Начальное значение аргумента             }

    for i:=0 to Nx-1 do { Цикл заполнения таблицы                  }

Информация о работе Решение систем нелинейных алгебраических уравнений