Разработка алгоритмов и программ решения алгебраических задач численными методами
Московский
авиационный институт
Национальный
исследовательский университет
Факультет
радиоэлектроники
Кафедра 403
Расчетно-графическая
работа
по
дисциплине: Информатика
Разработка
алгоритмов и программ решения алгебраических задач численными методами
Выполнил:
студент
группы 4О-110Б
Ибрагимов
Я.О
Принял:
Преподаватель
кафедры 403
Кошелькова
Л.В
Москва 2011
Содержание
Анализ задания
Теоретические сведения
Схемы алгоритмов
Набор тестов
Текст программы
Список используемой литературы
Анализ задания
Разобрать схему алгоритма, составить Pascal-программу
для вычисления таблицы значений функций:
если аргумент Х принимает M
различных значений, параметр А изменяется от начального значения An,
N раз, с шагом Da,
а параметр В принимает значение, равное интегралу:
,
вычисленному с погрешностью ξ
при заданном интервалом изоляции c,d.
Входными данными в
этой задаче являются: An-
начальное значение аргумента, Da-
шаг, с которым изменяется параметр, N-
кол-во его изменений, M-
количество значений аргумента Х, массив значений аргумента Х. Для
решения интеграла методом Симпсона используются следующие входные данные:
интервалы изоляции интеграла - с,d,
начальное приближение корня - Xo,
погрешность вычисления интеграла − Eps,
предельно допустимое число повторений цикла при вычислении корня- Km.
Выходными данными
являются четыре массива: двумерный массив значений функции Мy
двумерный массив ошибок Er,
одномерный массив аргумента Мх и параметра А; значение интеграла −
В, диагностические сообщения, извещающие пользователя в следующих
случаях:
· Невозможность вычисления тангенса числа,
выходящего за его ОДЗ.
· Невозможность вычисления интеграла с
заданной точностью за определенное количество повторений цикла.
В алгоритме выполняются следующие функции:
· ввод исходных данных
· вычисление уравнения
· проверка количества итераций при
вычислении интеграла и формирование ошибки в случае, если корень не найден за
заданное число итераций;
· вычисление таблицы значений функции
· проверка значения выражения под
функцией tg и
формирования признака ошибки, если оно имеет отрицательный знак
· вывод результатов вычислений
Теоретические сведения
Определённый интеграл - аддитивный монотонный
нормированный функционал, заданный на множестве пар, первая компонента которых
есть интегрируемая функция или функционал, а вторая - область во множестве
задания этой функции (функционала).
Нахождение значения интеграла:
. Нахождение
первообразной функции;
2. Нахождения значений первообразной от
нижней и верхней границы интегрирования;
3. Вычитание
значения первообразной от нижней границы интегрирования из значения
первообразной от верхней границы.
Используя три точки отрезка
интегрирования, можно заменить подынтегральную функцию параболой. В качестве
таких точек используют концы отрезка и его середину:
.
Если разбить интервал
интегрирования на 2N равных частей, то имеем
где.
Схемы алгоритмов
В соответствии с принципами структурного
программирования каждый функционально законченный фрагмент программы оформлен в
виде подпрограммы. В результате программа включает главную программу и набор
подпрограмм, предназначенных соответственно для ввода массива (InpX),
табулирования функции (Vych),
вычисления интеграла (integral),
вывода результатов выполнения программы (OutP).
Схема алгоритма главной программы представлена
на рис.2, а таблица обозначения переменных главной программы- в табл. 1.
Главная программа начинается с ввода значений
входных данных: сначала - простых переменных, а затем- массива X
с помощью подпрограммы- процедуры (InpX).
Обозначение
в задании
|
Обозначение
в алгоритме
|
Наименование
|
M
|
M
|
Количество
элементов массива аргумента Х, целый тип
|
An
|
An
|
Начальное
значение параметра А, вещественный тип
|
Da
|
Da
|
Шаг
изменения параметра А, вещественный тип
|
N
|
N
|
Количество
изменений параметра А, вещественный тип
|
X
|
Массив
значений аргумента Х, вещественный тип
|
B
|
B
|
Параметр
функции, вещественный тип
|
Y
|
Y
|
Функция,
вещественный тип
|
|
My
|
Массив
значений параметра, вещественный тип
|
|
Er
|
Массив
признака ошибки, целый тип
|
C,D
|
C,D
|
Границы
интеграла, вещественный тип
|
ξ
|
Eps
|
Заданная
погрешность вычисления корня, вещественный тип
|
|
Xn
|
Начальное
приближение корня, вещественный тип
|
|
Km
|
Предельное
число повторений цикла, целый тип
|
|
Err
|
Признак
ошибки при решении интеграла, целый тип
|
|
I,J
|
Счетчики
циклов, целый тип
|
Схема алгоритма главной программы. Вычисление
интеграла производится путем вызова процедуры integral,
формирующей также признак ошибки в случае, если корень не найден за предельно
допустимое число итераций Km.
При
Err=1 выводятся
диагностическое сообщение, иначе происходит табулирование функции (ПП Vych)
и вывод результатов выполнения программы (ПП Outp).
Значение eps
определяет
погрешность корня.
Подпрограмма − процедура ввода Inpx
реализуется циклом, который завершается при наполнении всех указанных ячеек
массива. В данном цикле реализуется заполнение массива X.
Список формальных параметров:M,X
Входные параметры: M
M- количество ячеек
массива; вещественный тип
Выходные параметры: Х
Х- массив аргумента Х; вещественный тип
Подпрограмма-функция F
предназначена для вычисления значения подынтегральной функции.
Список формальных параметров: x.
Входные данные:
1. x
- аргумент функции, тип - вещественный.
Подпрограмма-процедура решения интеграла, Integral,
реализуется методом Симпсона, состоящего из цикла, делящегося на две ветви для
нахождения решения.
Подпрограмма-процедура Integral
предназначена для вычисления численного значения интеграла.
Список формальных параметров: C,
D, Z,
Eps, Km,
Err.
Входные данные:
1. C
- нижняя граница интегрирования, тип - вещественный;
2. D
- верхняя граница интегрирования, тип - вещественный;
3. Eps
- погрешность вычисления интеграла, тип - вещественный;
4. Km
- предельное число повторений цикла, тип - целый.
Выходные данные:
1. Z
- численное значение интеграла, тип - вещественный;
Err - признак
ошибки при вычислении интеграла, тип - целый.
Подпрограмма-процедура для вычисления значения
функции vych, реализуется двойным циклом для вывода двумерного массива
результатов y и других данных.
Подпрограмма-процедура vych
для вычисления значения переменной y
для всех возможных случаев
Список формальных параметров: y,x,an,da,n,m
Входные параметры: x,an,da,n,m
x- массив аргументов
X; вещественный тип
an- начальное
значение параметра а; вещественный тип
da- размер
“шага” изменения параметра а; вещественный тип
n- количество
“шагов” изменений параметра а; целый тип
m- количество ячеек
массива x
; вещественный
тип
Выходные параметры: y
y- двумерный массив
аргументов y; вещественный тип
Er- массив
ошибок; бинарный тип
Подпрограмма-процедура outp,
предназначенная
для вывода результатов расчета программы по средствам применения двойного
цикла.
Список формальных параметров: x,y,b,er,an,da,n,m
Входные параметры: x,y,b,er,an,da,n,m
x- массив аргументов
X; вещественный тип
y- двумерный массив
аргументов y; вещественный тип
b- корень
логарифмического уравнения;
an- начальное
значение параметра а; вещественный тип
da- размер
“шага” изменения параметра а; вещественный тип
n- количество
“шагов” изменений параметра а; целый тип
m- количество ячеек
массива x
; вещественный
тип
Набор тестов
алгоритм интеграл подпрограмма тест
Для проверки правильности алгоритмов составим
тесты для возможных путей вычислений и выполним контрольные просчеты, пользуясь
независимыми от Pascal-среды
вычислительными средствами - калькулятор.
Тест 1.
Проверка ветви, работающей при правильном вводе данных
Входные данные: M=1;
An=2; N=1;
Da=0; d=0.57;c=2.36;eps=0.1;km=10;X[1]=3
Результаты: y=
-115.03
b= 5.708
Тест 2.
Проверка действий программы при вводе значений, приводящих к ошибке
вычислений
Входные данные: М=2; An=1.4;
N=3; Da=2;
d=0.57; c=2.36;
eps=0.1;km=10;
x[1]=2.5; x[2]=0
Результат: Ошибка при х=2.5
Тест 3.
Проверка действий программы при вводе множества Х.
Входные данные: М=4; An=2.3;
N=4; Da=0.3;
d=0.57; c=2.36;
eps=0.1; km=10
x[1]=3; x[2]=4;
x[3]=3; x[4]=4
Текст программы
unit
Unit1;
interface
uses
Windows,
Messages, SysUtils,
Variants, Classes,
Graphics, Controls,
Forms,
Dialogs,
StdCtrls, Grids,
jpeg, ExtCtrls,
TeEngine, Series,
TeeProcs,
Chart, XPMan;= class(TForm)
mmo1: TMemo;: TEdit;: TEdit;:
TEdit;: TButton;: TEdit;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;:
TLabel;: TChart;: TLineSeries;: TStringGrid;: TXPManifest;: TEdit;
edt6: TEdit;
edt7: TEdit;: TEdit;: TLabel;
lbl10: TLabel;: TLabel;: TLabel;
procedure edt4KeyPress(Sender:
TObject; var Key: Char);Button1Click(Sender: TObject);FormCreate(Sender:
TObject);:array [0..40] of Real;:array [0..40,0..40] of Real;,da:Real;:integer;
{ Private declarations }
{ Public declarations };
var: TForm1;
{$R *.dfm}
function
f(x:real):Real;:=sqr(sqrt(x)+1)*exp(3*x*(ln(exp(1))))/exp(6*ln(x));;
procedure Integral(C,D,Eps:real;
Km:integer; var Z:real; var Err:integer);
var
H,W,Z0:real;,j,K:integer;:=1;:=2;:=1;:=0;j<Km do begin:=F(C)+F(D);
H:=(D-C)/K;i:=1 to K-1 do If Odd(i)
Then Z:=Z+4*F(C+i*H)Z:=Z+2*F(C+i*H);:=Z*H/3;:=Abs(Z0-Z);w<Eps Then begin
Err:=Err-1;:=Km;begin
Z0:=Z;:=j+1;:=K*2;;;
end;TForm1.edt4KeyPress(Sender:
TObject; var Key: Char);:Integer;Key=#13
then.ColCount:=StrToInt(edt4.Text)+1;i:=1 to StringGrid1.ColCount
do.Cells[i,0]:='X'+IntToStr(i);;TForm1.Button1Click(Sender: TObject);
var,j:integer;:Real;
ter:real;,d,eps:Extended;
km:integer;:integer;:Real;
begin:=StrToFloat(edt1.Text);
da:=StrToFloat(edt3.Text);:=StrToInt(Edt2.Text);
c:=StrToFloat(edt5.Text);:=StrToFloat(edt6.Text);:=StrToInt(edt8.Text);:=StrToFloat(edt7.Text);(C,D,Eps,Km,Z,Err);('B='+FloatTOStr(z));:=a;.Series[0].Clear;.RowCount:=n+2;i:=1
to StringGrid1.ColCount-1 do[i]:=StrToFloat(StringGrid1.Cells[i,1]);I:=1 to n+1
do.Cells[0,i+1]:=FloatToStr(aa);j:=1 to StringGrid1.ColCount-1
do(cos(pi*m[j]/5)=0) then
begin.Lines.Add('Ошибка
деления на 0');
StringGrid1.Cells[i,j+1]:='Ошибка
деления на 0';
end[i,j]:=aa*z*(sin((pi*m[j]/5))/cos((pi*m[j]/5))+2*aa*cos(m[j]/2*m[j]));
mmo1.Lines.Add('x= '+ FloatToStr(m[j])+ ' : ' +
'y= '+floattostr(y[i,j]));
StringGrid1.Cells[j,i+1]:=FloatToStr(y[i,j]);.Series[0].AddXY(m[j],y[i,j]);:=aa+da;;;TForm1.FormCreate(Sender:
TObject);.Text:='';.ColCount:=2;.Cells[1,0]:='1';.Cells[0,1]:=' a/x';
end;.
Список использованной литературы
1. Кошелькова
Л.В., Заковряшин А.И. Решение алгебраических задач численными методами в среде DELPHI:
Учебное пособие к расчётной работе. - М.: Изд-во МАИ-ПРИНТ, 2008. - 88 с.: ил.
. http://ru.wikipedia.org
- свободная общедоступная мультиязычная универсальная интернет-энциклопедия.