Файл: М.А. Тынкевич Система Matlab Справочное пособие к курсу Численные методы анализа.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.06.2024

Просмотров: 107

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

25

wilkinson(n) - матрица Уилкинсона (трехдиагональная симметрическая матрица n-го порядка, служащая тестом для алгоритмов решения проблемы собственных значений ; обычно берут n=21, где возникают кратные и близкие значения);

vander(X) – матрица Вандермонда (размерность совпадает с числом n элементов вектора Х Vij=xin-j):

» wilkinson(4)

 

 

x= [1 2 3 5]

 

 

 

ans =

 

 

 

» vander(x)

 

 

 

1.5000

1.0000

0

0

ans = 1

1

1

1

1.0000

0.5000

1.0000

0

8

4

2

1

0

1.0000

0.5000

1.0000

27

9

3

1

0

0

1.0000

1.5000

125

25

5

1

Ряд тестовых матриц упакован в специальный подкаталог, вызываемый командой :

[<выходные параметры>]= gallery(‘имя матрицы’, <входные параметры>)

К их числу относятся -

cauchy(X,Y), cauchy(X) – матрица Коши с элементами Cij=1/(xi+yj): при монотонно возрастающих последовательностях Х и Y матрица положительно определенная;

circul(Х) – циркулянтная матрица, получается из вектора Х построчно циклической перестановкой его элементов; если X скаляр, то берется вектор [1:X]; ее собственное значение равно скалярному произведениюХ и вектора [1 t t2 ... tn-1 ] , где t – корень n-й степени из –1:

» x=[1 2 3 5];

 

 

 

» gallery(‘circul’,[1 3 6 9])

» y=[1 2 100 200];

 

 

ans =

 

 

 

» gallery(‘cauchy’,x,y)

 

 

1

3

6

9

ans = 0.5000

0.3333

0.0099

0.0050

9

1

3

6

0.3333

0.2500

0.0098

0.0050

6

9

1

3

0.2500

0.2000

0.0097

0.0049

3

6

9

1

0.1667

0.1429

0.0095

0.0049

 

 

 

 

clement(n,sym) – трехдиагональная n-мерная матрица Клемента с нулями на главной диагонали с собственными значениями из последовательности [n1, n-3 ,n-5...] c плюсом и минусом (при нечетном n добавляется 0 или 1); sym=1 определяет симметричность матрицы:

»gallery(‘clement’,4)

» gallery(‘clement’,4,1)

» gallery(‘clement’,3,1)

ans =

 

 

 

 

ans =

 

 

 

ans =

 

 

0

1

0

0

 

0

1.7320

0

0

0

1.4142

0

3

0

2

0

 

1.7320

0

2.0000

0

1.4142

0

1.4142

0

2

0

3

 

0

2.0000

0

1.7320

0

1.4142

0

0

0

1

0

 

0

0

1.7320

0

» eig(ans)

 

» eig(ans)

 

 

 

» eig(ans)

 

 

ans = 2 0 -2

 

ans =

3

-3

1

-1

ans =

3 -3

1 -1

 

 

 


26

Кроме упомянутых в подкаталог входят еще свыше 40 тестовых матриц, связанных с проблемой собственных значений, обращением, полиномами Чебышева и др.

8. Анализ и обработка данных

8.1. Обработка статистических данных

Никакой анализ статистических данных не может обойтись без предварительной их обработки:

max (A) , min(A) – поиск экстремальных элементов по столбцам массива А;

max(A,B) , min(A,B) – формирование массива с элементами, равными экстремальным из соответствующих элементов массивов;

max(A,[],dim) , min(A,[],dim) – вектор экстремальных элемен-

тов по измерению dim;

[C,I]=max(...) , [C,I]=min(...) - дополнительно выводится строка индексов экстремальных элементов;

median(X) , median (X,dim) – медианы массива; mean(X) , mean (X,dim) –средние значения;

std(X) , std(X,flag) , std(X,flag,dim) – стандартное отклонение

(flag=0 –несмещенная оценка σ ; flag=1 – смещенная оценка s):

 

 

n

 

n

σ =

1

( xi x )2 ; s =

