Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУМКД_ДиВМ3.doc
Скачиваний:
76
Добавлен:
03.05.2019
Размер:
4.9 Mб
Скачать

Контрольная работа № 2 Общие сведения

Цель работы: изучение численного дифференцирования и интегрирования.

Порядок выполнения работы

  1. Изучить темы 7 лекционного материала.

  2. Аналитически (вручную) вычислить значения первой и второй производной функции в точке .

  3. Аналитически (вручную) вычислить значение определенного интеграла от функции на интервале [a,b].

  4. Написать программу для нахождения значения первой и второй производной функции в точке c помощью сплайнов;

  5. Написать программу для вычисления приближенного значение определенного интеграла от функции на интервале [a,b] с заданной точностью методами Симпсона или квадратурной формулой Гаусса.

  6. Сверить рассчитанные вручную значения с результатами вычислений программы.

Метод Симпсона

Входные параметры: a,b – интервал интегрирования; h – шаг интегрирования; fun – вид функции.

Выходные параметры: d – погрешность интегрирования; res – значение интеграла функции.

Схема алгоритма показана на рисунке 3.

Пример. Вычислить приближенное значение определенного интеграла с точностью 0,01

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

procedure Simpson(fun:string;a,b,h:real;var res,d:real);

var f0,f1,s,s1,s2,h,x1,x2:real;

n:integer;

begin

form3.Memo1.Lines.Add('');

f0:=Execute(fun,a);

f1:=Execute(fun,b);

s:=f0-f1;

s1:=(b-a)*(f0+f1+4*Execute(fun,(a+b)/2))/6;

n:=2;

repeat

h:=(b-a)/n; x1:=a+h/2; x2:=a+h; s2:=s;

for i:=1 to n do

begin

s2:=s2+4*Execute(fun,x1)+2*Execute(fun,x2);

x1:=x1+h; x2:=x2+h;

end;

s2:=s2*h/6; d:=abs(s1-s2)/15; s1:=s2; n:=n*2;

until d<h;

res:=s1;

end;

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

Результат: - 0.4864297

Погрешность вычисления:0,005

Рисунок 3 - Схема алгоритма метода Симпсона

Варианты заданий для решения задач численного интегрирования и дифференцирования приведены в таблице 2.

Квадратурная формула Гаусса

Входные параметры: a,b – интервал интегрирования; fun – вид функции.

Выходные параметры: d – погрешность интегрирования; res – значение интеграла функции.

Схема алгоритма показана на рисунке 4.

Пример. Вычислить приближенное значение определенного интеграла с точностью 0,01

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

Procedure Kvadratur(fun:string;a,b:real;var res,d:real);

var c,h,h1,c1,x1,x2,x3,f1,f3,s1,s2:real;

n:integer;

begin

c:=sqrt(3/5);

h1:=(b-a)/2;

c1:=c*h1;

x2:=(b+a)/2;

f1:=Execute(fun,x2-c1);

f3:=Execute(fun,x2+c1);

s1:=h1*(5*f1+8*Execute(fun,x2)+5*f3)/9;

n:=2;

repeat

h:=(b-a)/n; h1:=h/2; c1:=c*h1;

x2:=a+h1; x1:=x2-c1; x3:=x2+c1; s2:=0;

for i:=1 to n do

begin

s2:=s2+5*Execute(fun,x1)+8*Execute(fun,x2)+5*Execute(fun,x3);

x1:=x1+h; x2:=x2+h; x3:=x3+h;

end;

s2:=s2*h1/9; d:=abs(s1-s2)/63; s1:=s2; n:=2*n;

until d<h;

res:=s2;

end;

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

Результат: - 0.4863854

Погрешность вычисления:0,007

Рисунок 4 - Схема алгоритма квадратурной формулы Гаусса

Варианты заданий для решения задач численного интегрирования и дифференцирования приведены в таблице 2.

Дифференцирование с помощью сплайнов

Входные параметры: a,b – интервал дифференцирования; x – точка дифференцирования; n – число точек дифференцирования; fun – вид функции.

Выходные параметры: y_1,y_2 – значения первой и второй производной в точке x соответственно.

Схема алгоритма показана на рисунке 5.

Пример. Продифференцировать функцию , количество точек разбиения 5, значение точки х=1.

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

procedure Spl_Integr(fun:string;a,b,x:real;n:integer;var y_1,y_2:real);

var h,h1,h2,aa:real;

y:array of real;

begin

h:=(b-a)/n;

SetLength(y,n-1);

aa:=a;

for i:=0 to length(y)-1 do

begin

y[i]:=execute(fun,aa); form3.Memo1.Lines.Add(floattostr(y[i]));

aa:=aa+h;

end;

i:=trunc((x-a)/h+h/2);

h1:=2*h; h2:=h*h; if i=0 then

begin

y_1:=(-3*y[0]+4*y[1]-y[2])/h1; y_2:=(2*y[0]-5*y[1]+4*y[2]-y[3])/h2;

end;

if (i>0)and(i<n) then begin

y_1:=(-y[i-1]+y[i+1])/h1; y_2:=(y[i-1]-2*y[i]+y[i+1])/h2; end;

if i=n then

begin

y_1:=(y[n-2]-4*y[n-1]+3*y[n])/h1; y_2:=(-y[n-3]+4*y[n-2]-5*y[n-1]+2*y[n])/h2;

end;

end;

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

Первая производная:3,808

Вторая производная:10,00

Рисунок 5 - Схема алгоритма дифференцирования с помощью сплайнов

Варианты заданий приведены в таблице 2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]