Разработка алгоритмов и программ решения алгебраических задач численными методами
Входными данными в этой задаче являются: An— начальное значение аргумента, Da— шаг, с которым изменяется параметр, N— кол-во его изменений, M— количество значений аргумента Х, массив значений аргумента Х. Для решения интеграла методом Симпсона используются следующие входные данные: интервалы изоляции интеграла — с, d, начальное приближение корня — Xo, погрешность вычисления интеграла? Eps… Читать ещё >
Разработка алгоритмов и программ решения алгебраических задач численными методами (реферат, курсовая, диплом, контрольная)
Московский авиационный институт Национальный исследовательский университет Факультет радиоэлектроники Кафедра 403
Расчетно-графическая работа по дисциплине: Информатика
Разработка алгоритмов и программ решения алгебраических задач численными методами
Выполнил:
студент группы 4О-110Б Ибрагимов Я. О Принял:
Преподаватель кафедры 403
Кошелькова Л. В Москва 2011
Анализ задания Теоретические сведения Схемы алгоритмов Набор тестов Текст программы Список используемой литературы
Анализ задания
Разобрать схему алгоритма, составить Pascal-программу для вычисления таблицы значений функций:
если аргумент Х принимает M различных значений, параметр, А изменяется от начального значения An, N раз, с шагом Da, а параметр В принимает значение, равное интегралу:
вычисленному с погрешностью о при заданном интервалом изоляции c, d.
Входными данными в этой задаче являются: An— начальное значение аргумента, Da— шаг, с которым изменяется параметр, N— кол-во его изменений, M— количество значений аргумента Х, массив значений аргумента Х. Для решения интеграла методом Симпсона используются следующие входные данные: интервалы изоляции интеграла — с,d, начальное приближение корня — Xo, погрешность вычисления интеграла? Eps, предельно допустимое число повторений цикла при вычислении корня- Km.
Выходными данными являются четыре массива: двумерный массив значений функции Мy двумерный массив ошибок Er, одномерный массив аргумента Мх и параметра А; значение интеграла? В, диагностические сообщения, извещающие пользователя в следующих случаях:
· Невозможность вычисления тангенса числа, выходящего за его ОДЗ.
· Невозможность вычисления интеграла с заданной точностью за определенное количество повторений цикла.
В алгоритме выполняются следующие функции:
· ввод исходных данных
· вычисление уравнения
· проверка количества итераций при вычислении интеграла и формирование ошибки в случае, если корень не найден за заданное число итераций;
· вычисление таблицы значений функции
· проверка значения выражения под функцией tg и формирования признака ошибки, если оно имеет отрицательный знак
· вывод результатов вычислений
Теоретические сведения
Определённый интеграл — аддитивный монотонный нормированный функционал, заданный на множестве пар, первая компонента которых есть интегрируемая функция или функционал, а вторая — область во множестве задания этой функции (функционала).
Нахождение значения интеграла:
1. Нахождение первообразной функции;
2. Нахождения значений первообразной от нижней и верхней границы интегрирования;
3. Вычитание значения первообразной от нижней границы интегрирования из значения первообразной от верхней границы.
Используя три точки отрезка интегрирования, можно заменить подынтегральную функцию параболой. В качестве таких точек используют концы отрезка и его середину:
.
Если разбить интервал интегрирования на 2N равных частей, то имеем где.
Схемы алгоритмов
В соответствии с принципами структурного программирования каждый функционально законченный фрагмент программы оформлен в виде подпрограммы. В результате программа включает главную программу и набор подпрограмм, предназначенных соответственно для ввода массива (InpX), табулирования функции (Vych), вычисления интеграла (integral), вывода результатов выполнения программы (OutP).
Схема алгоритма главной программы представлена на рис. 2, а таблица обозначения переменных главной программыв табл. 1.
Главная программа начинается с ввода значений входных данных: сначала — простых переменных, а затеммассива X с помощью подпрограммыпроцедуры (InpX).
Обозначение в задании | Обозначение в алгоритме | Наименование | |
M | M | Количество элементов массива аргумента Х, целый тип | |
An | An | Начальное значение параметра А, вещественный тип | |
Da | Da | Шаг изменения параметра А, вещественный тип | |
N | N | Количество изменений параметра А, вещественный тип | |
X | 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корень логарифмического уравнения;
erмассив ошибок; Boolean
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;
type
TForm1 = class (TForm)
mmo1: TMemo;
edt1: TEdit;
edt2: TEdit;
edt3: TEdit;
Button1: TButton;
edt4: TEdit;
lbl3: TLabel;
lbl1: TLabel;
lbl2: TLabel;
lbl8: TLabel;
lbl6: TLabel;
lbl5: TLabel;
lbl4: TLabel;
Chart1: TChart;
Series1: TLineSeries;
StringGrid1: TStringGrid;
XPManifest1: TXPManifest;
edt5: TEdit;
edt6: TEdit;
edt7: TEdit;
edt8: TEdit;
lbl9: TLabel;
lbl10: TLabel;
lbl11: TLabel;
lbl12: TLabel;
procedure edt4KeyPress (Sender: TObject; var Key: Char);
procedure Button1Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
private
M:array [0.40] of Real;
y:array [0.40,0.40] of Real;
a, da: Real;
n:integer;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function f (x:real):Real;
begin
F:=sqr (sqrt (x)+1)*exp (3*x*(ln (exp (1))))/exp (6*ln (x));
end;
procedure Integral (C, D, Eps:real; Km: integer; var Z: real; var Err: integer);
var H, W, Z0:real;
i, j, K:integer;
begin
Err:=1;
K:=2;
j:=1;
Z0:=0;
While j
Z:=F (C)+F (D);
H:=(D-C)/K;
For i:=1 to K-1 do If Odd (i) Then Z:=Z+4*F (C+i*H)
Else Z:=Z+2*F (C+i*H);
Z:=Z*H/3;
W:=Abs (Z0-Z);
If w
Err:=Err-1;
j:=Km;
end
Else begin
Z0:=Z;
j:=j+1;
K:=K*2;
end;
end;
end;
procedure TForm1. edt4KeyPress (Sender: TObject; var Key: Char);
var
i:Integer;
begin
if Key=#13 then
StringGrid1.ColCount:=StrToInt (edt4.Text)+1;
for i:=1 to StringGrid1. ColCount do
StringGrid1.Cells[i, 0]: ='X'+IntToStr (i);
end;
procedure TForm1. Button1Click (Sender: TObject);
var
i, j: integer;
aa:Real;
ter:real;
c, d, eps:Extended;
km:integer;
err:integer;
z:Real;
begin
a:=StrToFloat (edt1.Text);
da:=StrToFloat (edt3.Text);
n:=StrToInt (Edt2.Text);
c:=StrToFloat (edt5.Text);
d:=StrToFloat (edt6.Text);
km:=StrToInt (edt8.Text);
eps:=StrToFloat (edt7.Text);
Integral (C, D, Eps, Km, Z, Err);
ShowMessage ('B='+FloatTOStr (z));
aa:=a;
Chart1.Series[0]. Clear;
StringGrid1.RowCount:=n+2;
for i:=1 to StringGrid1. ColCount-1 do
m[i]: =StrToFloat (StringGrid1.Cells[i, 1]);
For I:=1 to n+1 do
begin
StringGrid1.Cells[0,i+1]: =FloatToStr (aa);
for j:=1 to StringGrid1. ColCount-1 do
begin
if (cos (pi*m[j]/5)=0) then
begin
mmo1.Lines.Add ('Ошибка деления на 0');
StringGrid1.Cells[i, j+1]: ='Ошибка деления на 0';
end
else
begin
y[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])
end;
Chart1.Series[0].AddXY (m[j], y[i, j])
end;
aa:=aa+da;
end;
end;
procedure TForm1. FormCreate (Sender: TObject);
begin
mmo1.Text:='';
StringGrid1.ColCount:=2;
StringGrid1.Cells[1,0]: ='1';
StringGrid1.Cells[0,1]:=' a/x';
end;
end.
1. Кошелькова Л. В., Заковряшин А. И. Решение алгебраических задач численными методами в среде DELPHI: Учебное пособие к расчётной работе. — М.: Изд-во МАИ-ПРИНТ, 2008. — 88 с.: ил.
2. http://ru.wikipedia.org — свободная общедоступная мультиязычная универсальная интернет-энциклопедия.