Специальные матричные функции



МИНИСТЕРСТВО ОБРАЗОВАНИЯ и НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Коломенский институт (филиал)

федерального государственного бюджетного образовательного учреждения

высшего образования

«МОСКОВСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

 

 

Кафедра автоматизации производства и информационных технологий

 

П.С. Романов

 

Методические указания по выполнению лабораторной работы

По дисциплине

«СИСТЕМЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА»

Моделирование нейронных сетей в пакете Artificial Neuron Networks

Системы Scilab

 

Коломна – 2019

 


Содержание

1. Введение .................................................................................................................... 2
2. Массивы и матрицы в Scilab………………………………………………………. 2
2.1. Ввод и формирование массивов и матриц………………………………………… 3
2.2. Действия над матрицами………………………………………………………….. 6
2.3. Специальные матричные функции……………………………………………….. 6
3. Линейный нейрон и линейные сети………………………………………………. 12
3.1. Простой нейрон…………………………………………………………………….. 12
3.2. Нейрон с векторным входом………………………………………………………. 13
3.3. Функции активации………………………………………………………………… 14
3.4. Персептрон………………………………………………………………………….. 15
3.5. Структура линейной сети………………………………………………………….. 16
3.6. Моделирование нейронных сетей в пакете Artificial Neuron Networks системы  Scilab…………………………………………………………………………………   17
4. Задание для лабораторной работы............................................................................ 23
5. Структура отчета......................................................................................................... 23
6. Исходные данные…………………………………………………………………… 24
7. Литература.................................................................................................................. 24

Введение

 

Лабораторная работа выполняется на основе теоретических положений искусственного интеллекта на ПК с использованием систем Scilab и Microsoft WORD в среде Windows ХР/7/8/10. Цели работы:

изучить действия над матрицами  в Scilab с целью их использования при построении нейронных сетей;

изучение модели линейного нейрона и архитектуры линейной нейронной сети;

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

получение умений и навыков:

в действиях над матрицами, специальными матричными функциями и в их применении при построении нейронных сетей в Scilab;

в создании, исследовании и обучении линейных нейронных сетей в системе Scilab;

в анализе полученных результатов.

 

Массивы и матрицы в Scilab

 

Для работы с множеством данных удобно использовать массивы. Например, можно создать массив для хранения числовых или символьных данных. В этом случае, вместо создания переменной, для хранения каждого данного, достаточно создать один массив, где каждому элементу будет присвоен порядковый номер. Таким образом, массив – множественный тип данных, состоящий из фиксированного числа элементов. Как и любой другой переменной, массиву должно быть присвоено имя.

Переменную, представляющую собой просто список данных, называют одномерным массивом или вектором. Для доступа к данным, хранящимся в определенном элементе массива, необходимо указать имя массива и порядковый номер этого элемента, называемый индексом. Если возникает необходимость хранения данных в виде таблиц, в формате строк и столбцов, то необходимо использовать двумерные массивы (матрицы).

Для доступа к данным, хранящимся в таком массиве, необходимо указать имя массива и два индекса, первый должен соответствовать номеру строки, а второй номеру столбца в которых хранится необходимый элемент. Значение нижней границы индексации в Scilab равно единице. Индексы могут быть только целыми положительными числами.

 

Ввод и формирование массивов и матриц

Самый простой способ задать одномерный массив в Scilab имеет вид

[name]=Xn:dX:Xk

где name – имя переменной, в которую будет записан сформированный массив, Xn – значение первого элемента массива, Xk – значение последнего элемента массива, dX – шаг, с помощью которого формируется каждый следующий элемент массива, то есть значение второго элемента составит Xn+dX, третьего Xn+ dX+dX и так далее до Xk ([name] - здесь и далее квадратные скобки (если не сказано иначе) означают, что выражение, указанное в них может отсутствовать).

Возможен и такой способ определения одномерного массива:

[name]=Xn:Xk

Если параметр dX в конструкции отсутствует, это означает, что по умолчанию он принимает значение равное единице, то есть каждый следующий элемент массива равен значению предыдущего плюс один.