1

( xi x )2 ;

 

n1 i=1

n i=1

cov(X, Y) , cov(X,Y, flag) – ковариация для для массивов Х и Y (каждый столбец – переменная, строка – наблюдение)

covij ( X ,Y ) = 1f XiTYj , f=n или n-1;

cov(X) , cov(X,flag) – ковариация для столбцов массива Х ; corrcoef (X) , corrcoef (X,Y) –коэффициенты корреляции:

Rij =

covij

 

.

 

 

covii cov jj

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

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

diff(X), diff(X, n), diff(X, n, dim) – вычисление конечных раз-

ностей (первых, n-го порядка или по указанному измерению); если Х


 

 

 

27

 

 

–массив, берутся разности между столбцами:

 

» F=

[ 0

0.0998

0.1987

0.2955

0.3894 0.4794]

» D=diff(F)

 

 

 

 

D =

0.0998

0.0988

0.0969

0.0939

0.0900

» D2=diff(F,2)

 

 

 

 

D2 =

-0.0010

-0.0020

-0.0030

-0.0039

 

Для задач оптимизации градиентными методами полезны функ-

ции:

gradient(F), gradient(F,h), gradient(F,h1,h2,...) –приближенная оценка градиента функции n переменных с автоматическим выбором шага или с указанным шагом (одинаковым или разным по перемен-

ным):

 

 

» [x,y]=meshgrid(-2:0.2:2, -2:0.2:2);

%

выбор сетки узлов

» z=x.*exp(-x.^2-y.^2);

% вычисление значений на сетке

» [px,py]=gradient(z,.2,.2);

%

поиск градиента в узлах сетки

» contour(z), hold on,quiver(px,py), hold off % рис.8.1

20

 

 

 

 

 

 

 

 

 

18

 

 

 

 

 

 

 

 

 

16

 

 

 

 

 

 

 

 

 

14

 

 

 

 

 

 

 

 

 

12

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

2

4

6

8

10

12

14

16

18

20

 

 

 

 

Рис. 8.1

 

 

 

 

0.25

 

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

 

0.15

 

 

 

 

 

 

 

 

 

 

0.1

 

 

 

 

 

 

 

 

 

 

0.05

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

-0.05

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

0

 

 

 

 

Рис. 8.2

 

 

 

 

8.3. Аппроксимация и интерполяция

polifit(X,Y,n) – аппроксимация функции Y=Y(X) полиномом n-й степени:

»X=0:0.1:0.5;

»F=X.*sin(X);

»P=polyfit(X,F,1)

P = 0.4814

-0.0314

% P(x)= 0.4814 x -0.0314

» FF=polyval(P,X)

 

 

FF = -0.0314

0.0168

0.0649 0.1130 0.1612 0.2093

» plot(X,F,’ob’, X,FF,’-g’),grid,axis([0 0.5 -0.05 0.25])

% рис.8.2

interpft(Y,n,dim) -аппроксимация периодической функции на основе быстрого преобразования Фурье (Y – одномерный массив


 

 

 

 

 

 

 

 

 

 

28

 

 

 

 

0.9

 

 

 

 

 

 

 

 

 

значений функции; n – число узлов в

 

 

 

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

 

 

массиве значений):

 

 

 

0.7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

» X=0:10;

 

 

 

 

0.6

 

 

 

 

 

 

 

 

 

 

 

 

 

0.5

 

 

 

 

 

 

 

 

 

» Y=sin(X).^2.*exp(-0.1.*X);

 

 

 

 

 

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

 

 

» YP=interpft(Y,21);

 

 

0.3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

» xp=0:0.5:10;

 

 

 

0.2

 

 

 

 

 

 

 

 

 

 

 

 

0.1

 

 

 

 

 

 

 

 

 

» plot(X,Y,’ob’, xp,YP) % Рис. 8.3

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

Заметим,

что

в

библиотеке

-0.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

имеется богатый ассортимент средств

0

1

2

3

4

5

6

7

8

9 10

 

 

 

 

Рис. 8.3

 

 

 

для преобразования Фурье.

 

 

spline(X,Y,Z) – интерполяция Y=Y(X) кубическим сплайном и

