Matlab笔记(一)

本文最后更新于:2021年7月11日 晚上

一、变量与函数

(一)变量:

命名规则:

  • 不含空格
  • 区别大小写
  • 不超过19个字符
  • 变量名必须以字母开头,之后可以为数字、字母、下划线,不能使用标点符号

特殊变量表:

  • ans:表示结果
  • pi:圆周率
  • eps:计算机的最小数,+1产生大于1的数
  • flops:浮点运算数
  • Inf:无穷大,如1/0
  • NaN:不定量,如0/0
  • i,j:虚根,i=j=$\sqrt{-1}$
  • nargin:所有函数的输入变量数目
  • nargout:所有函数的输出变量数目
  • realmin:最小可用正实数
  • realmax:最大可用正实数

(二).数学运算符号及标点符号

+,-,*,/ .*:点乘运算,及矩阵对应元素相乘之后相加 ./:点除运算 ^:幂运算 .^:点幂运算 \:左除运算 (1)MATLAB的每条命令后,若为都好或无标点符号则显示命令的结果;若命令后为分号,则禁止显示结果 (2)”%”后面所有文字为注释 (3)”…”表示续行

(三)数学函数

(四)M文件

类似于c++的头文件,用于储存编写的函数,后缀为M的文件,这类文件的第一行必须是特殊字符 function 开始,格式为:

1
function 因变量名 = 函数名(自变量名)

函数值的获得必须通过具体的运算实现,并赋给因变量。 M文件建立方法: 1.在Matlab中,点:File->New->M-file 2.在编辑窗口中输入程序内容 3.点:File->Save,存盘,M文件必须与函数名一致 Matlab的应用程序也以M文件保存

二、数组

(一)创建简单的数组

x = [ a b c d e f] 创建包含指定元素的行向量 x = first:last 创建从first开始,加数为1,last结束的行向量 x = linespace(first, last ,n) 创建从first到last,中间有n个元素的行向量 x = logspace(first, last, n) 创建从开始,到结束,有n个元素的对数分隔行向量

(二)数组元素的访问

1.访问一个元素:x(i) 访问数组x的第i个元素,i从1开始 2.访问一块元素:x(im:in) 访问冲im到in的元素 3.直接使用元素编址序号:x([i_1,i_2,i_3……]) 访问数组x的第i1到in个元素

(三)数组的方向

分号分隔一行,逗号分隔一个元素 直接产生列向量:c = [1 ; 2 ; 3 ; 4] 转置产生列向量:b = [1 2 3 4]; c = b’

(四)数组的运算

1. 数组和标量运算

数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算。 设:a = [a1,a2,a3……,an], c = 标量 则:

1
2
3
4
5
6
7
8
9
10
11
a+c = [a1+c, a2+c,……,an+c]

a.*=[a1\* c, a2\*c,……,an\*c]

a./c=[a1/ c, a2/c,……,an/c]

a.\c=[c/a1, /a2,……,c/an]

a.\^c=[a1\^ c, a2\^c,……,an\^c]

c.\^a=[c\^a1,c\^a2,……,c\^an]
2.数组和数组运算

当两个数组有相同维数时,加、减、乘、除、乘方运算可按元素对元素方式进行,不同大小或维数的数组是不能进行运算的。 设:a=[a1,a2,……,an], b=[b1,b2,……,bn] 则:

1
2
3
4
5
6
7
8
9
10
11
a+c = [a1+b1, a2+b2,……,an+bn]

a.*=[a1\* b1, a2\*b2,……,an\*bn]

a./c=[a1/ b1, a2/b2,……,an/bn]

a.\c=[b1/a1, b2/a2,……,bn/an]

a.\^c=[a1\^ b1, a2\^c2,……,an\^bn]

c.\^a=[b1\^a1,b2\^a2,……,b\^an]

三、矩阵

(一)矩阵的建立

