MATLAB学习笔记(二)

1. MATLAB变量存储

注意保存时只需保存工作区变量和变量的值,无需保存执行的命令。

>> a = [1,2,3,4]

a =

     1     2     3     4

>> b = [10,20,30,40]

b =

    10    20    30    40

>> table = [a',b']

table =

     1    10
     2    20
     3    30
     4    40

>> save    //默认保存到matlab.mat中

正在保存到: E:\MATLAB\PROJECT\matlab.mat

>> load('matlab.mat')  //将保存的数据导入
>> save varname.mat  //自定义保存的文件名

>> save mynewfile a b  //将变量a,b保存至mynewfile.mat中
>> load('mynewfile.mat')   //加载a,b变量

>> save varname3.dat a b -ascii  
//以ascii格式保存,可以保存为dat或者txt格式,需要自己指定扩展名

>> save file_name.txt a b -ascii -double //高精度格式保存

2. 脚本M文件

1)用户可以在M文件中进行编码,并可以随时修改和重用,相当于C的源代码。
2)MATLAB的M文件可以利用窗口的缩进箭头运行,也可以使用

run myscirpt   //使用执行命令加文件名的形式
run('myscript')  //使用执行命令的函数形式

3)如果使用其他文本编辑器,则文件必须保存为ASCLL码格式,windows下的notepad即可。
4)文件名应当符合命名规则。
5)在命令窗口输入what命令可以查看当前路径下所有的M和MAT文件。

>> what
当前文件夹 E:\MATLAB\PROJECT 中的 
MATLAB Code files

lbf_N    
当前文件夹 E:\MATLAB\PROJECT 中的 
MAT-files

matlab         mynewfile      varname        varname2 

6)MATLAB使用%作为注释的标志。

3.MATLAB基本内置函数

>> x = 9;
>> b = sqrt(x)  %标量的平方根还是标量

b =

     3

>> x = [4,9,16];
>> b = sqrt(x)  %矩阵的平方根是矩阵

b =

     2     3     4

>> rem(10,3)  %余项函数,求余数

ans =

     1

>> d = [1,2,3;4,5,6];
>> f = size(d)   % 输出矩阵的行数和列数

f =

     2     3

4.MATLAB帮助功能

1)使用help命令

>> help
帮助主题:

matlabhdlcoder\matlabhdlcoder  - (没有目录文件)
matlab\testframework           - (没有目录文件)
matlabxl\matlabxl              - MATLAB Builder EX
matlab\demos                   - Examples.
matlab\graph2d                 - Two dimensional graphs.
matlab\graph3d                 - Three dimensional graphs.
matlab\graphics                - Handle Graphics.
matlab\plottools               - Graphical plot editing tools 
matlab\scribe                  - Annotation and Plot Editing.

2)使用helpwin命令可以打开一个HTML格式的帮助文件
3)使用help <topic>可以指定某一个函数的帮助信息。如查看sin函数的帮助信息

>> help sin
sin - Sine of argument in radians

    This MATLAB function returns the sine of the elements of X.

    Y = sin(X)

    sin 的参考页

    另请参阅 asin, asind, sind, sinh

    名为 sin 的其他函数
        fixedpoint/sin, symbolic/sin

4)输入doc sin可以弹出sin函数的HTML帮助手册,推荐使用此方法

5.初等数学函数

初等数学函数包括对数函数,指数函数,绝对值函数,四舍五入函数和离散数学中的函数。

函数用法实例
abs(x)求x的绝对值abs(-3)
sqrt(x)求x的平方根sqrt(86)
Nthroot(x,n)求X的N次方实数根,函数的输出结果不能是复数nthroor(-2,3)
sign(x)符号函数,输出为1,0或者-1sign(-8)
rem(x,y)求x/y的余数rem(25,4)
exp(x)计算e^xexp(10)
log(x)计算ln(x),自然对数log(10)
log10(x)计算lg(x),以10为底log10(10)

注:
其中大部分函数的输入可以使标量,矢量,也可以是矩阵
MATLAB没有提供通用的对数运算函数,其他数值的函数需要通过对数运算间接求得。

>> fix(9/4)  //取整函数,向下取整

ans =

     2

6.离散数学

常用函数如下(感觉命名是初等数学为什么说的这么高大上)

>> factor(12)  %对12进行因式分解

ans =

     2     2     3

>> gcd(10,15)  %求最大公约数

ans =

     5

>> lcm(2,5)  %求最小公倍数

ans =

    10

>> rats(1.5)  %用分数表示

ans =

      3/2     

>> factorial(8)  %阶乘计算

ans =

       40320

