Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МВ_ЛР_ЧМІ_2009.doc
Скачиваний:
30
Добавлен:
17.11.2019
Размер:
2.01 Mб
Скачать

5.2 Задание к работе

  1. Функция f(x) определена на отрезке [1;1.2]. Выбрав шаг h=0,01, по формулам (17) и (19) найти приближенные значения производных и в точках 1,05 и 1,13; оценить погрешность вычислений.

Таблица 1

x

Вариант

1

2

3

4

5

6

7

8

1,00

2,85765

2,71828

0,36788

1,17520

1,54308

0,84147

0,54030

1,55741

1,02

2,91538

2,77319

0,36059

1,20630

1,56689

0,85211

0,52337

1,62813

1,04

2,97427

2,82922

0,35345

1,23788

1,59134

0,86240

0,50622

1,70361

1,06

3,03436

2,88637

0,34646

1,26996

1,61641

0,87236

0,48887

1,78442

1,08

3,09566

2,94468

0,33960

1,30254

1,64214

0,88196

0,47133

1,87122

1,10

3,15819

3,00417

0,33287

1,33565

1,66852

0,89121

0,45360

1,96476

1,12

3,22199

3,06485

0,32628

1,36929

1,69557

0,90010

0,43568

2,06596

1,14

3,28708

3,12677

0,31982

1,40347

1,72329

0,90863

0,41759

2,17588

1,16

3,35348

3,18993

0,31349

1,43822

1,75171

0,91680

0,39934

2,29580

1,18

3,42123

3,25437

0,30728

1,47355

1,78083

0,92461

0,38092

2,42727

1,20

3,49034

3,32012

0,30119

1,50946

1,81066

0,93204

0,36236

2,57215

Продолжение таблицы 1

x

Вариант

9

10

11

12

13

14

15

16

1,00

0,52500

0,76159

0,37600

1,04720

0,84147

0,70711

0,54630

3,62686

1,02

0,54480

0,76987

0,38460

1,03561

0,85211

0,72111

0,55936

3,78029

1,04

0,56422

0,77789

0,39303

1,02395

0,86240

0,73485

0,57256

3,93977

1,06

0,58327

0,78566

0,40131

1,01220

0,87236

0,74833

0,58592

4,10555

1,08

0,60196

0,79320

0,40942

1,00036

0,88196

0,76158

0,59943

4,27791

1,10

0,62031

0,80050

0,41739

0,98843

0,89121

0,77460

0,61311

4,45711

1,12

0,63833

0,80757

0,42522

0,97641

0,90010

0,78740

0,62695

4,64344

1,14

0,65603

0,81441

0,43290

0,96429

0,90863

0,80000

0,64097

4,83720

1,16

0,67342

0,82104

0,44046

0,95207

0,91680

0,81240

0,65517

5,03870

1,18

0,69051

0,82745

0,44788

0,93974

0,92461

0,82462

0,66956

5,24827

1,20

0,70732

0,83365

0,45518

0,92730

0,93204

0,83666

0,68414

5,46623

Приложение

/***************************************************************************

*Вычисление производной функции по ее определению на примере функции у = sinx *

****************************************************************************/

#include <stdio>

#include <conio.h>

#include <cmath>

#define A 10

float derivf(float, float);

void main()

{

float deltax,den,der2,e,e1,x;

clrscr();

printf ("Введите значение х и точность epsilon\n");

scanf ("%f%f",&x,&e);

deltax = 0.1; der1 = derivf(x,deltax);

do

{

deltax = deltax / A;

der2 = derivf(x, deltax);

el = fabs(der1 - der2);

der1 = der2;

}

while (el >= e);

printf ("\n\nx = %f производная f'= %f",x,der2);

printf ("\nПогрешность приближения = %f\n",e1);

printf("\nНажмите любую клавишу для продолжения...");

getch();

}

//функция

float derivf(float x, float y)

{

float z;

z = (sin(x+y) - sin(x))/y;

return z;

}

/*****************************************************************************

* Вычисление производных первого и второго порядков с одинаковой погрешностью *

* в зависимости от шага по формулам численного дифференцирования *

*****************************************************************************/

#include <stdio>

#include <conio.h>

#include <cmath>

#define P 15

void main ()

{

int i,n;

double a,b,h,h1,h2,x,y1,y2,y[P+1];

clrscr();

printf ("Введите n - число разбиений отрезка [a,b]\n");

scanf ("%i",&n);

if ((n >= 3) && (n <= 15))

{

printf ("Введите координаты концов отрезка а, b\n");

scanf ("%lf%lf",&a, &b);

printf ("Введите значения функции y(i) в узлах,");

printf (" причем у(0) = f(a), y(n) =f(b)\n");

for (i = 0; i <= n; scanf (”%lf”, &y[i]), i++);

printf ("Введите значение x\n”);

scanf ("%lf”, &х);

h = (b - a) / n;

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

h1 = 2*h;

h2 = h*h;

if (i == 0)

{

y1 = (-3 * у [0] + 4 * y[1] – y[2])/h1;

y2 = (2 * y[0] - 5 * y[1] + 4 * y[2] – y[3]) / h2;

};

if ((i > 0) && (i < n))

{

y1 = (-y[i – 1] + y[i + 1]) / h1;

y2 = (y[i - 1] - 2 * y[i] + y[i + 1]) / h2;

};

if (i == n)

{

y1 = (y[n - 2] - 4 * y[n - 1] + 3 * y[n]) / h1;

y2 = (-y[n-3] + 4 * y[n-2] - 5 * y[n-1] + 2 * y[n]) / h2;

};

printf ("x = %f произв1 = %f",x,y1);

printf (" произв2 = %f",y2);

};

printf("\nНажмите любую клавишу для продолжения...");

getch();

}

Пусть отрезок [a,b] разбит на п равных частей с шагом и в точках некоторая функция принимает значения . Для переменной х, принадлежащей отрезку [a,b] , требуется вычислить значения первой и второй производной, имеющих порядок аппроксимации в зависимости от шага. Полагаем, что значения производных у' и у" в точках х, близких к точкам х , равны соответствующим значениям и Будем считать точку х близкой к если она принадлежит промежутку Точки х, близкие к , имеет одно и то же значение параметра i- целая часть .

В зависимости от i при имеем три типа формул (19)-(21). Так при i=1:

при

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

1

1,01

1,02

1,03

2,718150

2,745650

2,773250

2,800950

2,730000

2,750000

2,770000

2,790000

2,718282

2,745601

2,773195

2,801066

из которой, в частности, следует, что при вводе данных и четырех значений функции ех с шестью верными знаками после запятой в результате вычислений сохраняется пять знаков после запятой для первой производной и два знака - для второй производной. Если, например, ввести значения функции с четырьмя знаками после запятой, то получим для значение 2,715000, а для - 3,000000.