Рассмотрение метода решения

Расчет суммы будем проводить по рекуррентной формуле: S=S+C, т.е. новое значение суммы S есть старое значение суммы S + очередное слагаемое C.

Чтобы получить рекуррентное соотношение для расчета слагаемых, поделим последующее слагаемое на предыдущее. Получим:

Рассмотрение метода решения - student2.ru и т.д.

Отсюда можно получить для расчета очередного слагаемого по предыдущему формулу:

C = - C*X*J/(J+1),

в которой J каждый раз увеличивается на два. Последняя рекуррентная формула (для J) : J=J+2 .

Очевидно, что все эти операторы должны выполняться в цикле с заранее неизвестным числом шагов. Для начала расчета необходимо задать исходные значения для J, C и S. Вполне естественно начальными значениями C и S взять первое слагаемое, т.е. единицу, а величину J подобрать такой, чтобы на первом шаге вычислить второе слагаемое по первому, т.е. J перед входом в цикл тоже сделать равным единице.

Окончание цикла осуществим, когда очередное слагаемое станет по модулю меньше EPS, но не более чем после сотого слагаемого. Последнее ограничение вводим для предотвращения возможности бесконечного цикла в случае возможных ошибок программирования.

В задании для организации итеративного цикла предложено использовать оператор repeat, поэтому условие выхода запишется:

. . .

until (abs(C) < EPS) or (K >100);

Полученные значения S, K, а также вычисленное выражение F(X) и величину аргумента X будем печатать с учетом размеров возможных значений в следующем порядке: X,F(x),S,K, разделяя их вертикальной чертой:

writeln('|',X:6:2,'|',1.0/Sqr(1.0+X):10:7,'|',

S:10:7,'|',K:3,'|');

Значения не подписываем, так как расчет придется повторить несколько раз и насчитанные значения образуют таблицу, которую и озаглавим один раз до начала расчета по всем значениям X, например:

writeln('| X | F(x) | S | K |');

Так как в данном варианте нам даны начальное и конечное значения Xи шаг его изменения, необходимо сначала вычислить, сколько будет значений X (и строк в таблице):

Nx := Trunc((B - A)/Dx) +1; {функция Trunc отбрасывает

дробную часть аргумента }

Добавляется единица, так как число точек всегда на один больше числа интервалов между ними. Это, кстати, следует помнить при вычислении Dx по Nx:

Dx := (B - A)/(Nx - 1);

Таблица идентификаторов

Таблица 21. Идентификаторы программы 31 варианта

Имя Тип Р-р (байт) Назначение
Tabl_Of_Fx Имя программы - Расчет таблицы значений функции
A Веществ.константа Начальное значение 0.05
B " Конечное значение 0.04
X Вещественное Значение аргумента на j-том шаге
Dx " " Шаг аргумента
S " " Сумма
C " " Очередное слагаемое
EPS " " Заданная точность
Nx Целое Количество шагов
J " " Номер строки таблицы
K " " Количество слагаемых
i " " Счетчик цикла по X
fout Послед. симв. файл Для выходного файла
Vvod_Dx Метка Начало блока ввода шага
Vvod_EPS Метка Начало блока ввода точности

Алгоритм

Должен содержать следующие шаги:

1. Задание исходных данных в разделе констант (для A и B);

2. Ввод исходных данных (Dx и EPS);

3. Определение длины внешнего (по X) цикла;

4. Печать заголовка таблицы;

5. Внешний цикл (for) по X;

1) вычисление X;

2) задание начальных значений J, С и S;

3) внутренний цикл вычисления S;

a) расчет С;

б) расчет S;

в) расчет J;

г) проверка условия окончания цикла;

4) печать строки таблицы с результатами;

6. Завершение программы (печать нижней рамки таблицы, задержка).

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

program Tabl_Of_Fx;

{

Программа Лабораторной работы N 6 Вариант N 31.

Использование рекуррентных формул в итеративных циклах.

А.Я.Умненькая, ст. гр. Я-007

}

CONST {при описании переменным зададим исходные значения }

A : real = -0.05;

B : real = 0.04;

VAR

X,Dx,S,C,EPS : real;

Nx,J,K,i : integer; {I – для счетчика цикла по X }

fout : text; { для выходного файла }

LABEL

Vvod_Dx, Vvod_EPS;

BEGIN

assign(fout,'Umnik6.res');

rewrite(fout);

{ Ввод исходных данных (Dx и EPS) }

Vvod_Dx:

writeln ('Для X на отрезке[-0.05, 0.04]введите шаг счета');

readln(Dx);

if (Dx <0.002) or (Dx > 0.04) then

begin

writeln('Недопустимое значение!');

goto Vvod_Dx;

end;

