首页 > 其他分享 >matlab基础知识汇总大全

matlab基础知识汇总大全

时间:2022-09-27 15:47:42浏览次数:53  
标签:10 函数 元素 矩阵 基础知识 matlab fun 大全

  • format long 、 format short 显示结果的更多位小数

    作用是控制输出显示的格式

  • vpa()函数变精度

    vpa(pi,10)
    ans =
    3.141592654
    
  • inline()函数 可以将字符串转换成语句

>> f = inline('1/x - (x-1)')
f =
     内联函数:
     f(x) = 1/x - (x-1)
>> feval(f,1)
ans = 1
  • 简单绘图函数ezplot()
a = 1     2     3     4     5
>> b  = poly2sym(a)
b =x^4 + 2*x^3 + 3*x^2 + 4*x + 5
>> ezplot(b)
>> ezplot(b,2,8)%2和8表示x轴的范围
  • 简单绘制一个黄金分割比的矩形

    %%绘制黄金分割比的矩阵
    phi = (1 + sqrt(5))/2
    x = [ 0 phi phi 0 0]
    y = [ 0 0  1 1 0]
    u  = [1 1]
    v = [0 1]
    plot(x,y,'b',u,v,'b--')
    text(phi/2,1.05,'\phi')%接下来这几行都是设置注释的
    text((1 +phi)/2,-.05,'\phi- 1')
    text(-.05,.5,'1')
    text(.5,-.05,'1')
    axis equal%使x轴和y轴显示的比例一致
    axis off%关闭坐标轴的显示
    set(gcf,'color','white')
    
  • 计算几行代码运行所花的时间 tic 、(中间这一块放代码)toc

    >> tic,figure,toc
    时间已过 0.034370 秒
    
  • round()四舍五入函数

    >> round(pi)
    ans = 3
    
  • magic()幻方矩阵、每行每列和都是 sum(1:n)/n

    >> magic(3)
    ans =
         8     1     6
         3     5     7
         4     9     2
    
  • diag() 求对角矩阵、 diag(x,n)——对角矩阵(取对角矩阵上某个对角上的数据)x是要去的矩阵对象,n是第几条对角线

    a =
         1     2     3
         4     5     6
         7     8     9
    >> diag(a)%默认取主对角线上的元素
    ans =[ 1 5 9]’
    
    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
    >> diag(a,3)%向上数为正
    ans =
         8
        16
    >> diag(a,-3)%向下数为负
    ans =
        10
        18
    
  • format rat 将结果显示成分数有(用有理数表示)

    format rat
    >> sin(pi/4)
    ans = 985/1393 
    
  • norm () 矩阵范数

    矩阵的范数求法:将每列元素相加,并取结果最大的数作为范数
    >>magic(3)
    a = magic(3)
    a =
           8              1              6       
           3              5              7       
           4              9              2       
    >> b = norm(a)
    b = 15     
    
  • eig()特征值

    * 矩阵A的特征值求法:
      求|A - λE|的行列等于零时λ的值即为特征值
    * 特征向量:
     |A - λE| = 0作为系数矩阵,将特征值分别代入求得的基础解系
     a =
           1              2              3 
           4              5              6 
           7              8              0       
    >> e = eig(a)%返回一个列向量
    e =
        2170/179   
        -769/1980  
        -648/113  
        
     [V,D] = eig(A)
    返回特征值的对角矩阵 D 和矩阵 V,其列是对应的右特征向量,
    使得 AV = VD。
    >> [M,N]  = eig(a)
    
    M =
        -513/1711     -1019/1364      -413/1495  
        -445/629        959/1457      -745/1918  
       -2951/4611       -55/591        778/885   
    
    N =
        2170/179          0              0       
           0           -769/1980         0       
           0              0           -648/113  
    
  • svd()奇异值

  • 交换矩阵的某几列元素

    a = 1              2              3       
        4              5              6       
        7              8              9     
        
    b = a(:,1)%表式拿出矩阵a中所有行的第一个元素(即第一列元素)
    c = a(:)%表示那拿出所有行元素并组成一个列向量
    >> a = a(:,[2 1 3])
    a = 2              1              3       
        5              4              6       
        8              7              9 
    
  • char() 函数将输入的数值转成ascii对应的字符

    a =
          65             66             67             68             69     
    >> char(a)
    ans ='ABCDE'
    
  • 将一串字符转换成数值可用double()函数

