Это 15-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
Преподаватель порекомендовал, что проще всего начать с искусственного интеллекта — это октава, после его написания будет удобнее использовать python и c++.
Введение
GNU Octave is a high-level language primarily intended for numerical computations. It is typically used for such problems as solving linear and nonlinear equations, numerical linear algebra, statistical analysis, and for performing other numerical experiments. It may also be used as a batch-oriented language for automated data processing.
GNU Octave — это язык высокого уровня, используемый в основном для числовых вычислений. Он обычно используется для решения таких задач, как линейные и нелинейные уравнения, численная линейная алгебра, статистический анализ и для выполнения других численных экспериментов. Его также можно использовать в качестве пакетно-ориентированного языка для автоматизации обработки данных.
Это просто вводная информация, дополнительные функции вы можете найти в официальной документации:octave.pdf
базовый
-
Комментарий %
- Аналогично // в C++ и # в python.
-
an используется для хранения результатов вывода
-
Если вам не нравится вводить префиксы строк, вы можете настроить их
PS1('你想改成的内容');
Это не навсегда. После перезагрузки компьютера он вернется к настройкам по умолчанию.
-
help
помощь Если вы забыли использование определенного оператора, вы можете использовать этот запрос.такие как ввод
help eye
Использование глаза будет отображаться.
5. Несколько операторов могут быть выполнены одновременно через запятую.c octave:226> a=4,b=5,c=6 a = 4 b = 5 c = 6
6. quit
,exit
Октаву можно отключить (если не хотите нажимать X в правом верхнем углу)
7.addpath('路径')
добавить путь
оператор
арифметические операторы
сложение, вычитание, умножение и деление
octave:1> 1+5
ans = 6
octave:2> 1*5
ans = 5
octave:3> 1/5
ans = 0.2000
octave:4> 1-5
ans = -4
octave:5> 5^2
ans = 25
Логические операторы
- равный
==
- не равно
~=
- или
||
- и
&&
- исключающее ИЛИ
xor(a,b)
- больше или равно
>=
- больше, чем
>
ans = 0
>>1==1
ans = 1
>>1 ~=2
ans = 1
>>1&&2
ans = 1
>>1&&0
ans = 0
>>1||0
ans = 1
>>xor(1,1)
ans = 0
>>xor(1,2)
ans = 0
>>xor(0,1)
ans = 1
>>1>=2
ans = 0
>>1<2
ans = 1
оператор присваивания
-
=
оператор присваивания- Добавление точки с запятой после оператора не печатает оператор присваивания напрямую.
- Оператор присваивания печатается непосредственно без точки с запятой после оператора
>>a=1 %a=1后边没分号,所以输入回车之后下一行会直接打印a=1
a = 1
>>a %再输入a回车看看是否赋值成功
a = 1
>>b=2; %b=2后边加上分号了,所以下一行不会直接打印b的赋值
>>b %输入b回车,查看给b的赋值
b = 2
>>c=pi
c = 3.1416
форматированный вывод
-
disp(x)
: вывести значение x -
disp(sprintf('%0.2f',c))
: форматированный вывод с двумя десятичными знаками, это то же самое, что и язык C -
format long/short
: не влияет на целые числа, но влияет на десятичный формат вывода.
>>disp(a)
1
>>disp(c)
3.1416
>>disp(sprintf('%0.2f',c))
3.14
>>format long
>>a
a = 1
>>c
c = 3.141592653589793
>>format short
>>a
a = 1
>>c
c = 3.1416
Векторы и матрицы
Официальные исходные слова матрицы декларации:
Vectors and matrices are the basic building blocks for numerical analysis. To create a new matrix and store it in a variable so that you can refer to it later, type the command
octave:1> A = [ 1, 1, 2; 3, 5, 8; 13, 21, 34 ]
Octave will respond by printing the matrix in neatly aligned columns.
>>martix = [1,2,3;4,5,6;7,8,9]
martix =
1 2 3
4 5 6
7 8 9
Конечно, есть много других способов записи, хотя нестандартными можно объявить и матрицы, здесь не перечисленные.
Объявите вектор-строку без добавления символов или запятых между элементами.
martix =
1 2
2 3
3 4
>>vector=[1 2 3]
vector =
1 2 3
>>vector = [4;5;6]
vector =
4
5
6
Другое специальное написание:
-
变量 = 起始:终止
, который генерирует вектор с шагом 1 -
变量 = 起始:步长:终止
, создаст вектор> v = 1:5 v = 1 2 3 4 5 > m = 1:0.5:1 m = 1 octave:3> m = 1:0.5:5 m = 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000
-
ones(a,b)
Создайте матрицу только с 1 в строке и столбце b- Кроме
ones
иzeros
, все сгенерированные элементы равны 0, но нет ни двойки, ни тройки... -
>ones(2,3) ans = 1 1 1 1 1 1
- Кроме
- rand(n) образует квадратную матрицу порядка n, элементы которой являются случайными числами в диапазоне 0-1.
- rand(a,b) генерирует матрицу случайных чисел от 0 до 1 в строке a и столбце b
-
>rand(2,3) ans = 0.4046 0.4508 0.8021 0.6986 0.8620 0.2631
-
max(rand(n),rand(n))
Создайте несколько квадратных матриц, возьмите большее значение, чтобы сформировать новую квадратную матрицу.octave:124> c = max(rand(4),rand(4)) c = 0.8010 0.9926 0.7241 0.9053 0.9007 0.3026 0.9856 0.5710 0.7679 0.2630 0.5200 0.9615 0.7333 0.5113 0.6957 0.5683
-
-
randn(a,b)
Он также генерирует матрицу случайных чисел со строкой и столбцом b, но она соответствует распределению Гаусса (нормальному распределению). Возвращает матрицу с нормально распределенными случайными элементами с нулевым средним значением и дисперсией 1.- Нормальное распределение:
-
randi()
- randi(max,m,n): создать матрицу из m строк и n столбцов от 1 до max
- randi([min,max],m,n): создать матрицу из m строк и n столбцов min~max
-
>randi(5,3,3) ans = 1 5 5 5 2 1 5 1 1
-
>randi([5,10],5,5) ans = 6 8 6 8 5 10 9 10 8 7 5 7 7 9 10 10 8 10 8 8 10 9 7 6 7
-
eye(n)
сгенерировать n-мерную единичную матрицу>eye(5) ans = Diagonal Matrix 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
-
matrixB = matrixA(x:y,v:w)
: Сформируйте столбец x~y row v~w матрицы A в новую матрицу-
:
представляет все элементы -
a:b
представляет элементы от a до b -
[a b c]
Представляет abc три строки или столбца - Вышеупомянутые три метода представления могут также использоваться в других методах матрицы, таких как присвоение, печать
-
- матричная сшивка
- Добавьте столбец справа от матрицы
octave:30> A A = 4 2 7 5 1 10 7 10 5 10 9 9 octave:31> A = [A,[2;4;5]] A = 4 2 7 5 2 1 10 7 10 4 5 10 9 9 5
-
matrixC=[matrixA matrixB]
Горизонтальная строчка Писать[matrixA, matrixB]
То же самое, с запятыми или без нихoctave:33> A = randi(5,2,3) A = 4 1 3 2 3 5 octave:34> B = randi(5,2,3) B = 5 4 5 1 1 3 octave:35> c = [A B] c = 4 1 3 5 4 5 2 3 5 1 1 3
-
matrixC=[matrixA; matrixB]
Вертикальная строчкаoctave:33> A = randi(5,2,3) A = 4 1 3 2 3 5 octave:34> B = randi(5,2,3) B = 5 4 5 1 1 3 octave:36> d=[A;B] d = 4 1 3 2 3 5 5 4 5 1 1 3
- Добавьте столбец справа от матрицы
-
matrix(:)
Поместите все элементы в матрице в вектор-столбецoctave:30> A A = 4 2 7 5 1 10 7 10 5 10 9 9 octave:31> A(:) ans = 4 1 5 2 10 10 7 7 9 5 10 9 2 4 5
разное
-
hist(变量)
Вы можете нарисовать изображение переменной
Если вы чувствуете, что это слишком мало. что можно использовать
hist(变量,条纹数)
, на картинке ниже изображение после нанесения 50 полосок. -
Размер обнаружения
size()
length()
Как видно из рисунка ниже, length отображает длину матрицы. size показывает, сколько строк и столбцов имеет матрица. size (имя матрицы, 1/2), где 1 представляет параметр строки, а 2 представляет параметр столбца.
v = 9 9 5 8 8 5 10 7 6 8 6 7 7 7 6 7 10 8 7 9 7 10 7 5 6 >length (v) ans = 5 >size(v) ans = 5 5 >size(v,1) ans = 5
-
показатель:
-
matrix(i,j)
Отобразите элемент в строке i и столбце joctave:26> A = randi(10,3,4) %生成一个1~10之间随机数的 3×4 的矩阵 A = 4 2 7 5 1 10 7 10 5 10 9 9 octave:27> A(2,3) %打印这个矩阵2行3列的元素 ans = 7
-
matrix(:,[a,b,c...])
-
:
: представляет все -
[]
: выберите те, которые находятся в квадратных скобках -
octave:26> A = randi(10,3,4) A = 4 2 7 5 1 10 7 10 5 10 9 9 octave:27> A(:,[1,2,4]) %显示A所有行的1,2,4列 ans = 4 2 5 1 10 10 5 10 9
-
-
-
показать существующие переменные
-
who
: Показать все текущие переменные -
whos
: Показать все текущие переменные и подробную информацию
-
-
удалить переменную
clear
-
clear 变量
удалить три переменные - `clear удаляет все переменные
octave:12> a = 15 % 给a赋值15 a = 15 octave:13> a % 打印a a = 15 % 显示a的值 octave:14> clear a octave:15> a % 再次打印a error: 'a' undefined near line 1, column 1 %报错
-
мобильные данные
Те, кто использовал другие командные строки, должны иметь возможность адаптироваться, и октава также поддерживает некоторые команды.
-
pwd
: список текущего каталога -
cd xxx文件夹
: войти в папку ххх -
ls
: Список текущей информации каталога - Загрузить файл:
load 文件名
load('文件名')
- сохранить переменную имени файла; : сохранить переменную в файл, например
save data.txt num
, сохранить переменную num в data.txt (если такого файла нет в директории операции, будет создан новый файл, если в директории есть этот файл, то он будет перезаписан)
Данные двух файлов, featureX и priceY, приведены ниже, и эти два файла сохраняются сами по себе. функцияX:
2104 3
1600 3
2400 3
1416 2
3000 4
1985 4
1534 3
1427 3
1380 3
1494 3
1940 4
2000 3
1890 3
4478 5
1268 3
2300 4
1320 2
1236 3
2609 4
3031 4
1767 3
1888 2
1604 3
1962 4
3890 3
1100 3
1458 3
2526 3
2200 3
2637 3
1839 2
1000 1
2040 4
3137 3
1811 4
1437 3
1239 3
2132 4
4215 4
2162 4
1664 2
2238 3
2567 4
1200 3
852 2
1852 4
1203 3
priceY:
399900
329900
369000
232000
539900
299900
314900
198999
212000
242500
239999
347000
329999
699900
259900
449900
299900
199900
499998
599000
252900
255000
242900
259900
573900
249900
464500
469000
475000
299900
349900
169900
314900
579900
285900
249900
229900
345000
549000
287000
368500
329900
314000
299000
179900
299900
239500
Сначала войдите в соответствующий рабочий каталог.
Используйте who, чтобы увидеть, какие переменные доступны в данный момент.
X6price действительно успешно прочитал файл под печатью.
Проверьте с размером, импортированные данные сохраняются в матрице.
Назначьте строки с 1 по 5 и столбец 2 матрицы X6feature матрице x и сохраните матрицу x в файле data.txt.
рассчитать
В дополнение к арифметическим операторам, упомянутым в начале, существуют следующие операции.
Обратите внимание на специальный.*
, матрица умножается на одну и ту же позицию, то есть перемножаются элементы в одной и той же позиции матрицы.
octave:37> A
A =
4 1 3
2 3 5
octave:38> B
B =
5 4 5
1 1 3
octave:39> A * B %AB无法相乘
error: operator *: nonconformant arguments (op1 is 2x3, op2 is 2x3)
octave:40> A .* B %AB可以点乘
ans =
20 4 15
2 3 15
.^
возвести в степень каждый элемент матрицы
octave:43> A
A =
4 1 3
2 3 5
octave:44> A .^2
ans =
16 1 9
4 9 25
octave:45>
矩阵/数
То есть каждый элемент матрицы делится на число, но если вы хотите разделить число на каждый элемент матрицы, в результате получается все равно матрица, то вам нужно./
octave:38> B
B =
5 4 5
1 1 3
octave:50> 2 ./B
ans =
0.4000 0.5000 0.4000
2.0000 2.0000 0.6667
Если вы хотите добавить или вычесть число к каждому элементу матрицы, используйте+-
Вот и все.
octave:71> C
C =
2 -1 -4 1
-5 -2 -1 -1
1 -1 -5 -4
octave:72> C+1
ans =
3 0 -3 2
-4 -1 0 0
2 0 -4 -3
octave:73> C-2
ans =
0 -3 -6 -1
-7 -4 -3 -3
-1 -3 -7 -6
octave:74> 1+C
ans =
3 0 -3 2
-4 -1 0 0
2 0 -4 -3
log(n)
Логарифмическая база здесь e, т.е.или
octave:57> log(2)
ans = 0.6931
octave:58> log(e)
ans = 1
octave:59> A
A =
4 1 3
2 3 5
octave:60> log(A)
ans =
1.3863 0 1.0986
0.6931 1.0986 1.6094
exp(n)
эквивалентно выполнению
octave:61> exp(1)
ans = 2.7183
octave:62> exp(2)
ans = 7.3891
octave:63> A
A =
4 1 3
2 3 5
octave:64> exp(A)
ans =
54.5982 2.7183 20.0855
7.3891 20.0855 148.4132
abs()
найти абсолютное значение
octave:66> C = randi([-5,2],3,4) %随机生成一个3×4的矩阵,取值在-5\~2之间
C =
2 -1 -4 1
-5 -2 -1 -1
1 -1 -5 -4
octave:67> abs(-1)
ans = 1
octave:68> abs(C)
ans =
2 1 4 1
5 2 1 1
1 1 5 4
matrix'
Транспонировать, добавить английские одинарные кавычки после имени матрицы
octave:75> C
C =
2 -1 -4 1
-5 -2 -1 -1
1 -1 -5 -4
octave:76> C'
ans =
2 -5 1
-1 -2 -1
-4 -1 -5
1 -1 -4
flipud
Отразите матрицу по вертикали. Слева направо, справа налево.
result1 =
17 0 0 0 0
0 5 0 0 0
0 0 13 0 0
0 0 0 21 0
0 0 0 0 9
octave:140> flipud(result1)
ans =
0 0 0 0 9
0 0 0 21 0
0 0 13 0 0
0 5 0 0 0
17 0 0 0 0
矩阵<数值
Больше и равно ах все равно. Возвращает матрицу той же широты, каждый элемент является логическим значением, возвращаемым путем сравнения соответствующего элемента позиции.
a =
1 5 3 4
octave:85> a<2
ans =
1 0 0 0
magic(n)
Сгенерируйте магический квадрат порядка n. Так называемый магический квадрат заключается в том, что строки, столбцы и диагонали в сумме дают одно и то же значение
octave:95> magic(4)
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
octave:96> magic(3)
ans =
8 1 6
3 5 7
4 9 2
find(公式)
- оказатьсявекторсопоставляет данные и возвращает свой индекс
a = 1 5 3 4 octave:88> find(a<3) ans = 1 octave:89> find(a>2) ans = 2 3 4
- оказатьсяматрицасопоставление данных в
C = 9 7 3 5 4 2 5 10 4 1 9 10 octave:114> [r,c]=find(C==1) r = 3 c = 2 octave:115> [r,c]=find(C>7) r = 1 3 2 3 c = 1 3 4 4
sum()
суммаprod()
умножать
c =
1
3
4
4
octave:117> sum(c)
ans = 12
octave:118> prod(c)
ans = 48
floor()
округлить внизceil()
Округлен
a =
0.5000
1.5000
2.0000
2.0000
octave:120> floor(a)
ans =
0
1
2
2
octave:121> ceil(a)
ans =
1
2
2
2
max(矩阵)
принять максимальное значение
Если это матрица, отобразите максимальное значение каждого столбца; если это вектор, отобразите только одно максимальное значение
-
v=max(matrix)
: присвоить v максимальное значение матрицы, что не является жестким требованием, v можно изменить на другое имя -
[v,i]=max(matrix)
: присвоить максимальное значение матрицы и ее позицию v и i -
max(max(matrix))
: получить максимальное значение всей матрицы -
max(matrix(:))
: получить максимальное значение всей матрицы, это преобразовать матрицу в громкую и потом найти максимальное значение
c =
2 1 4 1
5 2 1 1
1 1 5 4
octave:78> val = max(c)
val =
5 2 5 4
octave:79> [val,ind]=max(c)
val =
5 2 5 4
ind =
2 2 3 3
max(矩阵,[],1/2)
Получите максимальное значение каждой строки или столбца матрицы для формирования вектора
- 1 взять каждый столбец
- 2 взять каждый ряд
c =
8 9 7 9
9 3 9 5
7 2 5 9
7 5 6 5
octave:129> max(c,[],1)
ans =
9 9 9 9
octave:130> max(c,[],2)
ans =
9
9
9
7
Небольшое упражнение:Создайте магический квадрат, затем проверьте, что сумма каждой строки, столбца и диагонали равна одному и тому же числу.
octave:131> m = magic(5) %生成一个5×5的幻方
m =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
octave:132> sum(m,1) %每列相加都是65
ans =
65 65 65 65 65
octave:133> sum(m,2) %每行相加都是65
ans =
65
65
65
65
65
octave:135> e=eye(5) %生成一个单位矩阵
e =
Diagonal Matrix
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
octave:136> result1 = e .* m %单位矩阵同位相乘原矩阵,新矩阵只剩主对角线元素
result1 =
17 0 0 0 0
0 5 0 0 0
0 0 13 0 0
0 0 0 21 0
0 0 0 0 9
octave:139> sum(result1(:)) %主对角线相加为65
ans = 65
octave:141> result2 = m .* flipud(e)
result2 =
0 0 0 0 15
0 0 0 14 0
0 0 13 0 0
0 12 0 0 0
11 0 0 0 0
octave:142> sum(result2(:)) %副加为65
ans = 65
pinv()
Инвертировать матрицу
m =
8 1 6
3 5 7
4 9 2
octave:145> pinv(m)
ans =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
Рисование
plot(A,B)
A — вектор абсцисс, B — ордината
octave:173> t=[-1:0.01:1];
octave:174> p1 = sin(2*pi*t);
octave:175> plot(t,p1)
octave:176> p2 = cos(2*pi*t);
octave:177> plot(t,p2)
После рисования картинки, если вы хотите нарисовать другую картинку, она будет перерисована, используйтеhold on
Вы можете сохранить его, продолжить рисовать на основе исходного изображения, и оно автоматически переключит цвета для вас.
octave:177> plot(t,p2)
octave:178> hold on
octave:179> plot(t,p1)
Добавьте метки к горизонтальной и вертикальной осям.
octave:183> xlabel('time')
octave:184> ylabel('speed')
Добавить легенду
legend('cos','sin','y')
добавить заголовок
title('my demo')
сохранить документ
print -dpng '文件名'
После сохранения в вашем текущем каталоге появится дополнительная картинка. Если вы не знаете текущий каталог, введите pwd, чтобы просмотреть путь к текущему каталогу.
Если вы хотите сгенерировать несколько изображений одновременно, добавьте перед нимиfigure(n);
Изображения будут генерироваться по порядку.
octave:194> figure(1);plot(t,p1)
octave:195> figure(2);plot(t,p2)
Комбинированные изображения дисплеяsubplot(n,m,index)
, разделите изображение на n строк и m столбцов и нарисуйте в позиции индекса.
octave:197> subplot(2,3,4)
octave:198> plot(t,p1)
octave:199> subplot(2,3,2)
octave:200> plot(t,p2)
Изменить диапазон значений вертикальной и горизонтальной осейaxis([横轴起始 终止 纵轴起始 终止])
octave:203> subplot(1,2,1)
octave:204> plot(t,p2)
octave:205> subplot(1,2,2)
octave:206> plot(t,p2)
octave:207> axis([0 1 -2 2])
Два изображения ниже представляют собой одно и то же изображение, а правая сторона — это изображение после изменения диапазона оси координат.
clf
очистить все изображение,close
Не нажимайте правый верхний угол ×, чтобы закрыть изображение
Матричная визуализация
imagesc()
a =
8 1 6
3 5 7
4 9 2
octave:217> imagesc (a)
В качестве отступления, как бывший студент-биолог, я, кажется, внезапно понял, как получились наши предыдущие тепловые карты.
octave:218> load 6feature.txt % 还记得这组数据吗,就是我上边给的那两组数据的第一组。
octave:219> imagesc (X6feature)
После его рисования изображение выглядит так Ну, я действительно понял, как рисовать тепловую карту.
Теперь давайте сгенерируем тепловую карту (фальшивую, а не тепловую карту, просто как она выглядит)
octave:220> r = rand(5,50);
octave:221> imagesc (r)
colorbar
Добавьте легенду для колориметрии.
octave:223> colorbar
colormap gray
сделать его в градациях серого
colormap gray
Базовая грамматика
-
цикл
for var = expression body endfor
while (condition) body endwhile
- На самом деле, endwhile, endfor и endif ниже могут быть напрямую записаны как end
- break, continue также можно использовать
-
судить
if (condition) then-body endif
if (condition) then-body elseif (condition) elseif-body else else-body endif
-
взять каштан
v = 8 4 8 2 5 7 4 6 1 3 10 6 6 4 10 6 6 8 8 10 9 1 10 5 7 > for i = 1:5 > for j = 1:5 > if v(i,j)<5 > continue > else > disp(v(i,j)) > endif > endfor > endfor 8 8 5 7 6 10 6 6 10 6 6 8 8 10 9 10 5 7
-
-
функция
- функция без возвращаемого значения
function name body endfunctio
- функция с возвращаемым значением
function [ret-list] = name (arg-list) body endfunction
- функция без возвращаемого значения
-
Напишите функцию в октаве:
>function say_hi(name) > str = ['hello' name]; > disp(str) > endfunction >say_hi ('Sian') helloSian
-
Пусть октава использует внешнюю функцию.
- Поместите файл функции в текущий каталог или путь
- Имя файла - это имя функции
- суффикс
.m
-
взять каштан Теперь напишите функцию show_matrix:
Хранится в пути и называется show_matrix.m
Вернитесь к объявлению матрицы в октаве и посмотрите, сможете ли вы успешно напечатать ее с помощью этой функции.
-
Другое целое с возвращаемым значением