>> nchoosek(10,3)  %计算10中选3的组合数

ans =

   120

>> primes(10)  %找到小于10 的素数

ans =

     2     3     5     7

>> isprime(7)  %检查x是否是素数

ans =

     1

7.三角函数

绝大多数三角函数中的角变量用弧度表示

sin(x)
cos(x)
tan(x)
asin(x)  % 即arcsin(x)
sinh(x)  % 双曲正弦值
asinh(x) % 反双曲正弦值
sind(x)  % x用角度表示,计算正弦值
asind(x) % 计算反正弦值

8.数据分析函数

1)最大值和最小值
max函数用于求最大值,当为矩阵时,它将保留每列的最大值

>> x = [1,2,3,4,5];
>> max(x)

ans =

     5

>> x = [1,5,3;2,4,6];
>> max(x)

ans =

     2     5     6 

max函数可以用数组来保存最大值和最大值的位置

>> x = [1,5,3];
>> [a,b] = max(x)

a =
     5
b =
     2   %最大值的位置
>> 

max(x,y)可以用两个矩阵中相同位置的最大值创建一个新的矩阵

>> x = [1,5,3;2,4,6];
>> y = [10,2,4;1,8,7];
>> max(x,y)
ans =
    10     5     4
     2     8     7
>> 

min求最小值的使用方法与max基本相同。
2)平均值和中间值
求数组的平均值:

>> x = [1,5,3];
>> mean(x)
ans =
     3

求矩阵的平均值,等价于求每列的平均值组成一个新的矩阵:

>> x = [1,5,3;2,4,6]
x =
     1     5     3
     2     4     6
>> mean(x)
ans =
    1.5000    4.5000    4.5000 

求矩阵的中位数,即求每一列的中间值:

>> x = [1,5,3;2,4,6;3,8,4]
x =
     1     5     3
     2     4     6
     3     8     4
>> median(x)
ans =
     2     5     4

求矩阵的众数,即求列表中出现最多的数字:

>> x = [1,2,3,3];
>> mode(x)
ans =
     3

9.求和与乘积

1)cumsum函数用于把数组中前面的数累加,产生一个求中间和的新数组,主要用于序列的计算。

>> k = 1:5;
>> sequence = 1./k;
>> format rat             %用分数表示
>> sequence
sequence =
 1           1/2          1/3            1/4            1/5     
>> cumsum(sequence)
ans 
1           3/2         11/6           25/12         137/60    

2)sum函数用于矩阵时,返回的是每列求和后生成的一个新的矩阵

>> x = [1,5,3;2,4,6]
x =
       1              5              3       
       2              4              6       
>> sum(x)
ans =
       3              9              9       

3)prod用于求乘积,可用于数组或者矩阵

>> x = [1,2,3;2,3,4;3,4,5;5,6,7]
x =
       1              2              3       
       2              3              4       
       3              4              5       
       5              6              7       
>> prod(x)
ans =
      30            144            420       

4)cumprod可用于数组或矩阵,输出累积(累次乘积)

>> x = [1,5,3;2,4,6]
x =
       1              5              3       
       2              4              6       
>> cumprod(x)
ans =
       1              5              3       
       2             20             18       

10.排序

1)sort用于数组或者矩阵,用于矩阵时按列进行升序排列:

>> x = [1,5,3];
>> sort(x)
ans =
       1              3              5       
>> x = [1,5,3;2,4,6];
>> sort(x)
ans =
       1              4              3       
       2              5              6       

使用sort(x,'descend')可以实现降序排列。
2)sortrows(x,n)代表以第n列为标注实线升序排列,不指定n默认为第一列,在n前面加 - 号即可以实现降序排序
(该函数的作用是可以保持列与列之间的对应关系不改变)

>> x = [3,1,3;1,9,3;4,3,6];
>> sortrows(x)
ans =
       1              9              3       
       3              1              3       
       4              3              6       

3)size函数确定矩阵的行数和列数,length函数可以输出矩阵的最大长度

>> x = [1,5,3;2,4,6]
x =
       1              5              3       
       2              4              6       
>> size(x)
ans =
       2              3       
>> length(x)
ans =
       3        

11.方差和标准差

回顾一下正态分布:正态分布函数成钟形,有68%的数据在一倍标准差,有95%的数据在两倍标准差之内,有99%的数据在三倍标准差之内。通常,标准差和方差对于庞大的数据集才有实际意义。
标准差使用std求得,方差使用var求得,需要强调标准差和方差仅限于分析大规模数据集

>> score1 = [90,91,90,89,94,83,88,92,98,99];
>> score2 = [69,61,73,79,81,88,84,93,99,61];
>> std(score1)
ans =
    4.7188
