Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная...

38
Лекция 3 Вычислительная физика

Upload: others

Post on 27-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

Лекция 3

Вычислительная физика

Page 2: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

Машинная арифметика и язык Си

Вычислительная физика

Линейная аппроксимация данных

измерений

Численное дифференцирование

Численное решение уравнений вида

f(x)=0

14.11.2019

План лекции

Page 3: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 3

Машинная арифметика

Память ЭВМ - последовательность ячеек, в которых

могут находиться нули или единицы (биты):

01011101 10100010 01011101 10100010

байт - на многих машинах это

минимальная единица информации,

которая может быть адресована

Максимальное целое число, представимое одним

байтом?

Двоичная система 010111012= 1·20 +0·21 +

1·22 +1·23 +1·24 + 0·25 + 1·26 + 0·27 = 9310

Максимальное число, представимое одним байтом =

11111111 = 28-1 = 25510.

Диапазон неотрицательных чисел 0 ÷ 255.

Целое со знаком. Знак кодируется старшим битом.

Отрицательное число хранится в двоично-дополнительном виде: пример -2:

210 = 0000 00102 -> инвертируем: 1111 1101 -> +1 : 1111 1110.

Диапазон целых чисел: -128 ÷ 127.

Нумерация разрядов

01011101

76543210

Page 4: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 4

Целочисленные типы данных в Си

В одном и том же байте может содержаться разная информация в

зависимости от способа представления данных (целые, целые без знака).

char - целое, 1 байт (-128, 127)

void main()

{

char c;

c = 130;

printf ("\n%d", c);

}

unsigned char – целое без знака, 1

байт (0 , 255)

void main()

{

unsigned char c;

c = 130;

printf ("\n%d", c);

}

130-126

Page 5: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 5

Целочисленные типы данных в Си

char unsigned char

int unsigned int, unsigned

short int unsigned short int

long int unsigned long int

sizeof (short) <= sizeof (int) <= sizeof (long)

Visual C++short – 2 байта (диапазон -215 ÷ 215-1) unsigned short (диапазон 0 ÷ 216-1 ≡ 65 53510 )

int – 4 байта (диапазон -231 ÷ 231-1) unsigned int (диапазон 0 ÷ 232-1 ≡ 4 294 967 29510 )

long – 4 байта≡ 6553510

Page 6: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 Компьютерная физика: Лекция 3 6

Целочисленные типы данных в Си

unsigned int - целое, 4 байта (0, 4 294 967 295)

void main()

{

unsigned uc = 4294967294;

printf ("\n %u", ++uc);

printf ("\n %u", ++uc);

}

4 294 967 295

0

Page 7: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

Вещественные числа

Эффективное распределение разрядов при хранении чисел с

плавающей точкой: больше динамический диапазон

Для хранения больших (1 000 000.0) и маленьких (0.000001)

чисел в формате с фиксированной точкой потребуется 13

разрядов: 0 000 000 . 000 000

С плавающей точкой: 1.E+6 1.E-6 нужно меньше разрядов.

Наряду с целыми числами необходимо хранить и вещественные числа,

которые имеют дробную часть: 0. 0103 или 1.0310 -2 или 10.310 -3

Page 8: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 Компьютерная физика: Лекция 3 8

Вещественные числа

Cтандарт IEEE 754 для представления чисел с одинарной точностью (float) и с двойной точностью (double).

S – знак, Е – смещенный порядок, m – нормализованная мантисса (1 <= m < 2).

Смещение = 127 (float) и 1023 (double)

float – 4 байта

double

– 8 байт

Формат с плавающей точкой: F = m ·10E , 1 <= m < 10;

m – мантисса, E – порядок 0 <= m < 1

Page 9: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 9

Формула вычисления десятичных чисел из

чисел представленных в стандарте IEEE754

float

MES

MES

double

Page 10: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 10

Пример: 155.625

155.625 = 128 + 0 + 0 + 16 + 8 + 0 + 2 + 1 + 0.5 + 0 + 0.125

155.625 = 127 +0 26+0 25+1 24+1 23+0 2 2+ 1 21+1 20+1 2-1+0 2-2+1 2-3

155.62510 = 10011011.1012 – число с фиксированной точкой