>> a = '0123456789'
a = '0123456789'
>> double(a) - '0'%double分别返回每一个字符对应的数值再减去字符0对应的数值
ans =  0     1     2     3     4     5     6     7     8     9
  • 计算余数rem(m,n) 余数符号与m相同

  • mod(m,n) 余数符号与n相同

    >> a = [27 -27 27 -27];
    >> b = [10 10 -10 -10];
    >> a = [27 -27 27 -27]';
    >> b = [10 10 -10 -10]';
    >> t = [a b rem(a,b) mod(a,b)]
    t =27    10     7     7
      -27    10    -7     3
      27   -10     7    -3
      -27   -10    -7    -7
    
  • 创建函数、函数的创建(函数定义、定义函数)

    function [输出] = 函数名(输入)
    
  • 函数句柄

f = @(x)(3*x^3 + 4*x + 5)%函数句柄对应的语法
>> f(10)
ans = 3045
fun  = @(a,b,c,d,e)@(x)[sin(a*x(2)) - x(3)*cos(b*x(1));x(3)*sin(c*x(1)) - cos(d*x(2));  e*sin(b*x(1))];
fun(a,b,c,d)
  • 打印提示语句函数 disp(‘需要输出的提示语句’)

  • 求模、范数函数norm()

    * 如果A为矩阵 n=norm(A)返回A的最大奇异值,即max(svd(A)) 
    * n=norm(A,p)
    根据p的不同,返回不同的值
    p 返回值
    1 返回A中最大一列和,即max(sum(abs(A))
    2返回A的最大奇异值,和n=norm(A)用法一样
    
  • 取整函数

    (1)round( ),取接近的整数,四舍五入。
    (2)floor( ),向下取整,高斯取整,不大于X的最大整数。
    (3)ceil( ),向上取整,大于X的最小整数。
    (4)fix( ),向0取整,X大于0时与floor( )功能一样,X小于0时与ceil( )功能一样
    
  • 求矩阵中非零元素的个数nnz():number of nonzeros

    a = [1 2 3;4 5 0]
    nnz(a) 
    >>5
    
  • 求矩阵的行数和列数size()

    d = size(X)
    返回数组X每一维的大小,其中d是一个向量,元素个数为ndims(X)。如果X是一个标量(在MATLAB也就是一个1行乘以1列的数组),size(X)将返回[1 1]。
    [m,n] = size(X)
    返回矩阵X的尺寸信息, 并存储在m、n中。其中m中存储的是行数,n中存储的是列数。
    
  • prod()函数

    B = prod(A)
    这种用法返回数组A中各维元素的乘积。
    * 如果A是一个m行一列的(向量),则这种用法即返回这m个元素的乘积;
    * 如果A是一个m行n列的矩阵,则A的每一列都被看做一个m行1列的向量,分别计算每个向量中元素的乘积,返回给B,因此B是一个1行n列的数组。
    >> a = magic(3);
    >> b = a(:,1);
    >> prod(b)
    ans =96  
    
  • find()函数的用法

    * b=find(a),a是一个矩阵,查询非零元素的位置,如果X是一个行向量,则返回一个行向量,否则,返回一个列向量。
    a =
           1              2              3       
           4              0              6       
    >> b = find(a)
    b =
           1       
           2       
           3       
           5       
           6   
    
  • 使用reef对函数进行简化(缩减行梯形格式)

    >> A = [1 2 3;2 4 7;2 1 4];
    >> b = [1;3;4];
    >> c = rref([A b])
    c =
     1.00       0       0          0.6  
     0         1.00     0         -1.33      
     0          0       1.00       1.00
    
    

    matlab程序设计

  • 查询工作空间中的变量名who

  • 常见的整数操作函数

    * ceil 向正无穷大方向取整
    * floor 向负无穷大方向取整
    * fix 向0取整
    * round 四舍五入取整
    * isinteger 判断输入是否为整数
    * mod 求模
    >> mod([1, 2, 3, 4, 5], 2)
    ans = 1 0 1 0 1
    * rem 求余数
    
    • 矩阵求模函数
    1、矩阵的模也是矩阵的范数,简单来说就是矩阵中每个元素的平方和再开方。
    >> a = [1 2 3];
    >> norm(a)
    ans = 3.741657386773941
    
    • 构造复数函数complex(a,b)
    complex(1,2)
    ans =1.0000 + 2.0000i
    
* 字符串操作

```matlab 
* lower 将字符串全部转换成小写
* upper 将字符串船全部转化成大写
...
  • 元胞数组的创建(可以用于存放不同的数据类型)

    元胞数组里可以存储不同类型的数据

    * 创建方式1
    c1 = {'matlab',magic(3),complex(3,4),{'one',1}}
    c1 =1×4 cell 数组
    {'matlab'}    {3×3 double}    {[3.0000 + 4.0000i]}    {1×2 cell}
    
    * 创建方式2
    >> a = cell(2,2)%创建2 x 2 的数组
    a = 2×2 cell 数组
        {0×0 double}    {0×0 double}
        {0×0 double}    {0×0 double}
        >> a{1,1} = 'nice';
        
    >> a{1,2} = magic(3)
    a = 2×2 cell 数组
        {'nice'    }    {3×3 double}
        {0×0 double}    {0×0 double}
    

    注意:cell(m,n)和cell{ }的含义不一样

    cell()返回m,n 位置上的元胞 cell{ } 返回m,n 元胞上的数据


结构体

* 结构体的创建用.可以存储不同的数据类型  
    >> student1.name = 'jason
    >> student1.age = 18
    >> student1.school = 'peak'
    name: 'jason'
    age: 18
    school: 'peak'
    
* 利用struct()函数创建结构体数组
>> student = struct('name','jason','age',18,'school','北京大学')
   student = 包含以下字段的 struct:
   name: 'jason'
   age: 18
   school: '北京大学'
   同样可以创建多维数组
   >> student2 = struct('name',{'jason','tony','kven'},'age',{11 ,12 ,13},'addres',{'北京','上海','天津'})
student2 = 
  包含以下字段的 1×3 struct 数组:%看你的元胞如何书写的用逗号表示行向量用;表示列向量
    name
    age
    addres

>> student2(2,1).addres %结构体通过.的方式索引
ans = '上海'
  • 表格类型数据(表格函数的使用table)
>> gendrt = {'m';'f';'m'};
age = [23; 24; 25];
grades = [78 49 45;41 45 45; 78 65 4];
t1 = table(gendrt,age,grades,'RowNames',{'jason','tony','kven'})
t1  3×3 table
             gendrt    age        grades    
             ______    ___    ______________
    jason     'm'      23     78    49    45
    tony      'f'      24     41    45    45
    kven      'm'      25     78    65     4
  • 数组的索引

    对于一个m x n 的矩阵
    a =
         1     2     3     4
         4     5     6     8
         9     5     4     8
         7     5     4     1
    * 全下标索引
    直接写出元素在矩阵中的位置例如
    a(1,2)= 2  、a(2,3)= 6
    * 单下标索引
    将元素按照先左后右的方式进行排序则每个元素的编号位置为:s = (j-1) x m +i
    * matlab提供了两种下标的转化函数sub2ind 、 ind2sub
    
    IND = sub2ind(size,I1,I2,I3,I4....In)
    [I1,I2,I3,I4....In] = ind2sub(siz,IND)
    
    >> i = [3 1 2 3];%在本段程序中代表行
    >> j = [1 2 2 2];%在本段程序中代表列
    >> ind1 = sub2ind([3,3],i,j]%[3,3]代表一个3x3的矩阵,i和j 构成索引
    ind1 = 3     4     5 	6%返回单下标索引的值   
    
  • 多项式的构造

    poly2sym(X) 和poly2str(X,"x")
    >> a = [1 2 3 4];
    >> poly2sym(a)
    ans = x^3 + 2*x^2 + 3*x + 4
    
    poly()函数根据多项式的根构造多项式
    >> a = [1 2 3];
    >> b = poly(a)
    b = 1    -6    11    -6
    >> c = poly2sym(b)
    c =x^3 - 6*x^2 + 11*x - 6
    

符号运算

* 符号常量的创建
S = sym(A,flag) %其中A是数值常量,flag指定数值常量的输出格式
flag的常用值:
'f' 最接近的浮点数表示
'r' 最接近的有理数表示(带分数、根号、pi等)
'e' 带估计误差的有理表示
'd' 最接近的十进制浮点数表示

* 符号变量的创建
matlab通过sym 、syms实现

程序控制流

1、 程序输入
	x = input('请输入内容:') %  可输入任何类型
	x = input('请输入:','s')% "s"指定输入的内容为字符串
	
 2、程序的暂停
 	pause(n) %程序暂停运行n秒
 
 3、程序的输出
 	disp(x)  %输出x的值到窗口
 	fprintf(fileID,formatspec,A1,A2,...An)
 	
 4、程序的提前终止
 	return
 	
 5、程序的报错和警告
 error('message')
 error('format_message',a1,a2,......)
  • eval ()函数 :将括号里面的字符串视为语句并执行

  • 试探结构(异常捕获)

    try 
    	语句段1
    catch [exception] %方括号表示里面的内容可省略
    	语句段2
    end
    
    

    数值分析概述

    • 求定积分、不定积分的解析解函数int

      syms x
      y = 1/(1 + x^3);
      Y = int (y,1,1/2)%求函数y在[1,1/2]上的积分
      
      >> y = sin(x);
      >> F = int(y,x)
      F =-cos(x)
      
    • 泰勒展开公式taylor(因变量,自变量,‘order’,需要展开的阶数)

      syms x
      y = 1/(1 + x^3);
      yt = taylor (y,x,'order',6)%将y函数进行5阶泰勒展开(最高次数为5)
      Y = int(y,x,'order',6)%将泰勒展开的函数求定积分
      
      * 'Order':指定截断参数,对应值为一个正整数。未设置时,截断参数为6,即展开式的最高阶为5。
      
    • 精度控制函数,控制输出的精度vpa()函数

      >> a = vpa(pi,4)%输出结果保留四位有效数字
      a = 3.142
      
    • nargin、nargout函数

      * nargin为“number of input arguments”的缩写。 在matlab中定义一个函数时, 在函数体内部, nargin是用来判断输入变量个数的函数。
      * nargout的作用是在matlab中定义一个函数时, 在函数体内部, nargout指出了输出参数的个数(nargin指出了输入参数的个数)。
      
    • feval(fun,x)

      feval()函数执行指定的函数。也就是说,将想要执行的函数以及相应的参数一起作为feval()的参数,feval()的输出等于想要执行的函数的输出。
      
      >> f = @(x,y)(sin(x) + cos(y));
      F = feval(f,[pi/2 pi],[pi/2 pi])
      F =  1.0000   -1.0000
      

    MATLAB图形与动画

    • figure创建画布

    • [x,y] = ginput(n) %x,y表示鼠标获取的点坐标 n表示获取点的个数

    • subplot(m,n,p)在同一个绘图窗口中绘制多个图形

    • fplot(f,[m,n])函数(绘图)

      f = @(x)sin(3*x^2 + 2*x + 3)
      fplot(f,[0,10])%绘制f函数的曲线图
      

matlab数值计算

  • 创建矩阵的方法规则:

    • 矩阵元素必须用[ ]扩起来 如a = [1,2,3]
    • 矩阵元素必须用逗号或空格分隔 如 b = [4,5,6]
    • 在括号[ ]内矩阵的行与行之间必须用逗号分隔如v = [1,2,3;4,5,6]
  • 矩阵元素

    • 矩阵元素可以是数,也可以是表达式例如a = [1,2,3;4,3,4] 、x = [2 pi/2 ;sqrt(3) 3+4]
  • 符号的作用

    1、逗号和分号的作用
    	* 逗号和分号可以作为指令间的分隔符,matlab允许多条语句在同一行出现
        *分号如果出现在指令后,屏幕上将不显示结果 
        *当一个指令太长时可以用...续行
    2、冒号的作用
    	*用于生成等间距的向量,默认间隔是1,你可以自定义向量的间隔例:a = [1:0.1:4] 结果是长度为40间隔为0.1的向量
        
        * 用于选出矩阵指定行、列及元素
            例如:a = [1 2 3;4 5 6;7 8 9]	
            a(1,:)表示取出第一行所有元素
            a(:,2)表示取出第二列所有元素
            a(:)表示取出所有的元素,并组织成一个列向量
        	a(2:3)表示将a所有元素排列成列向量取2、3两元素
        *用于表示一定的范围
        	a = [1 2 3;4 5 6;7 8 9] a(1:2,3)表示取出一到二行的第三个元素
        
        *生成等差数列
        	a = 1:2:9	%% 1 3 5 7 9
        
        *循环语句
        sum1 = 0
        for i = 1:0.1:5
        	sum1 += i
        end
    

    用matlab函数创建矩阵

    * 空矩阵a = [	]
    * rand()---随机矩阵(元素0~1)
    	rand(n)生成一个nxn的随机矩阵
    * eye()---单位矩阵
    * zeros()---全部元素都为0的矩阵
    * ones()---全部元素都为1的矩阵
    

    matlab 严格区分大小写 matlab 函数名必须小写


    矩阵的修改

    1、通过指令修改
    	a = [1,2,3;4,5,6;7,8,9]
    	a(3,3) = 10 
    

    数据的保存与获取

    • save ——将工作空间的所有变量存到文件

    • save date——将工作空间中的所有变量存到文件中

    • save date a b ——将工作空间中的a 和 b 变量存到文件中

    • 再次需要使用时用load指令调用已经生成的mat文件、

      注意:save 和 load配合使用 有函数和命令方式调用 函数方式必须带括号和引号

image-20220901161704015

矩阵的运算

1、矩阵加减法的运算法则
	* 相加减的矩阵必须是相同大小的(允许其一时标量:数字) 且为对应位置元素大小相加减
	
2、矩阵的乘法运算
	* A 矩阵的列必须和B矩阵的行数相同
	* 标量(数字)可以与任何矩阵相乘
3、矩阵的其他运算
	inv()——矩阵求逆
	det()——行列式的值
	eig()——矩阵的特征值
	diag(x,n)——对角矩阵(取对角矩阵上某个对角上的数据)x是要去的矩阵对象,n是第几条对角线
	()’——矩阵转置
	sqrt()——矩阵开方 相当与每个元素开方
4、矩阵的特殊操作
	* 矩阵的变维 a = [1:12];b = reshape(a,3,4)	c =zeros(3,4);c(:)  = a(:)
	
	* 矩阵的变向	
    rot90:旋转(默认逆时针)	
    rot90(x,n),其中x表示一个矩阵,n为正整数,默认功能:将矩阵x逆时针旋转90*n度,形成新矩阵,x本身不变。
	fliplr:上翻	
	flipud:下翻
	
	
	
	*矩阵的抽取	diag:抽取主对角线;	tril:抽取主下三角;	triu:抽取主上三角
	
	* 矩阵的扩展
	
	

矩阵运算符

* 数组加减(.+	.- ) 
	对应元素相加减(与矩阵加减等效)

*数组乘除(.*  ./   .\) 
	.\  表示和面的除以前面的
	使用上述运算符必须保证两个数组的大小相当

* 矩阵除(\,/)运算

	\左除  /右除
	A\B 为方程AX = B的解
     B/A 为方程XA = B的解(小技巧,A在前面方程中就在前面、在后面方程中就在后面)
     A\B = inv(A)*B
     而B/A = B*inv(A)
     B/A = (A’\B’)’
	
	
* 数组乘方.^ 
	对应元素相乘方
a =
     1     1     1
     2     2     2
     3     3     3
b = a .^ a
     1     1     1
     4     4     4
    27    27    27
    
* 矩阵的次幂^
a =
     1     2     3
     4     5     6
     7     8     8
a^2 =
    30    36    39
    66    81    90
    95   118   133

矩阵标识和子矩阵

image-20220901191635887

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
 B1 = B(1:2,[1 3 5])
    17     1    15
    23     7    16 
B2 = B([3 1],:)
    4     6    13    20    22
    17    24     1     8    15
B([1 3],[2 4]) = zeros(2)%替换B中指定位置的数值
    17     0     1     0    15
    23     5     7    14    16
     4     0    13     0    22
    10    12    19    21     3
    11    18    25     2     9

matlab多项式

matlab 把多项式表达成一个行向量 其中的元素是按照降幂的方式排列的

f(x) = anxn + an-1xn-1 + an-2xn-2 + ……. a1x1 + a0x0

可用行向量p = [an an-1 an-2 an-3…….. a1 a0] 表示

poly——产生特征多项式系数向量

  • 特征多项式一定是n+1维度的
  • 特征多项式第一个元素一定是1

image-20220901201814949

特殊的应用矩阵

  • 约当阵——将状态空间模型转换为约当标准型

    [V,J] = jordan(a) J为约当标准型,V为相似变换阵

    语法:jordan()

  • 伴随矩阵——将状态空间模型转换为可控标准型

    语法:compan()

常用的矩阵函数

* det(A)	方阵A的行列式
* eig(A)	方阵A的特征值和特征向量
* rank(A)	矩阵A的秩
* trace(A)	矩阵A的迹
* expm(A)	矩阵的指数e^A
* sqrtm(A)	矩阵的平方根
* funm(A,'fun') 求一般的方阵函数

image-20220901194456453

a =
    0.1000    0.2000    0.3000
    0.4000    0.5000    0.6000
    0.7000    0.8000    0.9000
funm(a,'sin')
    0.0315    0.1157    0.1999
    0.2446    0.3091    0.3735
    0.4577    0.5024    0.5471


  • conv 、convs多项式相乘

image-20220901204416137

  • deconv 多项式相除

image-20220901204500983

  • 有理多项式求导

image-20220901221943912

  • 多项式的展开与组合

    image-20220901222456114

矩阵的加减法

  • 只有大小相同的两个矩阵才能相加

    function[poly] = polyadd(poly1,poly2)
    if length(poly1) < length(poly2)
            short = poly1;
            long = poly2;
    else
            short = poly2;
            long = poly1;
    end
    mz = length(long) - length(short);
    if mz > 0
        poly = [zeros(1,mz),short] + long;%将前后两个矩阵大小变成一样
    else 
        poly = long + short;
    end
    

求多项式在某点的值polyval

image-20220902104014924

求区间均匀分布的函数 linspace(左区间,右区间,均匀分布的个数)

image-20220902104551587

多项式求根roots()函数

image-20220902105343143

将特征向量表示成多项式 “poly2str(特征多项式,‘自变量’)”

>> a = [1 2 3 4];
>> b = poly2str(a,'x')
b =
    '   x^3 + 2 x^2 + 3 x + 4'

将特征向量表示成多项式 “poly2sym(特征多项式)”

a = 1     2     3     4
>> c = poly2sym(a) %默认自变量为x
c =
x^3 + 2*x^2 + 3*x + 4

利用多项式的根构造多项式poly(填写根)

image-20220902112333762

函数总结

image-20220902120334277

多项式差值函数(interpl1)

yi = interp1(x,y,xi,method) 其中想x和y是原已知数据,xi是需要差值的位置点,yi是差值点的值。 

method是差值方法可以设置的差值方法有:
	 *nearest(寻找最近数据节点):执行速度最快,输送出结果为直角转折
	 * linear(线性差值):默认,在样本点上斜率变化很大
	 * spline(样条差值):最耗时,但输出结果最平滑
	 * cubic(三次方程式差值):也比较耗时,输出结果与spline接近

多项式拟合函数polyfit

调用方法有两种
	* p = polyfit(x,y,n)
	* [p s] = polyfit(x,y,n)
	其中x,y为已知的数据组,n为要拟合的多项式的阶次,向量p返回要拟合多项式的系数相量,向量s为调用函数polyfit或得的错误预估计值

最小二乘法拟合

image-20220902161333032

image-20220902161353493

image-20220902161426037

数值积分

  • 计算两个相邻点的差值函数diff(对多项式求导)
    • diff(x)——返回x对预设独立变量的一次微分值
    • diff(x)——返回x对独立变量t 的一次微分值
    • diff(x,n)——返回x对预设变量的n次微分值
    • diff(x,’t‘,n)——返回x对独立变量t 的n 次微分值

求原函数(不定积分)

int 函数求原函数
>> y = sin(x);
>> Y = int(y)
Y =-cos(x)

y = x^4 + 2*x^3 + 3*x^2 + 4*x + 5
>> Y = int(y)
Y =x^5/5 + x^4/2 + x^3 + 2*x^2 + 5*x

subplot函数

使用方法:subplot(m,n,p)或者subplot(m n p)。

subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果m=2就是表示2行图。p表示图所在的位置,p=1表示从左到右从上到下的第一个位置。

牛顿-科茨系列积分公式

  • cumsum()函数

    * cumsum是matlab中一个函数,通常用于计算一个数组各行的累加值,函数用法是B = cumsum(A,dim),或B = cumsum(A)。
    
    如果A是一个向量, cumsum(A) 返回一个向量,该向量中第m行的元素是A中第1行到第m行的所有元素累加和;
    
    如果A是一个矩阵, cumsum(A) 返回一个和A同行同列的矩阵,矩阵中第m行第n列元素是A中第1行到第m行的所有第n列元素的累加和;
    
    

    image-20220902204218529

    • trapz() 梯形积分

      image-20220902204236881

    • quad() 辛普森积分

      image-20220902204347850

      image-20220902210257657

    • quad8() 科茨积分——高精度积分 注意式中的.*、./

      image-20220902205929219

      image-20220902210524715

线性方程组的数值解

  • 自接法

image-20220902211252844

image-20220902211020880

  • 迭代法
    • jacobi雅可比迭代法
    • Gauss-seidel 迭代法
    • SOR(超松弛)迭代法

稀疏矩阵

  • sparse 创建稀疏矩阵

    image-20220902213705046

image-20220902213807632

image-20220902213816655

  • 以spdiags创建对角稀疏矩阵

常微分方程的数值解

  • 欧拉法

保留位数(四舍五入)

image-20220923205343330

  • matlab格式化输出

image-20220927102745087

  • 函数拟合

    image-20220927132356138

非线性方程组的数值解

  • 不动点迭代法

    function varargout = fixpts(phifun,x0,ep,maxiter)
    %不动点迭代法求非线性方程组的数值解
    if nargin < 4
        maxiter = 500;
    end
    if nargin < 3
        ep  =  1e-8;
    end
    iter = 1;
    xs(iter,:) = x0;
    exitflag = 1;
    while exitflag
        x1 = phifun(x0);
        xs(iter +1,:) = x1;
        if norm(x1(:)-x0(:)) <= ep
            break
        end
        x0 = x1;
        iter = iter +1;
        if iter > maxiter
            exitflag = 0;
        end
    end
    [varargout{1:4}] = deal(x1,exitflag,iter,xs);
        
    
        
    
  • 非线性方程组的牛顿法

    function varargout = newtons(fun,x0,ep,maxiter)
    %牛顿迭代法求非线性方程组的数值解
    if nargin < 3
        maxiter = 500;
    end
    if nargin < 3
        ep =  1e-8;
    end
    if iscell(fun)
        Jfun = fun{2};
        fun = fun{1};
    else 
        if isa(fun,'function_handle')
            fun = sym(fun);
        elseif ~isa(fun,'sym')
            error('fun必须是符号表达式或匿名函数')
        end
        vars = symvar(fun);
        J = jacobian(fun,vars);
        fun = matlabFunction(fun,'vars',{vars});
        Jfun = matlabFunction(J,'vars',{vars});
    end
    iter = 1;
    xs(iter,:) = x0;
    exitflag = 1;
    while exitflag
        fx0 = fun(x0(:).');
        Jx0 = Jfun(x0(:).');
        if abs(det(Jx0)) <= eps || iter > maxiter
            exitflag = 0;
            break
        end
        x1 = x0(:) - Jx0\fx0(:);
        xs(iter +1,:) = x1;
        if norm(x1(:) - x0(:)) <= ep
            break 
        end
        x0 = x1;
        iter = iter + 1;
    end
    [varargout{1:5}] = deal(x1,fun(x1(:).'),exitflag,iter,xs);
    
    
  • Matlab自带函数的调用

    * roots函数
    事实上该函数采用的算法就是矩阵特征值法
    调用格式:r = roots(p)
    >> p = [4,0,-1,1,-3];
    >> r = roots(p)
    r =
      -1.0683 + 0.0000i
       0.9252 + 0.0000i
       0.0715 + 0.8682i
       0.0715 - 0.8682i
    
    * fzero函数
    该函数基于布伦特法设计,接合二分法,割线法,以及逆二项差值法的优势求解方程的根 
    x = fzero(fun,x0)%求解非线性方程在初值为x0处的根
    F = @(D,e,Re)@(f)1.14 - 2*log10(e/D + 9.35/Re/sqrt(f)) -1/sqrt(f);
    D = 0.1;
    e = 0.01;
    Re = 5e6;
    f = fzero(F(D,e,Re),rand)
    
    * fsolve函数
    F = @(x)[exp(-exp(-x(1) + x(2))) - x(2)*(1 + x(1)^2);
        x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5];
    x0 = [0 0];
    x = fsolve(F,x0)
    x =
    
        0.3931    0.3366
    

数值分析概述

  • 求定积分、不定积分的解析解函数int

    syms x
    y = 1/(1 + x^3);
    Y = int (y,1,1/2)%求函数y在[1,1/2]上的积分
    
    >> y = sin(x);
    >> F = int(y,x)
    F =-cos(x)
    
  • 泰勒展开公式taylor(因变量,自变量,‘order’,需要展开的阶数)

    syms x
    y = 1/(1 + x^3);
    yt = taylor (y,x,'order',6)%将y函数进行5阶泰勒展开(最高次数为5)
    Y = int(y,x,'order',6)%将泰勒展开的函数求定积分
    
    * 'Order':指定截断参数,对应值为一个正整数。未设置时,截断参数为6,即展开式的最高阶为5。
    
  • 精度控制函数,控制输出的精度vpa()函数

    >> a = vpa(pi,4)%输出结果保留四位有效数字
    a = 3.142
    
  • nargin、nargout函数

    * nargin为“number of input arguments”的缩写。 在matlab中定义一个函数时, 在函数体内部, nargin是用来判断输入变量个数的函数。
    * nargout的作用是在matlab中定义一个函数时, 在函数体内部, nargout指出了输出参数的个数(nargin指出了输入参数的个数)。
    
  • feval(fun,x)

    feval()函数执行指定的函数。也就是说,将想要执行的函数以及相应的参数一起作为feval()的参数,feval()的输出等于想要执行的函数的输出。
    
    >> f = @(x,y)(sin(x) + cos(y));
    F = feval(f,[pi/2 pi],[pi/2 pi])
    F =  1.0000   -1.0000
    

非线性方程的数值接法

  • 图解法

    1、图解法
    	例1、求函数humps在[0,2]之间的零点
    	fplot(@humps,[0,2])
    	hold on
    	plot(xlim,[0,0],'k')
    
  • fplot(f,[m,n])函数

    f = @(x)sin(3*x^2 + 2*x + 3)
    fplot(f,[0,10])%绘制f函数的曲线图
    
  • 试位法

    function [x,fx,xspan] = si_wei_fa(fun,a,b,ep)
    %试位法
    if nargin == 3
        ep = 1e-8;
    end
    fa = fun(a);
    fb = fun(b);
    xspan = [a,b];
    if fa*fb >=0
        error("试位法必须要求函数两端点值异号")
    end
    while abs(b-a) >ep
        x = b - (b-a)/(fb - fa)*fb;
        fx = fun(x);
        if fx*fa < 0
            b = x;
            fb = fx;
        else
            a = x;
            fa = fx;
        end
        xspan = [xspan;a,b];
        if abs(fx) <ep
            break
        end
    end
    
    
  • isscalar(A)判段输入参数是否是一个标量

    函数功能:判段输入参数是否是一个标量
    语法格式:TF = isscalar(A)
    如果矩阵A是一行一列的,则返回逻辑1(true),否则返回逻辑0(false)。
    相关函数:isa、isvector
    

标签:10,函数,元素,矩阵,基础知识,matlab,fun,大全
From: https://www.cnblogs.com/lgb114/p/16734774.html

相关文章

  • 学习:网络基础知识 https安全性总结,http和https对比
    加密----秘钥;身份认证----证书(申请)==双向认证;完整性保护----哈希算法--计算一个hash值验证消息的完整性,对比客户端发来的摘要信息来对比自身计算的摘要信息保证数据没......
  • 学习:网络基础知识-Https协议详解
    HTTP协议问题:发送数据都是明文的;如果第三者窃听截取数据包伪装成客户端与服务器进行交互服务器没有认证机制来确定客户端的身份客户端也没有任何机制确认服务器的身份;没......
  • 学习:网络基础知识 HTTP协议之响应报文
    响应报文-服务器回应给客户端的报文响应行+响应头部+空一行(格式代表响应头部结束)+响应体(服务器真真要返回的页面内容)   可以百度HTTP状态码可以看到详细的介绍响......
  • 学习:网络基础知识 HTTP协议之请求报文
    HTTP协议和安全版HTTPS协议HTTP(HyperTextTransferProtocol)超文本传输协议HTTP协议是基于TCP协议默认端口是80功能:用来规定客户端和服务端的数据传输格式特点:基......
  • 写代码----离不开的解决问题的思路大全
      遇到一个新的问题,我们可以用到很多解决问题的思路,下面的内容涵盖了大部分情况。1、直观而系统的方式。有些问题看一眼就能想到解决办法,如果遇到这种问题,你是很幸运......
  • P1-P3ARM64体系基础知识
    P1导读armv8概述armv8体系结构概述armv8寄存器armv8指令集gcc汇编语法和链接脚本armv8系统寄存器介绍armv8异常和中断armv8高速缓存管理内存序多核管理arm调试......
  • Anaconda安装和卸载+虚拟环境Tensorflow安装以及末尾问题大全(附Anaconda安装包),这一篇
    前言实话说,在自己亲手捣鼓了一下午加一晚上后,本人深深地感受到了对于“Anaconda安装+虚拟环境Tensorflow安装”里面的坑点之多,再加上目前一些博主的资料有点久远,尤其是目......
  • 《代码大全2》读书报告 一
                                                         ......
  • pandas基础知识(未完成)
    pandas基础知识pandas的数据结构SeriesPandasSeries类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型Series由索引(index)和列组成,函数如下:Series只能......
  • shell基础知识
    1.1第一个shsh-x1.sh+touch/tmp/1.txt+chmod600/tmp/2.txt+mv/tmp/1.txt/tmp/2.txt1.2脚本执行bash1.sh./1.sh-bash:./1.sh:Permissiondeniedchmod......