p align="left">Так как рассматриваемая в данной задаче функция не представляет особой сложности, то в предложенном далее алгоритме решения задачи начальное значение числа n будет взято равным единице. 1.4 Описание переменных. |
Имя переменной | Тип переменной | Значение | | N | integer | Число интервалов разбиения | | A | real | Нижний предел интегрирования | | B | real | Верхний предел интегрирования | | С | real | Параметр функции, определяемый пользователем | | H | real | Шаг интегрирования | | E | real | Точность вычислений | | X | real | Аргумент функции | | integral1 | real | Значение интеграла при n разбиений | | integral2 | real | Значение интеграла при 2n разбиений | | |
1.5 Схема алгоритма. 1.6 Текст программы. PROGRAM KKP2_1_DUB3; USES CRT; var A, B, C, E, ABS_Integral:real; PROCEDURE ENTER_DATA(VAR PR_1, PR_2, P_PAR,POGR_PRO:REAL); BEGIN ClrScr; Writeln ('Программа для нахождения значения интеграла на определенном промежутке'); Writeln; writeln('Введите границы интервала [A,B],причем (A<B),число C (0<C<1) и точность E (E>0): '); writeln; REPEAT BEGIN writeln('Число C: '); readln(P_PAR); if not (P_PAR>0) then writeln ('C должно быть больше 0 !. Повторите ввод.') ELSE IF NOT (P_PAR<1) THEN WRITELN('C должно быть меньше 1!. Повторите ввод.'); END; UNTIL ((P_PAR>0) AND (P_PAR<1)); REPEAT BEGIN writeln('Начало интервала A: '); readln(PR_1); writeln('Конец интервала B: '); readln(PR_2); if not (PR_1<PR_2) then writeln ('A должно быть меньше B !. Повторите ввод.'); END; UNTIL (PR_1<PR_2); REPEAT BEGIN writeln('Точность E: '); readln(POGR_PRO); if not (POGR_PRO>0) then writeln ('E должно быть больше 0 !. Повторите ввод.'); END; UNTIL (POGR_PRO>0); END; FUNCTION integration(VAR GR_1,GR_2,F_PAR,POGR_FUNC:REAL):real; VAR INTEGRAL1, INTEGRAL2, X, H:REAL; N:INTEGER; READY:BOOLEAN; begin integral1:=0; integral2:=0; n:=1; REPEAT N:=N*2; H:=(GR_2-GR_1)/N; X:=GR_1; Integral2:=0; repeat if x<=(-F_PAR) then integral2:=integral2+((1/sqr(3))*(ln(F_PAR)-F_PAR)) ELSE IF((-F_PAR<x) and (x<=F_PAR)) THEN integral2:=integral2+ln(F_PAR) ELSE if (X>F_PAR) THEN Integral2:=integral2+LN(X)/LN(10); X:=X+H; until not (X<=B); READY:=abs(integral1-integral2)<POGR_FUNC; INTEGRAL1:=INTEGRAL2; UNTIL READY; INTEGRATION:=INTEGRAL2; END; BEGIN ENTER_DATA(A,B,C,E); ABS_Integral:=INTEGRATION(A,B,C,E); Writeln; Writeln( 'Ответ: '); writeln('Интеграл на промежутке от ',A:0:2,' до ',B:0:2,' равен '); writeln (ABS_Integral:1:3,' с точностью ',E:1:3); ReadKey; END. 1.7 Инструкция пользователю. Данная программа вычисляет значение интеграла функции заданной графически. Интервал интегрирования, точность вычислений и параметр функции вводятся пользователем. Программа вычислит результат и выдаст его (в числовом виде) на экран монитора. После запуска программы на экране появится описание программы. В ответ на приглашение к вводу значений следует ввести требуемые величины. Программа не претендует на универсальность, поэтому не стоит вводить запредельные границы интервала или очень маленькую ( ~0.001) точность вычислений. Поскольку скорость выполнения этой программы напрямую зависит от частоты процессора, то на процессорах, различающихся значительно, время вычислений (и допустимая точность) будут разными. В общем случае это определяется опытным путем. Если все величины заданы корректно и вычисления не прерывались, то через некоторое время, зависящее от тактовой частоты процессора, программа подсчитает значение интеграла и выдаст его на экран. В случае если требуется повторное вычисление значения, следует заново запустить программу. 1.8. Тестовый пример. Программа для нахождения значения интеграла на определенном промежутке Введите границы интервала [A,B], причем (A<B), число C (0<C<1), число D (D<0) и точность E (E>0): Число C: 0.9 Число D: -0.1 Начало интервала A: 5 Конец интервала B: 10 Точность E: 1 Ответ: Интеграл на промежутке от A до B равен 2.574 с точностью 1.000 Программа для нахождения значения интеграла на определенном промежутке Введите границы интервала [A,B], причем (A<B), число C (0<C<1), число D (D<0) и точность E (E>0): Число C: 0.9 Число D: -0.1 Начало интервала A: -0.9 Конец интервала B: 0.9 Точность E: 1 Ответ: Интеграл на промежутке от A до B равен -0.300 с точностью 1.000 2. Составление таблицы значений функции, заданной в виде разложения в ряд 2.1 Вариант задания и постановка задачи.Задание (вариант №15):Разработать алгоритм и составить программу вычисления таблицы значений функции, заданной в виде разложения в ряд. Значение функции вычислять с точностью >0, т.е. вычисление суммы членов ряда необходимо прекратить, когда абсолютная величина очередного члена ряда разложения окажется меньше : ак <.При вычислении очередного члена целесообразно воспользоваться рекурентным выражением:ак+1=скак; к= 0, 1, 2, ...,где ак - некоторый к-ый член ряда; ак+1 - следующий к+1-ый член ряда; ск - коэффициент, определяемый номером к.При составлении программы необходимо по возможности воспользоваться операторами организации циклов WHILE, REPEAT, FOR.Границы интервала вычислений функций a и b, величина шага изменения аргумента h и точность вычисления функции задаются при вводе. На печать выводятся номер по порядку, значение аргумента, соответствующие ему, значение функции и номер члена ряда, на котором закончилось вычисление значение функции, в форме таблицы:Функция: 2.2 Математическая формулировка задачи. Некоторые функции нельзя представить в виде конечной формулы, но вычисление значений таких функций часто бывает необходимо для различного рода расчетов. Такие функции могут быть заданы в виде разложения в бесконечный ряд, где при бесконечном увеличении членов ряда каждый последующий член меньше предыдущего. Каждый член ряда - это конкретное значение функции. Нахождение таких членов и дает возможность вычислить значение функции. И чем больше членов ряда рассмотреть, тем более точным получится значение функции. 2.3 Численный метод решения.Пусть требуется приближённо вычислить значение функции, заданной в виде разложения в бесконечный ряд. Идея алгоритма вычисления суммы членов ряда состоит в следующем: Очевидно, что вычисление значения функции нужно производить за конечное число шагов. А значит, необходим некий ограничивающий фактор, в качестве которого в нашей задаче будет выступать погрешность вычислений (>0). Следовательно, вычислив каждый новый член ряда ak, нам необходимо проверить, не будет ли абсолютная величина очередного члена ряда меньше, чем величина погрешности , т.е. |ak| < . Если это неравенство не выполнилось, то следует вычислить новый член ряда, иначе можно заканчивать вычисление и выводить результат работы на экран дисплея. Кроме того, при вычислении очередного члена целесообразно воспользоваться рекуррентным выражением: ak+1 = ck * ak; k = 0, 1, 2, …, где ak - некоторый k-ый член ряда; ak+1 - следующий k+1-ый член ряда; ck - коэффициент, определяемый номером k. В данном случае нахождение коэффициента ck можно произвести следующим образом: ak=; ak+1=; ck = Следовательно, зная значение предыдущего члена ряда, порядковый номер следующего и используя полученную формулу, мы значительно упрощаем нахождение нового члена нашего ряда: ak+1 =ak*; k = 0, 1, 2, … 2.4 Описание переменных. |
Имя переменной | Тип переменной | Значение | | K | integer | Номер члена ряда | | number | integer | Порядковый номер | | A | real | Начало интервала | | B | real | Конец интервала | | H | | Шаг интервала | | E | | Точность | | X | | Текущее значение аргумента | | у | | Значение члена ряда | | f | | Значение функции для текущего аргумента | | |
2.5 Схема алгоритма.
Программа предназначена для вычисления таблицы значений функции,
заданной в виде разложения в ряд.
Страницы: 1, 2, 3
|