вывод соответствующих значений в точках Z. Для получения боль-

шей информации используется конструкция pp=spline(X,Y): здесь

командой V=ppval(pp,Z) можно найти значения в точках Z, a коман-

дой [Xs, Coef, m,L]=unmkpp(pp) получить данные о векторе разбие-

ний

 

аргумента

 

 

Xs,

коэффициентах

Coef,

 

m=length(Xs),

L=length(Coef)/m .

 

 

 

 

 

 

 

 

 

 

interp1(X,Y,Z), interp1(X,Y,Z,’method’) – одномерная таблич-

ная интерполяция (если Y двумерный массив, интерполяция ведется

по каждому столбцу; значения Z должны входить в диапазон значе-

ний Х). Можно указать метод

интерполяции – кусочно-линейной

(linear, по умолчанию), ступенчатой (nearest), кубической (cubic), ку-

бическими сплайнами (spline). Функция interp1q(X,Y,Z) реализует

быструю линейную интерполяцию на неравномерной сетке.

 

 

interp2(X1,X2,Y,Z1,Z2),

interp1(X1,X2,Y,Z1,Z2,’method’)

двумерная табличная интерполяция Y=Y(X1,X2), аргументы должны

Рис. 8.4


29

меняться монотонно и заданы в формате функции meshgrid.

» [X1,X2]=meshgrid(-1:0.1:1);

 

» Y=exp(-X1.^2-X2.^2).*(1+X1+X2);

 

» [Z1,Z2]=meshgrid(-1:0.05:1);

 

» Y2=interp2(X1,X2,Y,Z1,Z2);

 

» mesh(X1,X2,Y),hold on,mesh(Z1,Z2,Y2+2),hold off

% Рис. 8.4

interp3(X1,X2,X3,Y,Z1,Z2,Z3), interp3(..., ’method’) – трехмер-

ная табличная интерполяция Y=Y(X1,X2,X3); interpn(X1,X2,...,Y,Z1,Z2,...), interp3(..., ’method’) – многомер-

ная табличная интерполяция Y=Y(X1,X2,...); griddata(X1,X2,Y,Z1,Z2), griddata(X1,X2,Y,Z1,Z2, ’method’) -

двумерная табличная интерполяция на неравномерной сетке.

8.4. Численное интегрирование

polyarea (X,Y), polyarea (X,Y, dim) -площадь многоугольника с координатами вершин (X,Y):

» polyarea ([1 2 3 4 5],[0 3 6 3 0]) ans = 12

trapz(X,Y), trapz(X,Y, dim) – вычисление интеграла по формуле трапеций ; функции cumtrapz(X,Y), cumtrapz(X,Y, dim) вычисляют к тому же промежуточные результаты;

quad(‘имя’, a,b), quad(‘имя’, a,b, eps), quad(‘имя’, a,b, eps, trace), quad(‘имя’, a,b, eps, trace,P1,P2,...), quad8(...) - вычисление определенного интеграла: a,b – пределы интегрирования; eps – относительная погрешность (по умолчанию 10-3); trace –построение точечного графика функции; имя’ – имя подинтегральной функции (встроенной или М-файла); P1,P2,... – передаваемые параметры функции; quad использует квадратуру Симпсона, quad8 – НьютонаКотеса 8-го порядка). Используется рекурсия до глубины 10 и может появиться сообщение – подозрение о сингулярности функции (наличии особенностей).

function f=integr(x)

0.4

 

 

f=x.*exp(-x);

0.35

 

 

» quad(‘integr’,0,2, 1e-5,1)

0.3

 

 

ans = 0.5940

0.25

 

 

dblquad(‘имя’, a1,b1, a2,b2),

0.2

 

 

dblquad(‘имя’, a1,b1, a2,b2, eps),

0.15

 

 

dblquad(‘имя’, a1,b1, a2,b2, eps, <ме-

0.1

 

 

тод>) - вычисление двойного интегра-

0.05

 

 

ла от функции <имя>(Х1,X2) ; <ме-

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2

 

0

 

 

тод> - quad или quad8.

Рис. 8.5