1.55625e+2 = 1.0011011101e+111- число с плавающей точкой в нормализованном виде

В результате в двоичном коде: M=1.0011011101 (мантисса)

E = +1112 или +710

Преобразование десятичного числа

в двоичное с плавающей точкой

0 10000110 0011011 10100000 00000000

+ 13410 мантисса (без единицы)

float:

(7 + 127)

Page 11: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.201911

Ненормализованные числа

MES

Наименьшее нормализованное число (E=0, M=0): 2-127 = 5,9*10-39

Ограничение нормализованных чисел (E=1, M=0): 2-126 = 1,17*10-38

Если E=0 – денормализованное число

Формула для

денормализованных чиселF=(-1)S 2(E-126) M/223

Наименьшее денормализованное число > 0 (E=0, M=1):

2-(126+23) = 2-(149) = 1,4*10-45

Page 12: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 12

Минимальное денормализованное число (абсолютное)

00 00 00 0116 = 2-126 2-23= 2-149 = 1,40129846e-45

80 00 00 0116 = - 2-126 2-23 = 2-149 = - 1,40129846e-45

Это число граничит с нулем.

Максимальное нормализированное число (абсолютное)

7F 7F FF FF16 = 2127(2-2-23) = 3,40282347e+38

FF 7F FF FF16 = -2127 (2-2-23)= - 3,40282347e+38

Границы диапазонов чисел float

Page 13: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 13

Интерпретация целых чисел длиной

32 бит (4 байта) по стандарту IEEE754

F16 F16

1111 1111

Page 14: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 14

Объединения (union) в Си

void main()

{

union {unsigned a; float b;} un;

un.a =0x00000001;

printf("\n %u %e", un.a, un.b);

}

1 1.401298e-045

unsigned a;

float b;

00000000 00000000 00000000 00000000

00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000

Page 15: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 15

Машинное эпсилон

void main(){

double eps = 1.0;

while (1. + eps != 1.) eps /= 10. ;

printf ("\n %e", eps);

}

1.000000e-016

Наименьшее положительное число ε:

1 + ε ≠ 1

while (условие) оператор;

eps /= 10.; ↔ eps = eps/10.;

eps += 10.; ↔ eps = eps + 10.;Си

≠ !=

= ==eps = eps/10.;

Page 16: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 16

Машинное эпсилон (относительная точность)

void main(){

double eps = 1.0;

while (0.001 + eps != 0.001) eps /= 10. ;

printf ("\n %e", eps);

}

1.000000e-019

Абсолютная точность увеличилась

Page 17: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 17

Суммирование неоднородных слагаемых

void main()

{

double a1 = 1.0;

double a2 = 1.e-16, a3 = 1.e-16;

double sum;

sum = a1 + a2;

sum += a3;

printf ("\n %20.16f", sum);

}

1.0000000000000000

void main()

{

double a1 = 1.0;

double a2 = 1.e-16, a3 = 1.e-16;

double sum;

sum = a2 + a3;

sum += a1;

printf ("\n %20.16f", sum);

}

1.0000000000000002

Page 18: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 18

Опасность одинарной точности

void main()

{

float c = 1.e-45;

printf ("\n%e", c);

}

void main()

{

double c = 1.e-45;

printf ("\n%e", c);

}

1.000000e-451.401298e-45

min = ± 4,94065646e-324 min = ±1,40129846e-45

max = ± 3,40282347e+38 max = ± 1,79769313e+308

Page 19: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 19

Опасность одинарной точности

void main()

{

float c = 1.e-45;

c = c / 1.e-45;

printf ("\n%e", c);

}

void main()

{

double c = 1.e-45;

c = c / 1.e-45;

printf ("\n%e", c);

}

1.000000e+0001.401299e+000

“…с тех пор, как я подробнее узнал о принятых способах выполнения

машинных вычислений, очень опасаюсь ходить по мостам и оказываться

внутри других сложных инженерных сооружений".

проф. П. Скалички

Page 20: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 20

Линейная аппроксимацияданных измерений

1.5 1.0 0.5 0.5 1.0 1.5x

1.0

0.5

0.5

1.0

y

xi

yi

y = a*x +b

εi

Отклонение εi = a*xi + b - yi