Пример 1. Определение одномерных массивов указанными способами. Переменную заданную как массив можно использовать в арифметических выражениях и в качестве аргумента математических функций. Результатом работы таких операторов являются массивы.

--> Xn=-3.5;dX=1.5;Xk=4.5;

--> X=Xn:dX:Xk

X =

-3.5000 -2.0000 -0.5000 1.0000 2.5000 4.0000

--> Y=sin(X/2)

Y =

-0.9840 -0.8415 -0.2474 0.4794 0.9490 0.9093

--> A=0:5

A =

0 1 2 3 4 5

--> 0:5

ans =

0 1 2 3 4 5

--> ans/2+pi

ans =

3.1416 3.6416 4.1416 4.6416 5.1416 5.6416

Еще один способ задания векторов и матриц в Scilab это их поэлементный ввода. Так для определения вектор-строки следует ввести имя массива, а затем после знака присваивания, в квадратных скобках через пробел или запятую перечислить элементы массива:

[name]=x1 x2 … xn или [name]=x1, x2, …, xn

Пример 2. Ввод вектора-строки поэлементным способом.

--> V=[1 2 3 4 5]

V =

1 2 3 4 5

--> W=[1.1,2.3,-0.1,5.88]

W =

1.1000 2.3000 -0.1000 5.8800

Элементы вектора-столбца вводятся через точку с запятой:

[name]=x1; x2; …; xn

Пример 3. Пример ввода вектора–столбца.

--> X=[1;2;3]

X =

1

2

3

Обратиться к элементу вектора можно, указав имя массива и порядковый номер элемента в круглых скобках: name(индекс).

Пример 4. Пример обращения к элементам массива.

--> W=[1.1,2.3,-0.1,5.88];

--> W(1)+2*W(3)

ans =

0.9000

Ввод элементов матрицы так же осуществляется в квадратных скобках, при этом элементы строки отделяются друг от друга пробелом или запятой, а строки разделяются между собой точкой с запятой:

