Разработка алгоритмов и программ решения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Разработка алгоритмов и программ решения

 

Московский авиационный институт

(национальный исследовательский университет)

 

Факультет радиоэлектроники

Кафедра 403

 

Разработка алгоритмов и программ решения

алгебраических задач численными методами

 

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

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

 

 

Выполнил:

Студент группы 4О-106Б

Мирзаев Фаррух

 

Принял:

Преподаватель кафедры 403

Кошелькова Л.В.

 

 

Вариант 105

Условия задачи :

Требуется расчитать значения функции :

 

Данная функция является трансцендентной, имеющая 3 переменные величины (a, x, b). Количество значений (и сами значения) переменной величины a определяется пользователем. Величина x формируется с помощью начального, конечного значения и шага (начальное, конечное значение и шаг определяется так же пользователем). b - корень следующей функции :

 

 

Программа включает в себя главную программу и набор подпрограмм, предназначенных соответственно для ввода массива (DataIn), табулирование функции (Tab), вычисления корня уравнения (Equat), вывод результатов выполнения программы (RezOut).

Схема алгоритма главной программы представлена на рис.2, а таблица обозначения переменных главной программы в табл.1.

Главная программа начинается с ввода значений входных данных: сначала – простых переменных, а затем массива А с помощью подпрограммы-процедуры(ПП) DataIn.

 

Таблица 1

Обозначение в задании

Обозначение в алгоритме

Наименование

Xn

Xn

Начальное значение аргумента, вещественный тип

Xk

Xk

Конечное значение аргумента, вещественный тип

Dx

Dx

Шаг изменения аргумента, вещественный тип

N

N

Количество значений параметра A, целый тип

А

А

Массив значений параметра, вещественный тип

В

В

Параметр функции, вещественный тип

Х

Х

Аргумент, вещественный тип

Y

Y

Функция, вещественный тип

 

Mx

Массив значений аргумента, вещественный тип

 

My

Массив значений функции, вещественный тип

 

K

Количество значений аргумента (функции), целый тип

C,D

C,D

Параметры уравнения, вещественный тип

 

Z

Корень уравнения, вещественный тип

Eps

Eps

Заданная погрешность вычисления корня, вещественный тип

 

Zt

Погрешность вычисления корня по невязке, вещественный тип

 

Km

Предельное число повторений цикла, целый тип

 

Err

Признак ошибки при решении уравнения, целый тип

 

I,J

Счетчик числа повторений циклов, целый тип

 

 

Рисунок ниже демонстрирует график функции:

 

 

Рис. 2. Схема алгоритма главной программы

 

Вычисление корня нелинейного уравнения происходит путем обращения к ПП Equat, формирующей также признак ошибки в случае, если корень не найден за предельно допустимое число итераций Km. При Err=0 (не равном нулю) выводится диагностическое сообщение “Корень не найден за Km итераций”, иначе происходит табулирование функции (ПП Tab) и вывод результатов выполнения программы (ПП RezOut). Значение Zt определяется погрешностью вычисления корня по невязке, а значение K – количество значений аргумента и функции.

Схемы алгоритмов подпрограмм, используемых в данной программе, с указанием их назначения и списков формальных параметров приведены на рис. 3 – 7.

Подпрограмма – процедура DataIn предназначена для ввода значений элементов одномерного массива заданного размера.

Список формальных параметров: N,A.

Входные параметры: N.

N – количество элементов массива; величина целого типа.

Выходные параметры: A.

A – массив значений элементов; величины вещественного типа

Рис. 3. Схема алгоритма подпрограммы-процедуры DataIn

 

Подпрограмма-функция F (рис. 4) предназначена для вычисления значения функции уравнения, представляет собой один оператор присваивания и используется в главной программе для проверки погрешности вычисления корня по невязке.

Подпрограмма-функции F предназначена для вычисления значения функции F.

Список формальных параметров: X.

Входные параметры: X.

X – аргумент функции, тип – вещественный

 

Рис. 4. Схема алгоритма подпрограммы-функции F

 

Подпрограмма-процедура вычисления корня уравнения Equat (рис. 5) реализуется циклом итерационного типа, который завершается при условии, что F(B)>eps.

 

 