Vvod_EPS:writeln('введите минимальный размер слагаемого);

readln(EPS);

if (EPS < 1e-9) or (EPS > 1e-2) then

begin

writeln('Недопустимое значение!');

goto Vvod_EPS;

end;

{ Определение длины внешнего (по X) цикла }

Nx := Trunc((B-A)/Dx) + 1;

{ печать исходных данных }

writeln(fout,' Исходные данные');

writeln(fout,' Интервал X: [',A:5:2,B:5:2,']);

writeln(fout, Шаг X:',Dx:5:3, ', шагов:',Nx:3,',

точность:',EPS:1);

{ Печать заголовка таблицы }

writeln(fout,' Результаты расчетов':30);

writeln(fout,'| X | F(x) | S ',

' |Слагаемых|');

writeln(fout,'|-------|-----------|-----------|',

'---------|');

{ Внешний цикл (for) по X }

for i:=1 to Nx do

begin

{ вычисление X }

X := A + Dx*(i-1);

if X > B then X := B; { уточнение на конце интервала}

{ задание начальных значений J, C, S и числа слагаемых K}

J := 1;

C := 1;

S := C;

K := 1;

Repeat { внутренний цикл вычисления S }

C := -C * X*J/(J+1);

S := S + C;

K := K + 1;

J := J + 2;

until (abs(C) < EPS) or (K >100);

{ печать строки таблицы с результатами }

write(fout,'| ',X:5:2,' |', 1.0/Sqr(1.0+X):10:7,

' |');

writeln(fout,S:10:7,' |',K:6,' |');

end;

{ Завершение программы (печать нижней рамки таблицы,

закрытие файлов, задержка) }

writeln(fout,'|---------------------------------',

'--------|');

close(fout);

readln;

END.

Результаты расчета

Файл UMNIK6.RES будет в этом случае содержать:

Исходные данные

Интервал X: [-0.05 0.04],

Шаг X:0.010, шагов: 9, точность: 1.0E-0006

Результаты расчетов

| X | F(x) | S |Слагаемых|

|-------|-----------|-----------|---------|

| -0.05 | 1.1080332 | 1.0259783 | 6 |

| -0.04 | 1.0850694 | 1.0206207 | 5 |

| -0.03 | 1.0628122 | 1.0153462 | 5 |

| -0.02 | 1.0412328 | 1.0101525 | 5 |

| -0.01 | 1.0203041 | 1.0050378 | 4 |

| 0.00 | 1.0000000 | 1.0000000 | 2 |

| 0.01 | 0.9802960 | 0.9950372 | 4 |

| 0.02 | 0.9611688 | 0.9901475 | 5 |

| 0.03 | 0.9425959 | 0.9853293 | 5 |

|-----------------------------------------|

Варианты заданий

Таблица 22. Варианты заданий лабораторной работы N6

№ вар. F(x) (вид разложения в сумму см.табл.23) начальное значение A конечное значение В шаг Dx число точность вычисления EPS * Тип цикла
шагов Nx итераций Nmax
Рассмотрение метода решения - student2.ru -0.05 0.05 0.01*   - 1e-4 if
Рассмотрение метода решения - student2.ru -0.09 0.09   10*   1e-6 repeat
Рассмотрение метода решения - student2.ru 0.08 0.01*     1e-4 repeat
Рассмотрение метода решения - student2.ru   0.08 0.01*   1e-5 if
Рассмотрение метода решения - student2.ru -1   0.5 12*   1e-6 repeat
Рассмотрение метода решения - student2.ru -2 0.5   9*   1e-5 while
Рассмотрение метода решения - student2.ru -0.5   0.1*   1e-5 if
  0.08 0.01*     1e-4 repeat
Рассмотрение метода решения - student2.ru -0.2 0.1 0.01*     1e-5 while
Рассмотрение метода решения - student2.ru -0.5   0.1 10*   1e-6 if
Рассмотрение метода решения - student2.ru -0.5 0.5   21*   1e-6 repeat
Рассмотрение метода решения - student2.ru -0.1 0.2 0.03*     1e-4 while
Рассмотрение метода решения - student2.ru -0.5 0.5   21*   1e-5 if
Рассмотрение метода решения - student2.ru   0.02 11*   1e-3 repeat
Рассмотрение метода решения - student2.ru -5 1*     1e-4 while
Рассмотрение метода решения - student2.ru -0.1 -0.2   13*   1e-5 if
Рассмотрение метода решения - student2.ru 0.1 0.3 0.02*     1e-5 repeat
Рассмотрение метода решения - student2.ru 10* 1*     1e-6 while
Рассмотрение метода решения - student2.ru 0.5   11*   1e-4 if
Рассмотрение метода решения - student2.ru -0.3 0.1 0.02*     1e-5 repeat
Рассмотрение метода решения - student2.ru -3   1* 10*   1e-5 while
Рассмотрение метода решения - student2.ru -0.4   0.04 17*   1e-6 if
Рассмотрение метода решения - student2.ru -0.1 0.2 0.02*     1e-5 repeat
Рассмотрение метода решения - student2.ru 0.1 0.55 0.05*     1e-5 while
Рассмотрение метода решения - student2.ru 0.2 0.4   11*   1e-6 if
Рассмотрение метода решения - student2.ru   0.5   20* 1e-5 repeat
Рассмотрение метода решения - student2.ru 0.5   0.1   20* 1e-5 while
Рассмотрение метода решения - student2.ru   1*   25* 1e-4 if
Рассмотрение метода решения - student2.ru   0.3   15* 1e-4 repeat
Рассмотрение метода решения - student2.ru   0.4*   20* 1e-5 while
Рассмотрение метода решения - student2.ru -0.05 0.04 0.1*     1e-6 repeat

Таблица 23. Виды представления функций

Наши рекомендации