都好或空格用于分隔某一行的元素,分号用于区分不同行。除了分号,在输入矩阵时,按Enter键也表示开始新的一行。输入矩阵时,严格要求所有行有相同的列。 例: p = [1 1 1 1; 2 2 2 2; 3 3 3 3] p = [1 1 1 1 ​ 2 2 2 2 ​ 3 3 3 3] 特殊矩阵的建立

1
2
3
4
5
6
7
8
9
a = []    %生成空矩阵,当对一项操作无结果是,返回空矩阵,大小为零

a = zeros(m, n) %生成m行,n列的零矩阵

a = ones(m, n) %生成一个m行,n列的元素全为1的矩阵

a = eye(m, n) %生成一个m行,n列的单位矩阵

a = rand(m, n) %生成一个m行,n列的随机矩阵

(二)矩阵中元素的操作

  1. 矩阵A的第r行:A(r,:)
  2. 矩阵A的第r列:A(:,r)
  3. 取m行,n列元素:A(m, n)
  4. 依次提取矩阵A的每一列,将A拉伸为一个列向量:A(:)
  5. 取矩阵A的第1₂行、第i1-j2列构成新矩阵:A(i1:i2,j1:j2
  6. 以逆序提取矩阵A的第i1-i2行,构成新矩阵:A(i2 :-1 : i1 , :)
  7. 以逆序提取矩阵A的第jz列,构成新矩阵:A(:, j2~ :-1:j1
  8. 删除A的第i记行,构成新矩阵:A(i1:i2,:)=[]
  9. 删除A的第j1-j2列,构成新矩阵:A(:,j1 :j2)=[]
  10. 将矩阵A和B拼接成新矩阵:[A B];[A;B]

(三)矩阵的运算

  1. 标量矩阵运算 同标量-数组运算
  2. 矩阵和矩阵运算
  • 元素对元素的运算,同数组-数组的运算
  • 矩阵运算:
    • 矩阵加法:A+B
    • 矩阵乘法:A*B
    • 方阵的行列式:det(A)
    • 方阵的逆:inv(A)
    • 方阵的特征值与特征向量:[V, D]=eig[A]

四、关系与逻辑运算

五、控制流

MATLAB提供三种决策或控制流结构:

  • for循环
  • while循环
  • if-else-end结构

这些结构经常包含大量的MATLAB命令,故经常出现在MATLAB程序中,而不知直接加在MATLAB提示符下。

(一)for循环

允许一组命令以固定的和预定的次数重复

1
2
3
for x=array
{commands}
end

在for和end语句之间的命令串{commands}按数组(array)中的每一列执行一次。在每次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(: , n)

(二)while循环

允许一组命令以不定次数重复

1
2
3
while expression
{commands}
end

只要表达式里express的所有蒜素为真,就执行while和end语句之间的命令串{commands}

(三)if-else-end结构

  1. 有一个选择的一般形式是:
    1
    2
    3
    4
    5
    if express
    {commands}
    else
    {commands}
    end
    如果在表达式express里的所有元素为真就执行if和end语句之间的命令串{commands}
  2. 一般形式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if express
    {commands}
    else if express
    {commands}
    else if express
    {commands}
    …………
    else
    {commands}
    end

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function y=BubbleSort(x)
x_len=length(x);
for i=1:x_len-1
for j=1:x_len-i
if(x(j)>x(j+1))
[x(j),x(j+1)]=swap(x(j),x(j+1));
end
end
disp([num2str(i),'.Sort:x=',num2str(x)]);
end
y=x;
end
function [a,b]=swap(x,y)
a=y;
b=x;
end

1
2
function y = fun1(x,y)
y = x*x + sin(x*y) + 2*y;
1
2
3
4
5
6
7
8
function highsum = high()
h = 100;
summary = 0;
for i=1:10
summary = summary + h
h = h/2
end
highsum = summary;
1
2
3
4
function maxmatrix = max_matrix(x)
x
[x,y] = find(x==max(max(x)))
maxmatrix = max(max(x));
1
2
function f = sum_factorial(x)
f = sum(factorial(1:x))

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!