Page 21: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 21

Метод наименьших квадратов

Отклонение εi = a*xi + b - yi

N

i

i min2

N

i

ii ybaxbaf min)(),( 2

N

i

iib

f

N

i

iiia

f

ybax

xybax

0)(2

0)(2

Page 22: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 22

Коэффициенты линейной регрессии

N

i

N

i

ii

N

i

i

N

i

i

N

i

ii

yNbxa

yxxbxa

0

02

N

i

ii

N

i

i

N

i

i

N

i

i

СyxBy

AxAx

1

2

2

1

Введем обозначения

Page 23: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 23

Система двух алгебраических уравнений относительно коэффициентов a и b

11

12

BNbaA

CbAaA

2

12

112

2

12

11

ANA

CABAb

ANA

BACNa

Ее решение

11

12

B

C

b

a

NA

AA

Page 24: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 24

Линейная аппроксимацияданных измерений

1.5 1.0 0.5 0.5 1.0 1.5x

1.0

0.5

0.5

1.0

y

y = a*x +b

-1.5 -1.0 -0.5

Page 25: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 25

Численное дифференцирование

f(x)Определения

xxn xn+1xn-1

xn – узел, n=0,1,2 … N-1

{xn} – расчетная сетка

∆xn = xn+1-xn - шаг сетки

f(xn)fn – сеточная функция

x

ff

x

ff

xdx

df nnnn

n

11

Первая производная

x

xfxxf

xdx

df nn

xn

)()(lim

0

Центральная разность

x

ff

xdx

df nn

n

2

11

Page 26: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

Центральная разностьЛевая разность

14.11.2019 26

Численная схема для первой производной

x

ff

xdx

df nn

n

1

x

ff

xdx

df nn

n

2

11

Пусть f(х) = ex тогда f’(x)= ex

Пусть x = x0 = 1 тогда f(1)=f’(1)= e1 = 2.718281828

0.2 0.4 0.6 0.8 1.0 1.2 1.4

1.5

2.0

2.5

3.0

3.5

4.0

4.5

Page 27: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 27

Источники погрешности

• Погрешность математической модели

• Погрешность в исходных данных

• Погрешность численного метода

• Погрешность округления

Абсолютная погрешность приближенного значения α:

D(α) = │α - α * │

Относительная погрешность

δ(α) = │α - α * │/ │α * │

Виды погрешности

Page 28: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 28

Погрешность метода и ошибка округления

Левая разность

x

ff

xdx

df nn

n

1

Точное значение: f(1)=f’(1)= e1 = 2.718281828459045…

x0 =1.;

teor = exp(x0);

dx = 0.01;

printf ("\n Teor= %g", teor);

for (i = 1; i < 10; i++)

{

dx /= 10.;

dif = (exp(x0)-exp(x0-dx) )/dx;

Err = fabs((dif-teor)/teor);

printf ("\n dx = %.0e, Err= %.1e", dx, Err);

}

заголовок тело

for (начало; условие;конец) оператор;

Teor= 2.71828

dx = 1e-003, Err= 5.0e-004

dx = 1e-004, Err= 5.0e-005

dx = 1e-005, Err= 5.0e-006

dx = 1e-006, Err= 5.0e-007

dx = 1e-007, Err= 5.1e-008

dx = 1e-008, Err= 2.4e-009

dx = 1e-009, Err= 8.4e-008

dx = 1e-010, Err= 1.1e-006

dx = 1e-011, Err= 4.3e-006

Page 29: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 29

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

x0 =1.;

teor = exp(x0);

dx = 0.01;

printf ("\n Teor= %g", teor);

for (i = 1; i < 10; i++)

{

dx /= 10.;

dif = (exp(x0)-exp(x0-dx) )/dx;

difс = (exp(x0+dx)-exp(x0-dx) )/(2.*dx);

Err = fabs((dif-teor)/teor);

Errс= fabs((difс-teor)/teor);

printf ("\n dx = %.0e, Err= %.1e, Errс=

%.1e ", dx, Err, Errc);

}

Левая разность

x

ff

xdx

df nn

n

1

Центральная разность

x

ff

xdx

df nn

n

2

11

Page 30: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 30

Погрешность метода и ошибка округления: левая и центральная разности

for (i = 1; i < 10; i++)

{

dx /= 10.;

dif = (exp(x0)-exp(x0-dx) )/dx;

difс = (exp(x0+dx)-exp(x0-dx) )/(2.*dx);

Err = fabs((dif-teor)/teor);

Errс= fabs((difс-teor)/teor);

printf ("\n dx = %.0e, Err= %.1e, Errс=%.1e ", dx, Err, Errc);

}dx = 1e-003, Err= 5.0e-004, ErrC= 1.7e-007

dx = 1e-004, Err= 5.0e-005, ErrC= 1.7e-009

dx = 1e-005, Err= 5.0e-006, ErrC= 2.2e-011

dx = 1e-006, Err= 5.0e-007, ErrC= 2.2e-011

dx = 1e-007, Err= 5.1e-008, ErrC= 8.0e-010

dx = 1e-008, Err= 2.4e-009, ErrC= 2.4e-009

dx = 1e-009, Err= 8.4e-008, ErrC= 2.4e-009

dx = 1e-010, Err= 1.1e-006, ErrC= 2.5e-007

dx = 1e-011, Err= 4.3e-006, ErrC= 4.3e-006

Page 31: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 31

Численное дифференцирование: вторая производная

x

ff

xdx

df nn

n

1

Первая производная

(левая разность)

x

xfxxf

xdx

df

dx

d

xdx

fd nn

xnn

)()(lim

02

2

Симметричная схема

x

ff

xdx

fd nn

n

1

Производная производной

(правая разность)

Page 32: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

x

ffразностьлеваяf

x

ffразностьлеваяf

nnn

nnn

1

11

)(

)(

14.11.2019 32

Вторая производная: центральная разность

x

ff

xdx

fd

xdx

fd nn

nn

1

2

2

2

11

11

2

x

fff

x

x

ff

x

ff

nnn

nnnn

Page 33: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 33

Численное решение уравнений вида f(x)=0(поиск корней нелинейных уравнений)

a

acbbx

сbxax

2

4

0

2

2,1

2

0)(2

2

2

2

x

x

exxf

ex

2xy

2xey

)(xf

Page 34: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 34

Метод деления отрезка пополам

1. XL, XR: f(XL)*f(XR) < 0

Пусть f(XL) < 0

)(xf

XR

XL

2. XC =(XL+XR)/2;

XC

if ( f(XC) < 0 )

XL = XC;

else

XR = XC;

if (условие) оператор;

else оператор;

если |XR - XL| < ε - завершить

Page 35: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

)()()(

XLfXRf

XLXRXRfXRXN

14.11.2019 35

Метод секущих

1. XL, XR: f(XL)*f(XR) < 0

Пусть f(XL) < 0)(xf

XR

XL

if ( f(XN) < 0 )

XL = XN;

else

XR = XN;

если |XNn – XNn-1| < ε

или | f(XN) | < ε

XN

XN = XR - ∆X

∆X = f(XR)/tgα

α

XLXR

XLfXRftg

)()(

стоп

Page 36: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 36

Метод касательных (Ньютона)

1. f(xj) ≠ 0

)(xf

xj

xxx jj 1

)( jxftg

α

xj+1

tgxfx j /)(

)(

)(1

j

j

jjxf

xfxx

+ быстрая сходимость

- если производная не существует или

трудно вычислить

- если несколько корней, может не

сойтись

- если производная = 0

Page 37: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 37

Метод касательных

-неудачное начальное приближение

комбинация методов

- несколько корней

предварительный анализ положения

корней

Page 38: Лекция 3 - msu.ruofvp.phys.msu.ru/upload/iblock/ec1/lecture3_2019.pdf · Машинная арифметика и язык ... Cтандарт IEEE 754 для представления

14.11.2019 38

Литература по лекционному материалу

1. Д. Кент. С++. Основы программирования. – М.: NT Press, 2010, 366 c.

2. Дж. Форсайт, М. Малькольм, К. Моулер. Машинные методы математических вычислений. – М.: Мир, 1980, 280 с.

3. Что нужно знать про арифметику с плавающей запятой. -http://habrahabr.ru/blogs/cpp/112953/.