Занятие 2. Основы работы в GNU Octave Краткое содержание занятия 1. Создание матриц и простейшие операции над ними 2. Решение систем уравнений. 3. Графики функций z=f(x) и z=f(x,y) 4.Расчёт доверительных интервалов 5.Гистограммы
Почему GNU Octave? Готовые «мастера» в пакетах вроде Origin, Statgraphics и т.п. Просто и надёжно НО! Теория оторвана от практики => сложно разобраться в принципах работы Готовые «мастера» в пакетах вроде Origin, Statgraphics и т.п. Просто и надёжно НО! Теория оторвана от практики => сложно разобраться в принципах работы «Классические» языки C и Fortran Даёт полное понимание происходящего и контроль над ним НО! Трудоёмко, нужны навыки программиста «Классические» языки C и Fortran Даёт полное понимание происходящего и контроль над ним НО! Трудоёмко, нужны навыки программиста Системы матричной алгебры: MATLAB, GNU Octave, SciLab Разумный компромисс между сложностью C/Fortran и загадочностью «мастеров» Системы матричной алгебры: MATLAB, GNU Octave, SciLab Разумный компромисс между сложностью C/Fortran и загадочностью «мастеров»
Создание матриц Способ 1. Перечисление элементов в квадратных скобках >> a=[1 2 3;4 5 6] a = >> b=[ ; ]; >> disp(b) Примечание: если в конце строки поставить точку с запятой, то матрица будет создана, но при этом не показана Способ 2. Конкатенация существующих матриц >> c = [a;b]; disp(c) >> d = [a b]; disp(d) Способ 4. Специальные функции >> x = eye(3); >> disp(x) Diagonal Matrix См. также ones, zeros, repmat Способ 3. Оператор двоеточия >> disp(10:15:70) >> disp(1:5)
Создание матриц Способ 5. Выделение подматриц >> x = magic(4) >> disp(x(1:2,1:4)) >> disp(x(1:2:4,1:2:4)) >> disp(x(1,:)) Индексы начинаются с единицы! Диапазоны индексов задаются с помощью конструкции с двоеточием. : - все индексы по данной размерности a:b – все индексы от a до b с шагом 1 a:s:b – все индексы от a до b с шагом s Способ 6. Работа с подматрицами >> x = magic(4) >> x(:,2)=-x(:,2); disp(x) >> x([1 4],:)=x([4 1],:); disp(x) >> x(2:4,2:4)=0;disp(x)
Операции над матрицами Octave Линейная алгебра Описание C=A. Транспонирование матрицы C=A Эрмитово-сопряженная матрица C=A.^B Поэлементное возведение в степень C=A*B Умножение матриц C=A.*B Поэлементное умножение X=A\B Левое матричное деление X=A/B Правое матричное деление X=A./B Поэлементное деление C=A+B Сложение матриц C=A-B Вычитание матриц Различайте матричные и поэлементные операции!
Операции над матрицами Операторы * и.* Операторы /, \ и./ * : умножение матриц.* : умножение массивов \ : левое матричное деление (left matrix division) / : правое матричное деление (right matrix division)./ : деление массивов >> A = [1 2;3 4]; >> B = [50 60; 70 80]; >> A*B >> A.*B >> A\B >> A/B >> A./B Возможность скрытых ошибок! Если матрицы квадратные, то замена.* на * или / на./ не приводит к останову программы!
Операции над матрицами >> A = [1 2;3 4]; >> B = [50 60; 70 80]; Операторы ^ и.^ ^ : возведение матрицы в степень.^ : возведение массива в степень Обратная матрица >> A^ >> A.^ (а) Функция inv (б) Оператор ^ >> inv(A) >> A^(-1) Возможность скрытых ошибок! Если матрицы квадратные, то замена.^ на ^ не приводит к останову программы!
Решение системы линейных уравнений Шаг 2. Задать матрицы в Octave >> A=[1 1 -1; ; ]; >> b=[6; 21; 6]; Шаг 3. Решить систему >> x=A\b x = e e e+00 Шаг 4. Проверить решение >> disp(A*x); Альтернативные способы >> x=inv(A)*b; >> x=A^(-1)*b; Исходная система уравнений
Двухмерные графики Шаг 1. Рассчитать точки графика >> x = 0:0.01:2*pi; >> y = sin(x); Шаг 2. Построить график >> plot(x,y,b-); Шаг 3. Экспорт в файл >> plot(x,y,b-,LineWidth,3); >> xlabel(x); ylabel(y); >> print(a.png','-dpng','-r75')
Трёхмерные графики >> % Рассчитать точки для графика >> [X,Y]=meshgrid(-2:0.1:2,-2:0.1:2) >> Z = exp(-X.^2-Y.^2) >> % Построить график >> surf(X,Y,Z); Работа функции meshgrid X = Y = >> [X,Y]=meshgrid(-3:1:3,-2:1:2) Диапазон и шаг по оси y Диапазон и шаг по оси x Выход функции: матрицы X и Y
Трёхмерные графики: вывод на экран Функция surf: поверхность Функция contour: только изолинии Функция surfc: поверхность + изолинии Функция mesh: поверхность
Среднее и доверительный интервал Функция ВызовОписание meanmean(x) mean(x,1) mean(x,2) Среднее значение вектора x Средние значения столбцов матрицы x Средние значения строк матрицы x stdstd(x) std(x,f) std(x,f,1) std(x,f,2) Стандартное отклонение вектора x f = 0 – не смей.диск., f = 1 – смещ.диск. Стандартное отклонение столбцов матрицы x Стандартное отклонение строк матрицы x tinvtinv(p,f) Левосторонний квантиль t-распределения median См. mean Расчёт медианы numelnumel(x) Число элементов вектора или матрицы x sum См. mean Расчёт суммы >> x = [ ]; >> mean(x) ans = >> std(x) ans = >> std(x)*tinv(0.975,numel(x)-1)/sqrt(numel(x)) ans =
Функции распределения и квантили Распределение Левосторонний квантиль Нормальное normpdf(x,mu,s)normcdf(x,mu,s)norminv(p,mu,s) Стьюдента (t) tpdf(x,f)tcdf(x,f)tinv(p,f) chi2pdf(x,f)chi2cdf(x,f)chi2inv(p,f) Фишера (F) fpdf(x,f1,f2)fcdf(x,f1,f2)finv(p,f1,f2) Pdf – probability density function (функция плотности вероятности) Cdf – cumulative distribution function (интегральная функция распределения) Inv – inverse function (обратная функция) >> x = 0:0.1:10; >> y1 = fpdf(x,6,5); >> y2 = fcdf(x,6,5); >> plot(x,y1,'k-',LineWidth',5); >> hold on; >> plot(x,y1,'k-',LineWidth',5); >> hold off; >> legend('p(x)','F(x)'); >> set(gca,'FontSize',20);
Случайные числа и гистограммы Функция ВызовОписание randrand(m,n) Матрица mxn из равномерно распределенных случайных чисел из интервала [0;1] randnrandn(m,n) histhist(x,n) [nn,xx]=hist(x,n) График с гистограммой Гистограмма в числах (x – данные, n – число карманов, nn – частоты, xx – центры карманов) >> x = randn(1,1000); >> hist(x,8, FaceColor, yellow, EdgeColor, red, LineWidth, 5); >> [nn,xx] = hist(x,8); >> hold on; >> plot(0,xx,bo); >> hold off;
Полезные команды Команда Значение cd имя_каталога Сменить текущий каталог clc Очистить консоль clear all Уничтожить все переменные (и ряд других структур вроде пользовательских типов данных, загруженных MEX-файлов и т.п.) close all Закрыть все окна с графиками dir (или ls) Вывести содержимое текущего каталога edit filename.m Отредактировать файл filename.m или создать его (если он отсутствует) figure Создать новое окно для вывода графиков help funcname Выдать справку по функции funcname hold on hold off Выводить новый график в существующее окно Выводить новый график в новое окно (старое закроется) pause Ждать нажатия ENTER пользователем pwd Узнать текущий каталог whos Вывести существующие переменные