[name]=[x11, x12, …, x1n; x21, x22, …, x2n;…; xm1, xm2, …, xmn;

Обратиться к элементу матрицы можно, указав после имени матрицы, в круглых скобках, через запятую, номер строки и номер столбца на пересечении которых элемент расположен: name(индекс1, индекс2).

Пример 5. Примеры задания матриц и обращение к их элементам.

--> A=[1 2 3;4 5 6;7 8 9]

A =

1 2 3

4 5 6

7 8 9

--> A(1,2)^A(2,2)/A(3,3)

ans =

3.5556

Кроме того, матрицы и векторы можно формировать, составляя их из ранее заданных матриц и векторов.

Пример 6.

--> v1=[1 2 3]; v2=[4 5 6]; v3=[7 8 9];

--> //Горизонтальная конкатенация векторов–строк.

--> V=[v1 v2 v3]

V =

1 2 3 4 5 6 7 8 9

--> //Вертикальная конкатенация векторов–строк, результат матрица

--> V=[v1; v2; v3]

V =

1 2 3

4 5 6

7 8 9

--> //Горизонтальная конкатенация матриц

--> M=[V V V]

M =

1 2 3 1 2 3 1 2 3

4 5 6 4 5 6 4 5 6

7 8 9 7 8 9 7 8 9

--> //Вертикальная конкатенация матриц

--> M=[V;V]

M =

1 2 3

4 5 6

7 8 9

1 2 3

4 5 6

7 8 9

Важную роль при работе с матрицами играет знак двоеточия «:». Указывая его вместо индекса при обращении к массиву, можно иметь доступ к группам его элементов.

Пример 7.

--> A=[5 7 6 5; 7 10 8 7;6 8 10 9;5 7 9 10]

A = //Пусть задана матрица А

5 7 6 5

7 10 8 7

6 8 10 9

5 7 9 10

--> //Выделить из матрицы А второй столбец

--> A(:,2)

ans =

7

10

8

7

--> //Выделить из матрицы А третью строку

--> A(3,:)

ans =

6 8 10 9

--> //Выделить из матрицы А подматрицу М

--> M=A(3:4,2:3)

M =

8 10

7 9

--> //Удалить из матрицы А второй столбец

--> A(:,2)=[]

A =

5 8 10

7 7 9

6 10 9

5 9 10

--> //Удалить из матрицы А третью строку

--> A(3,:)=[]

A =

5 8 10

7 7 9

5 9 10

--> //Представить матрицу М в виде вектора–столбца

--> v=M(:)

v =

8

7

10

9

--> //Выделить из вектора v элементы со второго по четвертый

--> b=v(2:4)

b =

7

10

9

--> //Удалить из массива b второй элемент

--> b(2)=[];

 

Действия над матрицами

Для работы с матрицами и векторами в Scilab предусмотрены следующие операции:

+ – сложение;

– – вычитание (Эти операции определены для матриц одной размерности или векторов одного типа, то есть суммировать (вычитать) можно либо векторы–столбцы, либо векторы–строки одинаковой длины);

’ – транспонирование;

* – матричное умножение (Операция умножения вектора на вектор определена только для векторов одинакового размера, причем один из них должен быть вектором–столбцом, а второй вектором–строкой. Матричное умножение допустимо, если количество строк в одной матрице совпадает с количеством столбцов в другой);

* – умножение на число;

^ – возведение в степень (Возвести матрицу в n-ю степень, значит умножить ее саму на себя n раз. При этом целочисленный показатель степени может быть как положительным, так и отрицательным. В первом случае выполняется алгоритм умножения матрицы на себя указанное число раз, во втором умножается на себя матрица обратная к данной);

\ – левое деление, (A\B) ð (A–1∙B), операция может быть применима для решения уравнения матричного уравнения вида A∙X=B;

/ – правое деление, (B/A) ð (B∙A–1), используют для решения матричных уравнений вида X∙A=B;

.* – поэлементное умножение матриц;

.^ – поэлементное возведение в степень;

.\ – поэлементное левое деление;

./ – поэлементное правое деление;

Пример 8. Пример действий над матрицами.

-->A=[1 2 0;-1 3 1;4 -2 5];

-->B=[-1 0 1;2 1 1;3 -1 -1];

-->//Вычислить (AT+B)2 - 2A(0.5BT-A)

-->(A'+B)^2-2*A*(1/2*B'-A)

ans =

10. 8. 24.

11. 20. 35.

63. - 30. 68.

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

Пример 9.

--> x=[0.1 -2.2 3.14 0 -1];

--> sin(x)

ans =

0.0998 -0.8085 0.0016 0 -0.8415

 

Специальные матричные функции

Для работы с матрицами и векторами в Scilab существуют специальные функции. Рассмотрим наиболее часто используемые из них: length(X) – определяет количество элементов матрицы X, если X – вектор, его длину.

Пример 10.

--> V=[-1 0 3 -2 1 -1 1];//Вектор–строка

--> length(V)//Длина вектора

ans =

7

prod(X) – вычисляет произведение элементов матрицы или вектора X.

Пример 11.

--> V=[1,2,3];

--> prod(V)//Произведение элементов вектора

ans =

6

sum(X) – вычисляет сумму элементов матрицы или вектора X, кроме того с помощью этой функции можно вычислить скалярное произведение векторов.

Пример 12.

--> V=[-1 0 3 -2 1 -1 1];

--> sum(V) //Сумма элементов вектора

ans =

1

-->//Частный случай. Вычисление скалярного произведения

--> a=[1 2 3];b=[2 0 1];

--> sum(a.*b)

ans =

5.

min(X) – находит минимальный элемент матрицы или вектора X;

max(X) – находит максимальный элемент матрицы или вектора X.

Пример 13.

--> V=[-1 0 3 -2 1 -1 1];

--> min(V) //Минимальный элемент

ans =

-2

--> max(V) //Максимальный элемент

ans =

3

mean(X) – определяет среднее арифметическое матрицы или вектора X.

Пример 14.

--> V=[-1 0 3 -2 1 -1 1];

--> mean(V)//Среднее значение массива V

ans =

0.1429

--> sum(V)/length(V)%То же что и mean(V)

ans =

0.1429

sort(X) – выполняет упорядочивание массива X, если X – матрица, сортировка выполняется по столбцам.

Пример 15.

-->b

b =

2. 0. 1.

-->sort(b) //Сортировка по убыванию

ans =

2. 1. 0.

-->-sort(-b) //Сортировка по возрастанию

ans =

0. 1. 2.

-->A

A =

1. 2. 0.

- 1. 3. 1.

4. - 2. 5.

-->sort(A) //Сортировка матрицы

ans =

5. 2. 0.

4. 1. - 1.

3. 1. - 2.

eye(n, m) – возвращает единичную матрицу соответствующей размерности.

Пример 16.

-->eye(3,3)

ans =

1. 0. 0.

0. 1. 0.

0. 0. 1.-->eye(5,1)

-->eye(5,1)

ans =

1.

0.

0.

0.

0.

ones(n, m) – формирует матрицу, состоящую из единиц

Пример 17.

-->m=3; n=2;

-->X=ones(m,n)

X =

1. 1.

1. 1.

1. 1.

zeros(n, m) – возвращает нулевую матрицу соответствующей размерности

Пример 18.

-->zeros(3,2)

ans =

0. 0.

0. 0.

0. 0.

diag(V [, k]) – возвращает квадратную матрицу с элементами V на главной диагонали или на k–й; функция diag(A [, k]), где A ранее определенная матрица, в качестве результата выдаст вектор столбец, содержащий элементы главной или k–ой диагонали матрицы А.

Пример 19.

--> V=[1,2,3];

--> diag(V)//Диагональная матрица, V на главной диагонали

ans =

1 0 0

0 2 0

0 0 3

-->//Диагональная матрица, V на первой диагонали (выше главной)

--> diag(V,1)

ans =

0 1 0 0

0 0 2 0

0 0 0 3

0 0 0 0

-->//Диагональная матрица, V на первой диагонали (ниже главной)

--> diag(V,-1)

ans =

0 0 0 0

1 0 0 0

0 2 0 0

0 0 3 0

--> A=[-1 2 0 ;2 1 -1 ;2 1 3]

A =

-1 2 0

2 1 -1

2 1 3

--> diag(A) //Главная диагональ матрицы А

ans =

-1

1

3

rand([n, m, p, …]) – возвращает матрицу случайных чисел, rand без аргументов возвращает одно случайно число.

Пример 20.

--> rand(3,3)//Квадратная матрица случайных чисел

ans =

0.9501 0.4860 0.4565

0.2311 0.8913 0.0185

0.6068 0.7621 0.8214

--> R=rand(2,2,2)//Многомерный массив случайных чисел

R(:,:,1) =

0.9355 0.4103

0.9169 0.8936

R(:,:,2) =

0.0579 0.8132

0.3529 0.0099

--> rand //Одно случайное число

ans =

0.4057

cat(n, A, B, [C, …]) – объединяет матрицы А и В или все входящие матрицы A, B, C, … При n=1 по строкам, при n=2 по столбцам. То же что [A; B] или [A, B].

Пример 21.

--> A=[1 2;3 4];

--> B=[5 6 ;7 8];

--> cat(2,A,B)//Объединение матриц

ans =

1 2 5 6

3 4 7 8

--> cat(1,A,B) %Объединение матриц

ans =

1 2

3 4

5 6

7 8

tril(A [, k]) – формирует из матрицы А нижнюю треугольную матрицу начиная с главной или с k–й диагонали

Пример 22.

--> A=[1 2 3;4 5 6;7 8 9]

A =

1 2 3

4 5 6

7 8 9

--> tril(A)//Нижняя треугольная матрица, начиная с главной

диагонали

ans =

1 0 0

4 5 0

7 8 9

--> tril(A,0)//Тоже что и tril(A)

ans =

1 0 0

4 5 0

7 8 9

--> tril(A,1)//Нижняя треугольная матрица,

--> //начиная с первой диагонали (выше главной)

ans =

1 2 0

4 5 6

7 8 9

--> tril(A,-2) )//Нижняя треугольная матрица,

