目录
函数
在Octave中,定义一个函数需要使用function
关键字,然后紧跟在 function 后面的是函数的声明,包括返回值,函数名称和参数,之后换行来实现具体的函数功能。
Octave的函数不需要显示的返回语句,Octave会将函数第一行声明的返回值返回给调用方,因此,我们在函数体中只需将最终的计算结果赋给定义的返回值,比如例子中的y1。
还有一点需要说明的是,在Octave中,函数可以返回多个值:
function y = squareThisNumber(x)
y = x^2;
function [y1, y2] = squareAndCubeThisNumber(x)
y1 = x^2;
y2 = x^3;
控制语句
>> v=zeros(10,1);
>> for i=1:10,
v(i) = 2^i;
end;
>> v
v =
4
16
64
256
1024
>> for i=indices,
disp(i);
end;
2
4
6
8
10
>> i = 1;
>> while i <= 5,
v(i) = 100;
i = i+1;
end;
>> v
v =
100
100
64
256
1024
>> i=1;
>> while true,
v(i) = 999;
i = i+1;
if i == 6,
break;
end;
end;
>> v
v =
999
999
64
256
1024
>> v(1)
ans = 999
>> v(1) = 2;
>> if v(1)==1,
disp('The value is one');
elseif v(1) == 2,
disp('The value is two');
else
disp('The value is not one or two');
end;
基础运算
%加减乘除和幂次方操作
octave:1> 2 + 3
ans = 5
octave:2> 4 - 2
ans = 2
octave:3> 3 * 7
ans = 21
octave:4> 15 / 3
ans = 5
octave:5> 4 ^ 2
ans = 16
矩阵和向量
%矩阵和向量生成
>> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6
>> v = [1 2 3]
v =
1 2 3
%一般矩阵用大写字母,向量用小写字母
>> v = 1:6
v =
1 2 3 4 5 6
%全1矩阵
>> ones(3, 3)
ans =
1 1 1
1 1 1
1 1 1
%全0矩阵
>> zeros(3,2)
ans =
0 0
0 0
0 0
%随机矩阵 随机样本位于[0,1)
%高斯随机矩阵 从标准正态分布中返回一个或多个样本值
>> rand(3, 3)
ans =
0.76554 0.21232 0.22204
0.17062 0.23965 0.27107
0.91687 0.91276 0.65453
>> randn(3,3)
ans =
0.50870 0.84712 -0.33820
1.20282 1.18850 0.75058
0.92504 -2.08136 0.40063
%单位矩阵
>> eye(3)
ans =
Diagonal Matrix
1 0 0
0 1 0
0 0 1
%获取矩阵长度
>> A = [1 2;3 4;5 6]
A =
1 2
3 4
5 6
>> size(A)
ans =
3 2
>> length(A)
ans = 3
%查看当前变量
>> who
Variables in the current scope:
A ans
>> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 3x2 48 double
ans 1x1 8 double
Total is 7 elements using 56 bytes
%矩阵的运算
1、读取
Aij=A(i,j);读单个元素
Ai=A(i,:);读i行全部元素
Aj=A(:,j);读j列全部元素
B=A(i:m,j:n);获取i-m列,j-n行的子阵
2、赋值
A(i,j)=k;将k赋给Aij
A(i,:)=k;将第i行元素全置为k
3、添加删除
设A为3*3矩阵
A(4,:)=[1 2 3] 增加第四行元素为1,2,3。 列同理
A(:,2)=[]删除第二列。行同理
4、获取矩阵属性
size(A,1)、rows(A) 行元素数
size(A,2)、columns(A)列元素数
注:rows(A)、columns(A)为octave独有有命令
size(A) 获取行、列的数值
numel(A) 获取矩阵元素数
isempty(A) 矩阵是否为空 0不为空 1为空
5、矩阵运算
2*A A+B A-B 矩阵乘、加、减
inv(A) A的逆
det(A) A的行列式
eig(A) 矩阵的特征值(Eigenvalue decomposition)
svd(A) 矩阵的奇异值(Singular Value Decomposition)
注:奇异值定义:设A为m*n阶矩阵,A^T表示A的转置矩阵,A^T*A的n个特征值的非负平方根叫作A的奇异 值。记为σi(A)。
6、Element-Wise Operations
两个矩阵对应位置元素之间的运算
A.+A A.*A A./A A.^3 分别为加乘除幂操作
绘图
%sin
>> t=[0:0.01:0.98];
>> y1 = sin(2*pi*4*t);
>> plot(t,y1);
% hold on 命令可在原图像中再添加新曲线,输入close命令可以关闭图像,clf清理图像
%分区域画图
>> subplot(1,2,1);
>> plot(t,y1);
>>subplot(1,2,2);
>> plot(t,y2);
>> axis([0.5 1 -1 1])
%添加坐标说明
>> xlabel('time'); % 指定X轴的名称
>> ylabel('value'); % 指定Y轴的名称
>> legend('sin', 'cos'); % 标识第一条曲线是sin,第二条曲线是cos
>> title('sin and cos function'); % 给图片附一个标题
%网状图绘制 surf
surf(theta0_vals,theta1_vals,J_vals);
%绘制等高线 contour
contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 3, 20));
plot(theta(1),theta(2),'rx','MarkerSize', 10, 'LineWidth', 2);
数据加载及保存
%加载、保存数据
>> data = load('ex1data1.txt');
>> X = data(:, 1); y = data(:, 2);
>>save hello.mat ans
>>save hello.txt ans -ascii
%清空变量
>>clear
>>clear ans
添加环境变量
addpath('C:\Users\ang\desktop')
tips
- 在一条语句的后面添加一个分号,不会立即输出该语句的值;
help
命令,通过这个命令可以查看函数的定义以及示例;
参考:
- https://www.jianshu.com/p/2853927f05ae
- https://www.cnblogs.com/ash975/p/5847155.html
- https://blog.youkuaiyun.com/quiet_girl/article/details/70142953