Подпрограмма-процедура табулирования Tab (рис. 6), выполненная в виде двойного цикла, определяет функциональную зависимость вида Y=f(X) при различных значениях параметров, поэтому внутренний цикл должен быть связан с изменением аргумента X, а внешний – с изменением параметра А.

 

 

Подпрограмма-процедура RezOut (рис. 7) выводит результаты выполнения программы. По структуре она построена аналогично подпрограмме Tab: представляет собой двойной цикл арифметического типа, но в отличие от ПП Tab, где внутренний цикл выполнен с постусловием, здесь оба цикла выполнены с предусловием.

Подпрограмма-процедура Equat предназначена для вычисления значения корня нелинейного уравнения с заданной погрешностью.

Список формальных параметров: C, D, Eps, Km, B, Err;

Входные параметры: C, D, Eps, Km.

C, D – границы интервала изоляции корня, тип –вещественный;

       Eps – погрешность вычисления корня, тип –вещественный;

       Km – предельно допустимое количество циклов, тип – целый;

Выходные параметры: Err, B

B – параметры функции, тип –вещественный;Err – признак ошибки, тип – целый;

Рис. 5. Схема алгоритма подпрограммы-процедуры Equat

 

Смотрите на следующей странице.

 

Подпрограмма-процедура Tab предназначена для вычисления таблицы значений функции Y.

Список формальных параметров: B,Xn,Xk,Dx,N,A,Mx,My.

 

Входные параметры: B,Xn,Xk,Dx,N, A.

 

B-параметр функции, тип вещественный.

Xn-начальное значение аргумента, тип вещественный.

Xk-конечное значение аргумента, тип вещественный.

Dx-шаг изменения значения аргумента, тип целый.

N-количество значений параметра A, тип целый.

A-массив значений параметра, тип вещественный.

 

           Выходные параметры: A,Mx,My.

A-массив значений параметра, тип вещественный.

Mx-массив значений аргумента, тип вещественный.

My-массив значений функции, тип вещественный.

 

Рис. 6. Схема алгоритма подпрограммы-процедуры Tab

 

Подпрограмма-процедура RezOut предназначена для вывода результатов выполнения программы на внешние носители информации.

Список формальных параметров:Mx,My,A,Err,K

Входные параметры: Mx,My,A,Err,K

Mx-массив значений аргумента, тип-вещественный.

My- массив значений функции, тип-вещественный.

A-массив значений параметра, тип-вещественный.

Err-массив значений признака ошибок, тип-целый.

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

Выходные параметры: Mx,My,A,Err

Рис. 7. Схема алгоритма подпрограммы-процедуры RezOut

Program Rgr_Informatika;

           {Студент: Мирзаев Фаррух, группа: 4O-106Б, дата: 23 декабря 2012 года}

           {Программа табулирования функции  (sqr(B)/A[J]*ln((sqr(A[J])*A[J])+(sqr(B)*B)))*arctan(sqr(X)/sqrt(sqr(A[J]))*X+(1/sqr(B)))}

           {Где аргумент X изменяется от начального Xn до конечного Xk значение с шагом Dx, параметр А принимает M различных значений}

           {а параметр B равен корню уравнения 2*ln(X)-(1/sqr(X));, вычисленному при заданных значениях интервала изоляции и погрешности Eps [ 0,10 ] }

   uses math;

   type

           TMx = array [1..100] of Extended;

           Tmy = array [1..100,1..100] of Extended;

var

           A, Mx:TMx;

           My:Tmy;

           M,I, J, Km, Err, K: Integer;

           X, Y, fa, B, fb ,D, C, Xn, Xk, Dx, Eps, Zt: Extended;

 

{Текст процедуры ввода массива}

Procedure DataIn(M: integer; var A:TMx);

begin

           for I:=1 to M do

                          read(A[I]);

end;

 

           {Текст процедуры табулирования}

Procedure Tab(B,Xn, Xk, Dx: Extended; M:integer; var A, Mx:TMx; var My:Tmy);

