Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ.doc
Скачиваний:
6
Добавлен:
12.11.2019
Размер:
1.51 Mб
Скачать

Контрольные вопросы

  1. Рисование по пикселам в Delphi

  2. Рисование с помощью пера Pen в Delphi

  3. Компоненты Form, Image , возможности свойства Canvas

  4. Рисование графиков пером и по пикселам.

Лабораторная работа № 21. Вычисление суммы ряда

ЦЕЛЬ РАБОТЫ: Ознакомиться с методом вычисления суммы ряда с помощью рекуррентных соотношений.

ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ

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

Алгоритм вычисления суммы сходящегося ряда с помощью рекуррентных соотношений состоит в следующем:

  1. Определяется выражение, на которое следует умножить предыдущий член ряда, чтобы получить следующий член ряда. Для этого формула для общего члена ряда с номером к+1 делится на формулу для общего члена ряда с номером к;

  2. Выполняется умножение предыдущего члена ряда на найденное число;

  3. Полученное число прибавляется к уже вычисленной сумме ряда;

  4. Вычисления продолжают до тех пор, пока очередной член ряда не станет меньше некоторого числа . Например, =10-5.

ЗАДАНИЕ: Разработать приложение для вычисления суммы ряда при различных значениях аргумента x. Суммирование выполнять до тех пор, пока абсолютное значение очередного члена ряда не станет меньше 10-5.

Вычисления производить для переменной x в диапазоне от 0.5 до 0.75 с шагом 0.05.

Для проверки корректности вычислений использовать формулу .

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

Приложение для вычисления суммы ряда приведено на рисунке 21.1.

Последовательность действий по созданию приложения:

  1. Для события OnActivate формы введите следующий программный код:

procedure TForm1.FormActivate(Sender: TObject);

begin

// начальное количество строк

Stringgrid1.RowCount:=2;

// Количество столбцов

StringGrid1.ColCount:=3;

// Заголовки столбцов

StringGrid1.Cells[0,0]:=' x ';

StringGrid1.Cells[1,0]:=' Формула 1 ';

StringGrid1.Cells[2,0]:=' Формула 2 ';

end;

  1. Для события OnClick кнопки «Выполнить» введите следующий программный код:

procedure TForm1.Button1Click(Sender: TObject);

Const

E=0.00001; // Значение точности вычислений

xbeg=0.5; // Начальное значение х

xend=0.8; // Конечное значение х

h=0.05; // Шаг

Var

f1:Real; // Сумма ряда, вычисленная по формуле 1

f2:Real; // Сумма ряда, вычисленная по формуле 2

x:Real; // Переменная x

r:Real; // Очередной член ряда

t:Real; // коэффициент вычисления следующего члена ряда

k:Integer; // номер члена ряда

begin

x:=xbeg; // начальное значение х

repeat

k:=1; // номер члена ряда

r:=SQR(x)*SQR(x)/(2*3*4);// значение первого члена ряда

f1:=0;

f2:=0;

// формула для вычисления следующего члена ряда

t:= SQR(x)*SQR(x)/(4*k*(4*k-1)*(4*k-2)*(4*k-3));

// Вычисление суммы ряда при очередном значении х

While r>=E do

begin

f1:=f1+r;

r:=r*t;

k:=k+1;

end;

// Вывод результата

Stringgrid1.Cells[0,Stringgrid1.RowCount-1]:=FormatFloat('0.00',x);

Stringgrid1.Cells[1,Stringgrid1.RowCount-1]:=FormatFloat('0.0000',f1);

f2:=(exp(x)+exp(-x)+2*cos(x))/4-1;

Stringgrid1.Cells[2,Stringgrid1.RowCount-1]:=FormatFloat('0.0000',f2);

// установка следующего значения х

x:=x+h;

Stringgrid1.RowCount:=Stringgrid1.RowCount+1;

until x>xend;

end;

  1. Проверьте работу приложения

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

С помощью рекуррентных соотношений вычислите сумму ряда:

Для проверки используйте формулу 2*sin2x. При x=0.5 обе формулы должны принимать значение 0.45969.