--> //начиная со второй диагонали (ниже главной)

ans =

0 0 0

0 0 0

7 0 0

triu(A [, k]) – формирует из матрицы А верхнюю треугольную матрицу начиная с главной или с k–й диагонали

Пример 23.

--> A=[1 2 3;4 5 6;7 8 9];

--> triu(A)//Верхняя треугольная матрица

ans =

1 2 3

0 5 6

0 0 9

--> triu(A,2) )//Верхняя треугольная матрица,

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

ans =

0 0 3

0 0 0

0 0 0

--> triu(A,-1) )//Верхняя треугольная матрица,

--> //начиная с первой диагонали (ниже главной)

ans =

1 2 3

4 5 6

0 8 9

size(A) – определяет число строк и столбцов матрицы А, результатом ее работы является вектор [n, m]

Пример 24.

--> A=[2 4;1 3;7 9;5 8];

--> size(A)//Размерность матрицы А

ans =

4 2

--> V=[2 4 6 8 1 3 5 7];

--> size(V)//Размерность вектора–строки V

ans =

1 8

--> size(V')//Размерность вектора–столбца V’

ans =

8 1

-->//Формирование нулевой матрицы, такого же размера как и А

--> zeros(size(A))

ans =

0 0

0 0

0 0

0 0

-->//Формирование единичного вектора, такого же размера как и V

--> ones(size(V))

ans =

1 1 1 1 1 1 1 1

det(A) – вычисляет определитель квадратной матрицы A

Пример 25.

--> A=[3 2;4 3];

--> det(A)//Определитель матрицы

ans =

1

trace(A) – вычисляет след матрицы А, то есть сумму элементов главной диагонали

Пример 26.

--> A=[1 2 3;4 -2 1;7 0 -1]

A =

1 2 3

4 -2 1

7 0 -1

--> trace(A)//След матрицы А

ans =

-2

-->//Сумма элементов главной диагонали, то же что и trace(A)

--> sum(diag(A))

ans =

-2

inv(A) – возвращает матрицу обратную к A

Пример 27.

--> A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6];