begin

                          for J:=1 to M do

           begin

                          I:=1;

                          X:=Xn;

           repeat                 

           Y := (sqr(B)/A[J]*ln((sqr(A[J])*A[J])+(sqr(B)*B)))*arctan(sqr(X)/sqrt(sqr(A[J]))*X+(1/sqr(B)));

                                          Mx[I]:=X;

                                          My[J, I]:=Y;

                                          inc(I);

                                          X:=X + Dx;

           until X>Xk;

           end;

end;

 

           {Подпрограмма-функции}

Function F(X:Extended):Extended;

begin

F:=2*ln(X)-(1/sqr(X));

end;

 

           {Нахождение корня методом дихотомии}

Procedure Equat(C, D:Extended; Km: integer; Eps: Extended; var B:Extended; var Err:integer);

begin

 

           fa:=F(C);

                          for I:=1 to Km do

           begin

           Err:=0;

                          B:=(C + D)/2;

                          fb:=F(B);

           if abs(F(B))>Eps then

                          begin

                                          if fa*fb > 0 then

                                                          C:=B else

                                              

                                                          D:=B     

                          end

                          else

                                          begin

                              

                                              

                                          end;

           end;

end;

 

 

           {Текст процедуры вывода данных}

Procedure RezOut(A, Mx:TMx; My:Tmy; M, K: integer);

begin

           For J:=1 to M do

                          begin

                                          writeln(' A[',J,'] =',A[J]:8:4);

                                          writeln(' X  Y ');

                          For I:=1 to K do

                                          writeln(Mx[I]:6:3,' ',My[J,I]:6:3);

                          end;

end;

 

           {Главная программа}

begin

           writeln('Введите значение переменных : Xn,Xk,Dx,M');

           readln(Xn,Xk,Dx,M);

           writeln('Введите погрешность Eps, число циклов Km');

           readln(Eps,Km);

           writeln('Заполните массив A [Количество значений ', M, ']');

           DataIn(M, A);

           writeln('Введите левую и правую границу интервала изоляции');

           readln(C,D);

 

           Equat(C, D,Km, Eps, B, Err);

                                                                                                                                   if C<0 then Err:=1 ;          if B>10 then Err:=1 ;

if Err=0 then

           begin

                          Zt:=2*ln(B)-(1/sqr(B));

                          writeln('[ Xn = ',Xn:4:2, ' ],[',' Xk = ',Xk:4:2, ' ],[',' Dx = ',Dx:4:2, ' ]');

           writeln('[ M = ',M, ' ],[',' Eps = ',Eps:7:3, ' ],[',' Km = ',Km:3, ' ]');

           writeln('[ Корень= ',B:4:2, ' ]',',[Zt = ', Zt:8:7, ' ]');

                          Tab(B, Xn, Xk, Dx,M, A,Mx,My);

                          K:=trunc((Xk - Xn)/Dx) + 1;

                          RezOut(A, Mx, My, M,K);

           end;

if Err=1 then writeln

('Корень не найден за',Km,'итераций');

end.

 

Тестирование программы :

 

 

Литература :

"Решение алгебраических задач численными методами в среде DELPHI"

Л.В. Кошелькова , А.И. Заковряшин

Москва 2008

 

Оглавление

Условие задачи и обозначение переменных……………………………………………………………………………… 3

График функции……………………………………………………………………………………………………………………………. 4

Блок-схема главной программы………………………………………………………………………………………………….. 5

Описание подпрограммы DataIn и ее блок-схема………………………………………………………………………. 6

Описание подпрограммы функции с блок-схемой и подпрограмм Equat,Tab,Rezout………………. 7

Блок-схема подпрограммы Equat…………………………………………………………………………………………………. 8

Блок-схема подпрограммы Tab………………………………………………………………………………………………..  9-10

Блок-схема подпрограммы RezOut………………………………………………………………………………………………. 11

Код программы на языке Pascal………………………………………………………………………………………………. 12-15

Результаты тестирования откомпилированной программы в среде FreePascal…………………… 16-17

Используемая литература………………………………………………………………………………………………………………18

 

 

                                   

 



Поделиться:


Последнее изменение этой страницы: 2024-06-17; просмотров: 45; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.007 с.)