注释用%
clear all
清除工作区的所有变量
clc
清除命令行窗口中的所有命令
%%清除右侧工作区
% clear
s = 'a'
abs(s) %表示ascll
%%矩阵
A = [1 2 3; 4 5 6; 7,8,9]
B = A'%转置
C = A(:)%一列一列的拉
D = inv(A)%求逆 必须是行列相同的
E = zeros(10,5,3)%十行5列3维
E(:,:,1) = rand(10,5) %rand随机生成0-1之间的数值 rand(m,n)生成m行n列的均匀分布的伪随机数
E(:,:,2) = randi(5,10,5) %最大值是5 十行5列
E(:,:,3) = randn(10,5) %生态分布,有正有负
rand随机生成0-1之间的数值
randi生成均匀分布的伪随机整数(均值为0,方差为1)
元胞数组(Cell Array)将类型不同的相关数据集成到一个单一的变量中,使得大量相关数据的引用和处理变得简单方便。cell元胞数组,存储不同类型的数据。
概念理解上,可以认为它和c语言里面的结构体、c++里面的对象很类似。元胞数组是matlab中的特色数据类型,它不同于其他数据类型(如字符型、字符数组或者字符串)。它有给人一种查询信息的感觉,可以逐渐追踪一直到所有的变量全部翻译成基本的数据信息。它的class函数输出就是cell
%%元胞数组
A = cell(1,6) %一行六列
A{
2} = eye(3)%matlab的索引是从1开始,不是从0开始的 eye(3)是指3x3的单位矩阵,赋值给A的第二个元素
字面意思是模仿,在matlab中生成n阶幻方。比如三阶幻方就是1-9九个数字,组成一个3*3矩阵,使得该矩阵无论横竖还是斜三个方向上的三个数和和总是相同的。
magic(5) %1-25,然后横竖斜三个方向之和都相等
相当于python的字典
books = struct('name',{
{
'machine learning', 'data mining'}},'price',[30 40])
books.name %属性 cell {
'machine learning'} {
'data mining'}
books.name(1)%cell {
'machine learning'}
books.name{
1}%字符串 'machine learning'
1.矩阵的定义和构造
%%矩阵的定义和构造
A = [1 2 3 5 8 5 4 6]
%B = 1:2:9 %1为起点,9为终点,2是步长 步长不可缺省
B = 1:3:9
C = repmat(B, 3, 1)%把B这个东西横着重复1次,竖着重复3次
D = ones(2, 4)%生成两行四列,元素全为1
%%矩阵的四则运算
A = [1 2 3 4; 5 6 7 8]
B = [1 1 2 2; 2 2 1 1]
C = A + B %对应元素相应相加
D = A - B %对应元素对应相减
E = A * B' %A 乘以 B的转置, A的行数和B的列数要相同才能相乘
F = A .* B %对应项相乘
G = A / B %相当于A * B的逆 A * inv(B)
%G * B = A, G * B * pinv(B) = A * pinv(B), G = A * pinv(B)
H = A ./B %对应项相除
%%矩阵的下标
A = magic(5)
B = A(2, 3)%第二行第三列
C = A(3,:)%第三行
D = (:,4)%第4列 但是这边一直报错
[m, n] = find(A > 20) %找大于20的序号值,矩阵, 寻找大于20的元素的下标m行n列
1.for循环
for 循环变量 = 初值 :步长:终值
执行语句1
.
.
.
end
%%程序控制
%求1^2 + 2^2 + ...... + 5^2
sum = 0;
for n = 1:5 %步长可以省略,省略为1
sum = sum + n^2;
end
%使用for循环求1!+2!+3!+4!+5!
sum = 0
for i = 1:5
mul = 1;
for j = 1:i
mul = mul * j;
end
sum = sum + mul;
end
while 循环条件(成立时执行语句体)
执行语句1
.
.
.
end
%求1+2+3+...+10的和
sum = 0;
n = 1;
while n <=10 %不用冒号也不用括号
sum = sum + n;
n = n + 1;
end
if 表达式(成立时执行语句体)
语句体1;
else
语句体2;
.
.
.
end
switch 表达式(数值或字符串)
case 数值或字符串1
语句体1;
case 数值或字符串2
语句体2;
otherwise
语句体n;
.
.
.
end
每个分支都必须用end结束
1.二维平面绘图
%%二维平面绘图
x = 0:0.01:2*pi;%从0开始,每次增加0.01,到2pi结束
y = sin(x);
figure %建立一个幕布
plot(x, y) %绘制当前平面的二维图
title('y = sin(x)')
xlabel('x')
ylabel('sin(x)')
xlim([0 2*pi]) %提取的x坐标的值是0-2pi
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot') %plotyy是共用一个x坐标,同时绘制不同的y
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot') %plotyy是共用一个x坐标,同时绘制不同的y
set(get(AX(1),'ylabel'),'string','slow decay')%y1坐标的标注
set(get(AX(2),'ylabel'),'string','fast decay')%y2坐标的标注
xlabel('time (\musec)') %x坐标的标注
title('multiple decay rates') %title
set(H1,'linestyle','--') %改变y1的线的样式
set(H2,'linestyle',':') %改变y2的线的样式
%三维立体绘图
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
grid on % 在图片当中添加网格线
axis square %将各个方向变成一个正方形
hold on 在同一张图片当中绘制一条线 ,用于添加新绘图的时候保留当前绘图
x = 1:5
y = 2 * x
figure
plot(x, y)
hold on %如果没有hold on则只能保留最后一个绘图
y2 = 3 * x + 1
plot(x, y2)
figure中的导出–文件设置
在这里的宽高调整之后再导出,或者应用之后复制图窗在word中粘贴,可以保证较好的分辨率
%%双峰函数
[x y z] = peaks(30);
mesh(x,y,z)
grid