--> P=inv(A)//Матрица обратная к A

P =

1.3333 -0.6667 0.3333 -1.0000

-0.0741 0.2593 1.1481 -0.1111

0.3704 -0.2963 0.2593 -0.4444

0.2593 -0.4074 -0.5185 -0.1111

--> A*P //Проверка A*P=E

ans =

1.0000 -0.0000 -0.0000 0.0000

0 1.0000 0.0000 0.0000

0.0000 -0.0000 1.0000 -0.0000

0.0000 -0.0000 -0.0000 1.0000

linsolve(A, b) – возвращает решение системы линейных уравнений Ax=b

Пример 28.

--> A=[1 2 3;-2 -4 -6]; b=[5;6];

--> //Система не имеет решений

-->linsolve(A,b)

WARNING:Conflicting linear constraints!

ans =

[]

-->//---------------------------------------------------

--> A=[2 -1 1;3 2 -5;1 3 -2]; b=[0;1;4];

--> x=linsolve(A,b)//Решение линейной системы

x =

0.4643

1.6786

0.7500

--> A*x //Решение верно

ans =

0.0000

1.0000

4.0000

rref(A) – осуществляет приведение матрицы A к треугольной форме, используя метод исключения Гаусса

Пример 29.

--> A=[3 -2 1 5;6 -4 2 7;9 -6 3 12]

A =

3 -2 1 5

6 -4 2 7

9 -6 3 12

--> rref(A)

ans =

1.0000 -0.6667 0.3333 0

0 0 0 1.0000

0 0 0 0

 

 


Дата добавления: 2019-09-13; просмотров: 264; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!