Численный метод решения.




 

Пусть требуется приближённо вычислить значение функции, заданной в виде разложения в бесконечный ряд. Идея алгоритма вычисления суммы членов ряда состоит в следующем:

Очевидно, что вычисление значения функции нужно производить за конечное число шагов. А значит, необходим некий ограничивающий фактор, в качестве которого в нашей задаче будет выступать погрешность вычислений e (e>0). Следовательно, вычислив каждый новый член ряда ak, нам необходимо проверить, не будет ли абсолютная величина очередного члена ряда меньше, чем величина погрешности e, т.е. |ak| < e. Если это неравенство не выполнилось, то следует вычислить новый член ряда, иначе можно заканчивать вычисление и выводить результат работы на экран дисплея.

Кроме того, при вычислении очередного члена целесообразно воспользоваться рекуррентным выражением: 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 Схема алгоритма.


Программа предназначена для вычисления

таблицы значений функции,

       
 
   
 
   
 


заданной в виде разложения в ряд.

       
 
   
 
   
 


Введите границы интервала [A,B] (причем (A<B));

точность E (E>0)

       
 
   
 
   
 


и шаг изменения аргумента H (H>0)

 
 


ДА

НЕТ

НЕТ

       
   
 
 


ДА

       
 
 
   


нет


да

 
 


нет

 
 


да

нет

2.5.1 Схема алгоритма процедуры Table_begin

               
 
 
 
 
     
 
   
 

 


¦Номер¦ X ¦ f(x) ¦ Номер члена ряда ¦

           
   
 
 
   
 
 
   
 
 


2.5.2 Схема алгоритма процедуры Table_end

           
   
 
   
 
 
 
   
 
   


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

Program kkr1_2;

 

procedure Table_begin;

 

begin

writeln(' ----------------------------------------------------------------------------------');

writeln(' ¦Номер¦ X ¦ f(x) ¦ Номер члена ряда ¦');

writeln(' ----------------------------------------------------------------------------------');

end;

 

 

procedure Table_end;

begin

writeln(' ----------------------------------------------------------------------------------');

end;

 

var

K,number:integer;

A,B,H,E,X,y,f:real;

 

 

begin

Writeln ('Программа предназначена для вычисления таблицы значений функции, ');

writeln ('заданной в виде разложения в ряд.');

Writeln;

 

{------------------------------------------------------------------------}

{Ввод данных}

 

writeln('Введите границы интервала [A,B] (причем (A<B)); точность E (E>0)');

writeln('и шаг изменения аргумента H (H>0)');

writeln;

 

 

repeat

begin

writeln('Начало интервала A: '); readln(A);

writeln('Конец интервала B: '); readln(B);

if not (A<B) then writeln ('A должно быть меньше B!. Повторите ввод.');

end;

until (A<B);

 

repeat

begin

writeln('Точность E: '); readln(E);

if not (E>0) then writeln ('E должно быть больше 0!. Повторите ввод.');

end;

until (E>0);

 

repeat

begin

writeln('Шаг H: ');readln(H);

if not (H>0) then writeln ('H должно быть больше 0!. Повторите ввод.');

end;

until (H>0);

 

{------------------------------------------------------------------------}

writeln('Вы ввели: ');

writeln('A=',A:1:5, ' B=',B:1:5,' H=',H:1:5,' E=',E:1:5);

writeln;

 

 

{------------------------------------------------------------------------}

X:=A;

number:=0;

 

Table_begin;

 

repeat

k:=0;

y:=(cos(2*x))/3;

f:=0;

inc(number);

 

repeat

inc(k);

y:=y*cos(2*(k+1)*x)*(2*k-1)/((2*k+3)*cos(2*k*x));

f:=f+y;

until (abs(y)<E);

 

if (number mod 18)=0 then

begin

Table_end;

Table_begin;

end;

 

writeln(' ¦',number:5,'¦', X:20:13,' ¦ ',(4/Pi)*(0.5-f):16:13, ' ¦ ',k:7,' ¦');

X:=X+H;

until not (X<B);

 

Table_end;

end.

2.7 Инструкция пользователю.

 

После запуска программы, она сообщит, что предназначена для составления таблицы значений функции на определенном интервале и попросит ввести значения, необходимые для составления таблицы. К таким значениям относятся начало и конец интервала, шаг изменения аргумента, точность вычислений. Не стоит вводить слишком больших значений (либо слишком маленькую точность), так как тогда время работы программы сильно увеличится.

Чтобы правильно составить требуемую таблицу, программе необходимы значения, которые пользователь введет в программу. Вводить значения надо после приглашения программы к соответствующему действию. Важный момент – если таблица полностью не поместиться на экран, то после заполнения последней строки, помещающейся на данном экране, программа попросит нажать любую клавишу и продолжить составление таблицы на чистом экране, т.е. предварительно очистив предыдущую таблицу.

2.8. Тестовый пример.

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

заданной в виде разложения в ряд.

 

Введите границы интервала [A,B] (причем (A<B)); точность E (E>0)

и шаг изменения аргумента H (H>0):

 

Начало интервала A:

0.5

Конец интервала B:

7.6

Точность E:

.001

Шаг H:

Вы ввели:

A=0.50000 B=7.60000 H=1.00000 E=0.00100

 

------------------------------------------------------------------------------------------

¦Номер¦ X ¦ f(x) ¦ Номер члена ряда ¦

------------------------------------------------------------------------------------------

¦ 1 ¦ 0.50000000000 ¦ 0.70477448832 ¦ 7 ¦

¦ 2 ¦ 1.50000000000 ¦ 0.57770993869 ¦ 8 ¦

¦ 3 ¦ 2.50000000000 ¦ 0.71713212380 ¦ 10 ¦

¦ 4 ¦ 3.50000000000 ¦ 0.66752823117 ¦ 10 ¦

¦ 5 ¦ 4.50000000000 ¦ 0.59106729937 ¦ 10 ¦

¦ 6 ¦ 5.50000000000 ¦ 0.72198206866 ¦ 2 ¦

¦ 7 ¦ 6.50000000000 ¦ 0.60541986599 ¦ 9 ¦

¦ 8 ¦ 7.50000000000 ¦ 0.61517755154 ¦ 10 ¦

------------------------------------------------------------------------------------------


3.Работа с матрицами

Вариант задания и постановка задачи.

 

Задание (вариант №15):

Вычислить сумму элементов матрицы В(К,К), К £ 50, расположенных над двумя диагоналями и под ними:

 

       
 
 
   
*

 


3.2 Математическая формулировка задачи.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-07-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: