matlab基本操作

9 篇文章 0 订阅
6 篇文章 0 订阅

目录

matlab编译环境

 matlab基本操作

4.命名规则

5.基本数据类型

1.表示注释分段

2.变量命名规则

3.matlab数据类型

4.MATLAB矩阵操作

5.MATLAB逻辑与流程控制

6. MATLAB逻辑与流程控制

7. MATLAB脚本与函数文件

8.MATLAB基本绘图操作

9.MATLAB文件导入

1,乘和点乘 

2, 除与点除

if 与 循环 

 xlim函数

 一张画布画两张图的方法


matlab编译环境

1.工作区显示命令区的变量值以及结果(ans) 

2.导入文件复制粘贴文件路径

3.关于编辑器界面也就编译环境,三角星向下有惊喜(布局  以及全选 筛选等小功能) 

应用程序就是相当于一个工具箱 里面有很多种工具(程序),可以导入程序我们就可以直接当作matlab的一种功能来使用了 

绘图 有大大的惊喜,绘图种类难以想象

导文件 和文件保存位置  文件比较都是看文件保存路径

牛逼的是还有代码自动生成的功能 应该是那些常用的算法才有

 工具箱 (应用程序)  代码自动生成  绘图是matlab的三大牛逼之处,多了解一下这三个东西 能够为编辑程序 搞出曲线来有很大的好处

工作界面的调整: 主页-----布局----默认一键还原

 matlab基本操作

4.命名规则

5.基本数据类型

1.表示注释分段

2.变量命名规则

3.matlab数据类型

4.MATLAB矩阵操作

5.MATLAB逻辑与流程控制

6. MATLAB逻辑与流程控制

7. MATLAB脚本与函数文件

8.MATLAB基本绘图操作

9.MATLAB文件导入

%%表示注释分段
%% I. 清空环境变量及命令
clear all   % 清除Workspace中的所有变量(工作区)
clc         % 清除Command Window中的所有命令(命令区)

%% II. 变量命令规则
%%
% 1. 变量名区分大小写
A = 2
a = 3

%%
% 2. 变量名长度不超过63位
% ABCDEFGHIJKLMNOPQRSTUVWXYZ123456ABCDEFGHIJKLMNOPQRSTUVWXYZ123456 = 3

%%
% 3. 变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点
% 3A = 4
% .a = 5
% /b = 5
a_2 = 3
% a.2 = 4

%%
% 4. 变量名应简洁明了,通过变量名可以直观看出变量所表示的物理意义
A = rand(3,5)

%rand (0-1的随机数生成 默认小数点四位 ,三行五列)

A =

    0.8147    0.9134    0.2785    0.9649    0.9572
    0.9058    0.6324    0.5469    0.1576    0.4854
    0.1270    0.0975    0.9575    0.9706    0.8003

rows = size(A, 1)%size查看矩阵大小,1是行 2是列
cols = size(A, 2)

%% III. MATLAB数据类型
%%
% 1. 数字
2 + 4

10 - 7

3 * 5

8 / 2

%%
% 2. 字符与字符串
s = 'a'
abs(s)%答案是s的ASCALL码
char(65)%把65的字符打出来为1A
num2str(65)%返回变为‘65’的字符串

str = 'I Love MATLAB & Machine Learning.'

length(str)

%注意matlab是不区分str 与char的 统一为char

%%
% 3. 矩阵
A = [1 2 3; 4 5 2; 3 2 7]%直接编写矩阵即可,每一列用;隔开
B = A'#矩阵的转置
C = A(:)#把A矩阵中按一列来输出,顺序为从第一列开始,就是一列一列来这里体现了matlab里其实是按列来存储的
D = inv(A)#求矩阵的逆
A * D#矩阵相乘,这里结果是单位阵,这里出现-0的原因是由于运算带有误差

%上面的解

A =

     1     2     3
     4     5     2
     3     2     7


B =

     1     4     3
     2     5     2
     3     2     7


C =

     1
     4
     3
     2
     5
     2
     3
     2
     7


D =

   -0.9118    0.2353    0.3235
    0.6471    0.0588   -0.2941
    0.2059   -0.1176    0.0882


ans =

    1.0000    0.0000   -0.0000
    0.0000    1.0000   -0.0000
    0.0000    0.0000    1.0000

%E为三维矩阵(行,列,分三个二维矩阵来描述三维矩阵)

E = zeros(10,5,3)
E(:,:,1) = rand(10,5)%第一个二维矩阵的所有行和列。赋值为10行5列的随机小数(无负数)
E(:,:,2) = randi(5, 10,5)%第二个randi(范围,行,列)生成0-5之间的整数
E(:,:,3) = randn(10,5)%第三个生成10行5列的随机小数(有负数)

%这是生成该三维矩阵的解

E(:,:,1) =

    0.5312    0.3164    0.7067    0.6841    0.3508
    0.1088    0.2176    0.5578    0.4024    0.6855
    0.6318    0.2510    0.3134    0.9828    0.2941
    0.1265    0.8929    0.1662    0.4022    0.5306
    0.1343    0.7032    0.6225    0.6207    0.8324
    0.0986    0.5557    0.9879    0.1544    0.5975
    0.1420    0.1844    0.1704    0.3813    0.3353
    0.1683    0.2120    0.2578    0.1611    0.2992
    0.1962    0.0773    0.3968    0.7581    0.4526
    0.3175    0.9138    0.0740    0.8711    0.4226


E(:,:,2) =

     2     5     3     1     3
     3     5     2     5     2
     4     3     1     3     3
     3     2     5     4     1
     3     4     1     1     2
     1     4     1     5     1
     1     4     4     4     5
     2     4     5     1     4
     2     1     3     3     5
     4     4     4     2     1


E(:,:,3) =

     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0


E(:,:,1) =

    0.5312    0.3164    0.7067    0.6841    0.3508
    0.1088    0.2176    0.5578    0.4024    0.6855
    0.6318    0.2510    0.3134    0.9828    0.2941
    0.1265    0.8929    0.1662    0.4022    0.5306
    0.1343    0.7032    0.6225    0.6207    0.8324
    0.0986    0.5557    0.9879    0.1544    0.5975
    0.1420    0.1844    0.1704    0.3813    0.3353
    0.1683    0.2120    0.2578    0.1611    0.2992
    0.1962    0.0773    0.3968    0.7581    0.4526
    0.3175    0.9138    0.0740    0.8711    0.4226


E(:,:,2) =

     2     5     3     1     3
     3     5     2     5     2
     4     3     1     3     3
     3     2     5     4     1
     3     4     1     1     2
     1     4     1     5     1
     1     4     4     4     5
     2     4     5     1     4
     2     1     3     3     5
     4     4     4     2     1


E(:,:,3) =

    2.3774    0.8967    0.3656   -0.7778   -0.2828
    1.5261    0.5047    3.5267   -1.0649    1.1522
    0.1685   -0.4009   -0.1124   -1.7684   -1.1465
   -0.3012   -0.5138   -1.5566   -0.4229    0.6737
   -0.6987    0.7964    1.9151   -1.0531   -0.6691
    0.8328   -0.6712    0.6098    0.6478   -0.4003
   -0.6946    1.1867   -0.6479   -0.3176   -0.6718
   -0.4619    0.7907    2.6173    1.7690    0.5756
    0.8836    0.2877    0.5510    1.5106   -0.7781
    0.4359    0.0032    0.2942    0.1640   -1.0636

%%
% 4. 元胞数组
A = cell(1, 6)生成1行6列的元胞数组 每一个元胞就是一个矩阵,初始化为空矩阵5

%解:

A = 

    []    []    []    []    []    []


A{2} = eye(3)%生成3*3单位矩阵赋值给A的第二个矩阵,注意matlab是从1开始数起的
A{5} = magic(5)%生成5*5范围是0-25的整数矩阵赋值给第五个元胞矩阵
B = A{5}

%解:

A = 

    []    [3x3 double]    []    []    [5x5 double]    []


B =

    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
 

%%
% 5. 结构体
books = struct('name',{{'Machine Learning','Data Mining'}},'price',[30 40])%生成一个书的结构 ,变量名是name 和 price ,值用{字符串} 、[数值]表示

%解:

books = 

     name: {'Machine Learning'  'Data Mining'}
    price: [30 40]
 

books.name%取结构成员用.

%解:

ans = 

    'Machine Learning'    'Data Mining'
 

books.name(1)%取结构成员中的第一个字符返回元胞数组类型

%解:

ans = 

    'Machine Learning'


books.name{1}%取结构成员中的第一个字符返回字符串类型

%解:

ans = 

    'Machine Learning'

%% IV. MATLAB矩阵操作
%%
% 1. 矩阵的定义与构造
A = [1 2 3 5 8 5 4 6]%生成序列

%解:

A =

     1     2     3     5     8     5     4     6

B = 1:2:9%生成序列,开始,步长:结束

%解:

B =

     1     3     5     7     9
C = repmat(B, 3, 1)%把B序列,可以是数组或者是矩阵,复制成3行1列的矩阵

%解:

C =

     1     3     5     7     9
     1     3     5     7     9
     1     3     5     7     9


D = ones(2, 4)%生成元素都为1的2行4列的矩阵

%解:

D =

     1     1     1     1
     1     1     1     1

%%
% 2. 矩阵的四则运算
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'
F = A .* B
G = A / B     % G * B = A     G * B * pinv(B) = A * pinv(B)    G = A * pinv(B)%B的逆矩阵
H = A ./ B

%解:

A =

     1     2     3     4
     5     6     7     8


B =

     1     1     2     2
     2     2     1     1


C =

     2     3     5     6
     7     8     8     9


D =

     0     1     1     2
     3     4     6     7


E =

    17    13
    41    37


F =

     1     2     6     8
    10    12     7     8


G =

    1.8333   -0.1667
    3.1667    1.1667


H =

    1.0000    2.0000    1.5000    2.0000
    2.5000    3.0000    7.0000    8.0000
 

%% 
% 3. 矩阵的下标
A = magic(5)
B = A(2,3)%坐标为第二行第三列的元素
C = A(3,:)%第三行 所有列的元素
D = A(:,4)%第四列所有行的元素
[m, n] = find(A > 20)%找出所有大于20的元素的坐标[行:列]

%解:

A =

    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


B =

     7


C =

     4     6    13    20    22


D =

     8
    14
    20
    21
     2


m =

     2
     1
     5
     4
     3


n =

     1
     2
     3
     4
     5
 

%% V. MATLAB逻辑与流程控制
%%
% 1. if ... else ... end
A = rand(1,10)
limit = 0.75;

B = (A > limit);   % B的元素值是 0和 1的序列 ,符合就是1 不符合就是0
if any(B)%注意没用冒号,但是有缩进 if  any 表示如果所有 如果B中任何一个 为1 就打印 就是说为真的情况
  fprintf('Indices of values > %4.2f: \n', limit);%格式化  %长度.保留小数 浮点数类型f:0.75
  disp(find(B))%disp是显示的作用就是在窗口上显示()中的值  find()找出矩阵中为真的值
else
  disp('All values are below the limit.')
end%都要以一个逻辑词配一个end 而且缩进等级一样

%解:

A =

  1 至 8 列

    0.7232    0.3474    0.6606    0.3839    0.6273    0.0216    0.9106    0.8006

  9 至 10 列

    0.7458    0.8131

Indices of values > 0.75: 
     7     8    10

%%
% 2. for ... end
k = 10;
hilbert = zeros(k,k);    

for m = 1:k%  m 从1 到k 同样没有冒号
    for n = 1:k
        hilbert(m,n) = 1/(m+n -1);%有;表示不显示 
    end
end
hilbert%一行一行地遍历赋值

%解:

hilbert =

  1 至 8 列

    1.0000    0.5000    0.3333    0.2500    0.2000    0.1667    0.1429    0.1250
    0.5000    0.3333    0.2500    0.2000    0.1667    0.1429    0.1250    0.1111
    0.3333    0.2500    0.2000    0.1667    0.1429    0.1250    0.1111    0.1000
    0.2500    0.2000    0.1667    0.1429    0.1250    0.1111    0.1000    0.0909
    0.2000    0.1667    0.1429    0.1250    0.1111    0.1000    0.0909    0.0833
    0.1667    0.1429    0.1250    0.1111    0.1000    0.0909    0.0833    0.0769
    0.1429    0.1250    0.1111    0.1000    0.0909    0.0833    0.0769    0.0714
    0.1250    0.1111    0.1000    0.0909    0.0833    0.0769    0.0714    0.0667
    0.1111    0.1000    0.0909    0.0833    0.0769    0.0714    0.0667    0.0625
    0.1000    0.0909    0.0833    0.0769    0.0714    0.0667    0.0625    0.0588

  9 至 10 列

    0.1111    0.1000
    0.1000    0.0909
    0.0909    0.0833
    0.0833    0.0769
    0.0769    0.0714
    0.0714    0.0667
    0.0667    0.0625
    0.0625    0.0588
    0.0588    0.0556
    0.0556    0.0526

%% 
% 3. while ... end
n = 1;
nFactorial = 1;
while nFactorial < 1e100      % 1e100= 1.0000e+100  没有冒号
    n = n + 1;
    nFactorial = nFactorial * n;
end
n

factorial(69)%

用函数factorial(n)可计算阶乘

factorial(5) = 5!
factorial(10) = 10!

factorial(70)

prod(1:69)%

pord函数在MATLAB中是求乘的函数,将各元素相乘,下面介绍这个求乘函数的具体用法:

例如:B=prod(A);

代表着将A中不同维的元素相乘返还到B中;

prod(1:70)

%%
% 4. switch ... case ... end
mynumber = input('Enter a number:');

switch mynumber%没有冒号
    case -1%case是从-1开始的
        disp('negative one');
    case 0
        disp('zero');
    case 1
        disp('positive one');
    otherwise
        disp('other value');
end

%% VI. MATLAB脚本与函数文件
%%
% 1. 脚本文件
myScript%引用时写文件名即可

%%
% 2. 函数文件
mynumber = input('Enter a number:');
output = myFunction(mynumber)%引用时声明函数名

%脚本文件和函数文件的区别

%脚本文件
---回答如何解决一个任务,指出一堆命令按怎样的顺序依次执行完成一项任务;回答“how?”

函数文件---定义输出参数和输入参数的对应关系(函数关系),以方便在外部调用,回答“WHAT?”

MATLAB中有一种文件叫M文件,他就是一系列代码组成的一个扩展名为.m的文件,虽然M文件是简单的ASCII型的文本文件,但是和其语法和高级语言一样,是一种程序化的编程语言。
M文件可分为脚本文件(MATLAB scripts)和函数文件(MATLAB functions)。脚本文件是包含多条MATLAB命令的文件;函数文件可以包含输入变量,并把结果传送给输出变量,两者的简要区别如下:
脚本文件
1.多条命令的综合体
2.没有输入、输出变量
3.使用MATLAB基本工作空间
4.没有函数声明
函数文件
1.常用于扩充MATLAB函数库
2.可以包含输入、输出变量
3.运算中生成的所有变量都存放在函数工作空间
4.包含函数声明
脚本文件可以理解为简单的M文件,脚本文件中的变量都是全局变量。函数文件是在脚本文件的基础之上多添加了一行函数定义行,其代码组织结构和调用方式与对应的脚本文件截然不同。函数文件是以函数声明行“function...”作为开始的,其实质就是用户往MATLAB函数库里边添加了子函数,函数文件中的变量都是局部变量,除非使用了特别声明。函数运行完毕之后,其定义的变量将从工作区间中清除。而脚本文件只是将一系列相关的代码结合封装,没有输入参数和输出参数,即不自带参数,也不一定要返回结果。而多数函数文件一般都有输入和输出变量,并见有返回结果

%% VII. MATLAB基本绘图操作
%%
% 1. 二维平面绘图
x = 0:0.01:2*pi;
y = sin(x);
figure%画布
plot(x, y)%画画函数
title('y = sin(x)')%标题
xlabel('x')%x轴标签
ylabel('sin(x)')%y轴标签

xlim([0 2*pi]) %限制x轴的大小


 

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);%exp表示e
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
set(get(AX(1),'Ylabel'),'String','Slow Decay') 
set(get(AX(2),'Ylabel'),'String','Fast Decay') 
xlabel('Time (\musec)') 
title('Multiple Decay Rates') 
set(H1,'LineStyle','--')
set(H2,'LineStyle',':')

%解:

 具体函数介绍看块的下面

%%
% 2. 三维立体绘图
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
grid on
axis square %axis是指坐标轴的意思  axis square是将坐标轴变为1比1比例

axis = 0,表示第一个维度

axis = 1,表示第二个维度

axis = -1,表示最后一个维度

%解:

%%
% 3. 图形的保存与导出(图片的窗口的按钮很有用 相当地惊喜)

% (1) Edit → Copy Figure%就是在编辑栏哪里————>复制图片
% (2) Toolbar → Save
% (3) print('-depsc','-tiff','-r300','picture1')
% (4) File  → Export Setup

%% VIII. MATLAB文件导入
%%
% 1. mat格式
save data.mat x y1 y2%把已有的变量 x y1 y2 封装在data.mat文件中保存起来,保存之后在文件夹窗口中显示出data.mat

load data.mat %把文件data.mat从文件夹窗口区加载到工作区窗口中

%%
% 2. txt格式
M = importdata('myfile.txt');%导入文件

S = M.data;%查看文件数据
save 'data.txt' S -ascii%保存文件
T = load('data.txt');%加载文件赋值给T

isequal(S, T)%查看两个文件是否相同

%%
% 3. xls格式
xlswrite('data.xls',S)%将s文件数据写入data.xls 
W = xlsread('data.xls');%将data文件数据赋值给w
isequal(S, W)%看文件是否相等

xlswrite('data.xlsx',S)
U = xlsread('data.xlsx');
isequal(S, U)

%% 
% 4. csv格式
csvwrite('data.csv',S)
V = csvread('data.csv');%赋值就是把S文件数据摊开出来(阅读)赋值给别的文件
isequal(S, V)

1,乘和点乘 

1.1,在进行数值运算和数值乘矩阵时,

这两种没有区别,例如:a*b=a.*b; a*B=a.*B; B*a=B.*a(其中小写字母表示数值,大写字母表示矩阵)

1.2 ,在进行矩阵和矩阵运算时,

*表示普通的矩阵乘法,要求前面矩阵的列数等于后面矩阵的行数;

.*表示两个矩阵对应元素相乘,要求两个矩阵行数列数都相等。

例如A,B分别为两个矩阵,则:

A.*B表示的是两个矩阵的对应元素相乘,其中生成的同阶矩阵C的对应的矩阵元素为:C(i,j)=A(i,j)*B(i,j);

而如果A*B的话,则是正常的矩阵相乘,并非是对应的元素相乘。

例如:


2, 除与点除

2.1,数值运行时,这两种没有区别,例如:a/b=a./b 

2)数值在后,这两种一样:A/b=A./b 

2.3, 

A./B表示A矩阵与B矩阵对应元素相除,所以要求A,B行数列数相等

矩阵除矩阵,A/B可粗略地看作A*inv(B);

 在可逆形式下转换成逆矩阵,右除对右边矩阵逆,左除对左边矩阵逆。
        1.     C/B=C*(inv(B))  (C右除B等于C乘以B的逆)
        2.     A\C=inv(A)*C (A左除C=A的逆乘以C) 

if 与 循环 

 

 xlim函数

ylim(limits) 设置当前坐标轴或图表的 y 轴限制。将限制指定为窗体的两个元素向量 [ymin ymax], 其中 ymax 大于 ymin。

例子:

Plot a line and set the y-axis limits to range from -2 to 2.

x = linspace(0,10);
y = sin(x);
plot(x,y)
ylim([-2 2])

 

 一张画布画两张图的方法

 一块画布画两张图 一个用hold on(一副副地画) 一个用plotyy (同时画)

先看plotyy

找了好多双轴坐标系的,感觉都不全,而且都不够详细,综合和好几个画法,稍微总结一下。

先是第一种情况,双轴里面有两条线,一个轴对应一条线的。

 x=0:0.01:10;
y1=sin(x);
y2=10*cos(x);
y3=0.5*sin(x);
 
[AX,H1,H2]=plotyy(x,y1,x,y2,'plot');%双轴  [ax,h1, h2 ]ax表示共用x轴的函数 

h1表示共左边y轴的函数 h2 表示共右边y轴的函数,ax ,h1 ,h2 可以看成是序列的类型,因为共用同一轴的图可能有很多
set(AX(1),'XColor','k','YColor','M'); %X轴和第一个Y轴的颜色%set()函数就是为图画设置,这里是为共用x轴的第一幅画设置x轴的颜色和y轴的颜色
set(AX(2),'XColor','k','YColor','r'); %X轴和第二个Y轴的颜色%这里是设置第二副画
HH1=get(AX(1),'Ylabel');%get函数就是为画添加一些什么特点 ,这里是为共用x轴的第一幅画设置标签
set(HH1,'String','sin','color','M'); %第一个Y轴标签的的颜色,为新增的特点来设置具体的内容,get新增了一个标签,set则是为该标签添加字样和颜色
HH2=get(AX(2),'Ylabel');
set(HH2,'String','cos','color','r');%第二个Y轴标签的的颜色
 
set(AX(1),'ylim',[-1,1],'ytick',[-1,-0.5,0,0.5,1]); %定第一个Y轴的范围,ylim是坐标轴范围,ytick是将范围细化成具体的刻度。
set(AX(2),'ylim',[-10,10],'ytick',[-10,-5,0,5,10]); %定第二个Y轴的范围
 
set(H1(1),'LineStyle','-','linewidth',1.5,'color','M'); %y1的线型设置
set(H2,'LineStyle','-','linewidth',1.5,'color','r'); %y2的线型设置
 
legend([H1,H2],{'y1';'y2'});%为图画设置图例
xlabel('x');%设置标签

然后是三条线,其中两条线用左轴,第三条线用右轴。 

 

off 这一个方法吧

hold on和hold off

默认情况下,每次调用绘图函数、重置坐标区及其他元素以准备新绘图时,matlab都会清空图窗。要将绘图添加到现有图窗中,请使用hold on。在使用hold off或关闭窗口之前,当前图窗窗口中会显示所有绘图。

 x = -4:0.02:4
y1 = (x).^2
plot(x,y1,'--')
hold on %此刻落笔
x = -4:0.02:4
y2 = sin(x)
plot(x,y2,'r-')
legend('x^2','sin(x)')
grid on%表示绘画完成
hold off%此刻收笔

 

 上面的两种方法都可以在一张画布上画两幅图画

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值