>> std(score2)
ans =
   12.8651
>> var(score1)
ans =
   22.2667
>> var(score2)
ans =
  165.5111

12.随机数

MATLAB可以生成两种不同的随机数,均匀随机数和高斯随机数(正态分布)

函数用法
rand(n)产生一个0到1直接的n*n的均匀随机数矩阵
rand(m,n)产生一个0到1直接的m*n的均匀随机数矩阵
randn(n)产生一个均值为0方差为1的n*n高斯随机数矩阵
randn(m,n)产生一个均值为0方差为1的m*n高斯随机数矩阵

example:
首先生成0-1之间的随机数,随后乘以5扩展为0-5之间,再加5扩展为5-10之间

>> r = rand(5,1)
r =
    0.6557
    0.0357
    0.8491
    0.9340
    0.6787
>> r = r * 5
r =
    3.2787
    0.1786
    4.2456
    4.6700
    3.3937
>> r = r + 5
r =
    8.2787
    5.1786
    9.2456
    9.6700
    8.3937

example
创建一个均值为0方差为1的高斯随机数的3*3矩阵

>> randn(3)
ans =
    1.0347    0.2939   -1.1471
    0.7269   -0.7873   -1.0689
   -0.3034    0.8884   -0.8095

example
创建一个数据集,由10个服从高斯随机分布的数据构成,数据集的均值是3,标准差是2.5

>> x = randn(2,5) * 2.5 + 3
x =
   -4.3607    6.5960    3.8130    1.1127    6.4257      
   -1.2788    2.7444    2.3964    3.7980    3.7821 

13.复数

输入复数是推荐使用complex函数
example:输入单个复数

>> A  = complex(5,3)
A =
   5.0000 + 3.0000i

用real和imag可以区分复数的实部和虚部:

>> real(A)
ans =
     5
>> imag(A)
ans =
     3

用isreal可以判断变量是否为实数,是实数则返回1,否则返回0

>> isreal(A)
ans =
     0

用conj或者转置运算求共轭复数

>> conj(A)
ans =
   5.0000 - 3.0000i
>> A'
ans =
   5.0000 - 3.0000i

用复数的加法运算和乘法运算产生一个复数数组B

>> B = [A,A+1,A*3]
B =
   5.0000 + 3.0000i   6.0000 + 3.0000i  15.0000 + 9.0000i

example: 生成复数数组

>> x = 1:3;
>> y = [-1,5,12];
>> complex(x,y)
ans =
   1.0000 - 1.0000i   2.0000 + 5.0000i   3.0000 +12.0000i

复数通常用直角坐标上的点来描述,横坐标代表实部,纵坐标代表虚部。MATLAB提供将复数从直角坐标转换为极坐标的函数。
用绝对值函数对复数进行运算可以得到复数的模,等价于利用勾股定理计算半径

>> abs(A)
ans =
    5.8310

利用angle可以计算复数的角度,计算结果用弧度表示

>> angle(A)
ans =
    0.5404

当操作的是一个复数数组时,如下:

>> B
B =
   5.0000 + 3.0000i   6.0000 + 3.0000i  15.0000 + 9.0000i
>> abs(B)
ans =
    5.8310    6.7082   17.4929
>> angle(B)
ans =
    0.5404    0.4636    0.5404

14.计算的极限

计算机程序所能处理的数据是有限的。

>> realmax   %最大浮点数
ans =
  1.7977e+308
>> realmin  %最小浮点数
ans =
  2.2251e-308
>> intmax   %最大整数
ans =
  2147483647
>> intmin   %最小整数
ans =
 -2147483648

如果超出上述范围可能会发生溢出。
上溢:计算结果超出了计算机的处理范围
下溢:计算结果太小,程序认定为0
应该避免出现上溢或者下溢

15.特殊值

>> pi    % 常数
ans =
    3.1416
>> i     % 虚数
ans =
   0.0000 + 1.0000i
>> j     % 虚数
ans =
   0.0000 + 1.0000i
>> Inf   % 无穷大,数据溢出或者除数为0时的输出
ans =
   Inf
>> NaN   % 非数,当计算没有被定义时发生
ans =
   NaN
>> clock  % 当前时间
ans =
   1.0e+03 *
    2.0150    0.0050    0.0150    0.0160    0.0180    0.0119
>> fix(clock)  % 当前时间,增加可读性,【年,月,日,时,分,秒】
ans =
        2015           5          15          16          18          38
>> date    % 时间,返回的日期采用字符串格式
ans =
15-May-2015
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值