许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  MATLAB语法详解:变量、运算符与控制流

MATLAB语法详解:变量、运算符与控制流

阅读数 26
点赞 0
article_banner
  • figure('color','white');%把figure的背景颜色改为白色
  • set(gcf,'position',[100 100 500 500]);%起始坐标为100,100这是显示器的像素值,宽度为500个像素,高度为500
  • X=linspace(5,100,20) % 产生从5到100范围内的20个数据,相邻数据跨度相同。这和X=[5 : 5 : 100]的效果是一样的
  • text(x,y,'string'):在二维图形中指定的位置(x,y)上显示字符串string
  • MSE:预测(拟合)数据和原始数据对应点误差的平方和的均值
  • figure是建立图形的意思,系统自动从1,2,3,4...来建立图形,数字代表第几幅图形,figure(1),figure(2)就是第一第二副图的意思,在建立图形的时候,它的标题就是figure1或figure2等等,对应到程序中就是例子语句

        一般建立新图只需要一个figure就行,系统自动建立新图,可以简单一点,当然要加上也可以

        相关的画图的:多子图,就是一张图中有好多小图,也是有标号的

        使用以下命令
    subplot(m,n,k)

        subplot('Position',[left bottom width height])

        m表示画几行

        n表示画几列

        k表示现在画的是第几幅图
  • MATLAB之plot的用法https://blog.csdn.net/chduan_10/article/details/74568129
  • Matlab的mapminmax函数说明:https://blog.csdn.net/jeep_ouc/article/details/50241141
  • BP神经网络中神经元阈值的意思:http://www.ilovematlab.cn/thread-203711-1-1.html (出处: MATLAB中文论坛)
  • >> A = magic(5)R1 = A(1:2:end,2:2:end)%从第一行开始每隔一行取一行;从第二列还是每隔一列取一列R2 = A(2:2:end,1:2:end)%从第二行开始每隔一行取一行;从第一列还是每隔一列取一列 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 R1 = 24 8 6 20 18 2 R2 = 23 7 16 10 19 3
  • eye(3);%生成3阶单位矩阵E
  • A.*B;%代表A与B的对应元素相乘。 A.^2;%同理代表A与A的对应元素相乘。
  • sum(sum(A));%矩阵A所有元素求和。 sum(A);%矩阵每列求和的行向量 sum(A,2);%矩阵每行求和的列向量
  • R = subs(f, old, new) ;%利用new的值代替old的值,并带入f中。
  • >> simplify(x^2+5*x+6*x-2)%2016版以后用simplify代替simple ans = x^2 + 11*x - 2
  • varargin函数用来传递变量列表。
  • a = varargin{1}%获取传入的第一个参数,并赋值给a 你的函数可能是这样的 function varargout = test(varargin) { a = varargin{1}; }; 调用的时候使用test(参数1, 参数2, 参数3); 可以传入多个参数。
  • isprime(i)%判断i是否是质数
  • a=[1 2 3]; b= [2 3 4];meshgrid(a,b)生成2维网格矩阵

   >> [ x y]=meshgrid(a,b)

   x =

           1     2     3

           1     2     3

           1     2     3

       y =

           2     2     2

           3     3     3

           4     4     4  

  • >> linspace(1,5,5)%linspace(a1,a2,N) 是生成间距为(a2-a1)/(N-1)、个数为N的数组的命令。 ans = 1 2 3 4 5
  • erf()函数:
  • A为某一矩阵,poly(A)就能够得到该矩阵的特征多项式的各项系数
  • a=[1 2 3]; %多项式为x^2+2*x+3 A=[1 2;3 4]; %定义一个二维矩阵 polyvalm(a,A) %求结果 ans = 12 14 21 33 其实相当于把A这个二维矩阵直接替换变量x,即求 A^2+2*A+3*E 这个矩阵多项式。
  • >> p = [3 2 1];
  • >> polyval(p,1)%直接将x=1带入3x^2+2x+1求结果 ans = 6
  • 矩阵的奇异值分解:[s,v,d]=svd(A) LU分解:[l,u]=lu(A) 正交分解:Q=orth(A)
  • [e,f]=eig(A);%e为矩阵A的特征向量,f为矩阵A的特征值。
  • >> log(exp(1))%matlab中的ln(x)用log(x)表示 ans = 1
  • A'%共轭转置。A.'%一般转置。
  • syms x y;%注意:x与y之间不能用","。
  • A=[1 2 3;%提取A的3,2,1行,反复三次由首列构成子矩阵 4 5 6; 7 8 0];B1=A([3 2 1],[1 1 1]) >>B1 = 7 7 7 4 4 4 1 1 1
  • B1=A(:,end:-1:1);%矩阵左右翻转,等同于B=fliplr(A) B1=A(end:-1:1,:);矩阵上下翻转,等同于B=flipud(A)
  • rot90(A);%将矩阵A逆时针旋转90度、
  • & | ~ xor %与或非异或
  • A=[1 2 3; 4 5 6; 7 8 0];find(A>=5)%找到矩阵中大于5的元素的位置(按列数) ans = 3 5 6 8
  • [i,j]=find(A>=5)%找到矩阵中大于5的元素的位置并赋值给i,j
  • all(A>=5)%当A的某列元素全部大于或等于5时,相应元素为1,否则为0 ans = 0 0 0
  • any(A>=5)%当A的某列元素含有大于或等于5时,相应元素为1,否则为0 ans = 1 1 1
  • all(A(:)>=5)%判断元素是否均大于等于5
  • 化简函数:collect()合并同类项,expand()展开多项式,factor()因式分解,numden()提取多项式的分子和分母
  • 多项式的除法:被除数:2*x.^4-12*x.^3+19*x.^2-29*x+37,除数:x.^2-6*x+7 [q,r]=deconv([2 -12 19 -29 37],[1 -6 7]) q =%商 2 0 5 r =%余数 0 0 0 1 2
  • unwrap函数会将绝对值超过pi的角度增加或减少(2*k*pi)角度后换算回(-pi,pi)区间中。
  • /与\%a/b表示矩阵a乘以矩阵b的逆;a\b表示矩阵a的逆乘以b。
  • format %例子:
       
  • save mydata A%生成mat数据文件
  • load mydata A%读取mat数据文件
  • r=size(A,1)%该语句返回的是矩阵A的行数, c=size(A,2)%该语句返回的是矩阵A的列数。
  • rem(10,3)=1%取余
  • 函数句柄@%例子

      poly6 = @(x) 8*x.^6+6*x.^5+3*x.^3+x.^2+x+520;

          fplot(poly6,[0,100]);

  • axis([0,200,0,1])%画图的时候限制x∈[0,200],y∈[0,1]
  • rand('state',0)%比如你运行u2 = rand(3,1)三次,分别产生u2 =  0.9501   0.2311   0.6068,u2 =   0.4860   0.8913   0.7621,u2 =   0.4565   0.0185   0.8214三组随机数,运行rand('state',0)后,再运行u2 = rand(3,1)三次,产生的随机数就得前三次的一样,运行u2 = rand(3,1)第四次后的结果就不一样了。
  • [a,b,c,d,e,f,g,h] = deal(0);%连续复制a=b=c=d=e=f=g=h=0
  • >> A = [70 30 30];
    >> numel(A)
    %返回A中数组元素个数,3
    ans =
         3
  • K>> A = [1 2 3 4];
    K>> numel(A)
    ans =
         4
    K>> numel(A,2)
    ans =
         1
  • 1*8+1:2*8 = (1*8+1):(2*8);%也就是说 + - * / 优先级顺序比 : 的高
  • A = repmat(10,3,2)%创造一个3*2的元素是10的矩阵 A = 3×2 10 10 10 10 10 10
  • b = exist( 'a', 'kind'); kind 表示 a 的类型,可以取的值为:builtin(内建类型),class(类),dir(文件夹),file(文件或文件夹), var(变量)。若 a 存在,则 b = 1; 否则 b = 0;
  • addpath(genpath(pwd));%主文件夹和子文件夹不在一个文件夹下调用
  • fix(x);%向0取整

      >> fix(2.5)
ans =

          2

          >> fix(-1.8)

          ans =

          -1

  • break就是用来跳出本层for和while的,跟有没有if没有关系。
  • x = 1001;

        s = fix(sqrt(x));% 31

        p = 1;

        for i = 1:s

           if mod(x,i)==0%1001与i取余

                p = 0;

                break

           end

        end

        if p == 1

            disp('该数是素数')

        else

            disp('该数不是素数')

        end

        >> 该数不是素数
  • 希腊字母等特殊字符用 \加拼音 如

    α \alpha β \beta γ \gamma θ \theta Θ \Theta Г \Gamma δ \delta Δ \Delta ξ \xi Ξ \Xi η \elta ε \epsilong ζ \zeta μ \miu υ \nu τ \tau λ \lamda ∧ \Lamda π \pi ∏ \Pi σ \sigma ∑ \Sigma φ \phi Φ \Phi ψ \psi Ψ \Psi χ \chi ω \ommiga Ω \Ommiga
  • >> A = [1 2 3];%std求标准差,默认是除以(n-1)

        >> std(A,1)

        ans =

            0.8165

        >> std(A,0)

        ans =

             1

        >> sqrt(2/3)

        ans =

            0.8165

        >> std(A)

        ans =

             1
  • r = randi(imax,m,n);%返回一个在[1,imax]范围内的m*n的伪随机整数矩阵
  • K>> smi=randi([1 4])%返回一个介于1到4的伪随机整数标量 smi = 1 K>> smi=randi([1 4]) smi = 4 K>> smi=randi([1 4]) smi = 2
  • unifrnd(20,30,1000,1);%产生一个1000*1 的array,这个array中的每个元素为20到30之间连续均匀分布的随机数
  • unifrnd(a,b);%返回由a和b分别指定的上、下端点的连续均匀分布生成的随机数.(可以是小数.)
  • >> A=[1+i 1-i;2+i 2-i]; >> A'%普通转置 ans = 1.0000 - 1.0000i 2.0000 - 1.0000i 1.0000 + 1.0000i 2.0000 + 1.0000i >> A.'%共轭转置 ans = 1.0000 + 1.0000i 2.0000 + 1.0000i 1.0000 - 1.0000i 2.0000 - 1.0000i
  • y = randperm(n);%y是把1到n这些数随机打乱得到的一个数字序列

      K>> randperm(5)

          ans =

                    3     4     2     5     1

  • p = randperm(n,k);%返回行向量,其中包含在 1 到 n(包括二者)之间随机选择的 k 个唯一整数。
  • mean(x);%返回每列的平均值
  • mean(x,2);%返回每行的平均值
  • K>> A=[1 2 3;4 5 6;7 8 9]; K>> B=[1 2 3]; K>> bsxfun(@minus,A,B)%实现逐元素运算,函数bsxfun可以避免用循环结构编程。 ans = %两个输入数组的非单一维度必须相互匹配。 0 0 0 3 3 3 6 6 6
  • K>> A = [1 2 3;4 5 6]; K>> B = [1 2 3]; K>> bsxfun(@times,A,B)%bsxfun(@times,B,A)一样的结果 ans = 1 4 9 4 10 18
  • K>> A = [1 2 3 4 5 6]; K>> A(2+1:4) % 取A的从第2个元素到第四个元素 ans = 3 4
  • [Y,U]=max(A);%返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值的行号。(如果有多个最大值,只记录第一个)
  • C = max(A,B);%返回从 A 或 B 中提取的最大元素的数组。 A = [1 7 3; 6 2 9]一键获取完整项目代码html A = 2×3 1 7 3 6 2 9 一键获取完整项目代码html B = 5;C = max(A,B)一键获取完整项目代码html C = 2×3 5 7 5 6 5 9一键获取完整项目代码html
  • >> a = [-1.9, -0.2, 3.4, 5.6, 7.0]; >> round(a) % 四射五入 ans = -2 0 3 6 7
  • nchoosek(N,M)%N!/(N-M)!/M!
  • K>> a=[1,2,4;0,0,0;1,3,5;0,0,0] a = 1 2 4 0 0 0 1 3 5 0 0 0 K>> all(a==0, 2)%返回的是一个列向量,可以检测到全零行的位置,因为使用了a=0,返回的为0代表是非零元素,返回的 %为1代表是全零行 ans = 4×1 logical 数组 0 1 0 1 K>> a(all(a==0,2),:)=[]%删除全0行 a = 1 2 4 1 3 5
  • 在调试 MATLAB® 代码文件时,可以发出 dbstack 命令来查看堆栈跟踪信息。 创建文件 myfile.m,其中包含以下语句。 function n = myfile(x)n = myfunction(x-1);end function z = myfunction(y)z = 2 / y;end一键获取完整项目代码html 在 myfunction 中设置断点,并通过输入 1 运行 myfile。执行 myfunction 时,MATLAB 在第 z = 2/y 行暂停。 dbstop in myfile>myfunctionmyfile(1);一键获取完整项目代码html 运行 dbstack 命令。MATLAB 会显示行号和导致当前断点的函数调用的文件名。 dbstack一键获取完整项目代码html In myfile>myfunction (line 5)%左边会有一个小白箭头In myfile (line 2)%左边会有一个小白箭头一键获取完整项目代码html
  • properties(SetAccess=private, GetAccess=public)

            var

        end
       
  • title('my title','fontsize',12);%设置字体大小为12号字体 xlabel('my xlabel','fontsize',12); ylabel('my ylabel','fontsize',12);
  • f=@(x)acos(x) 相当于建立了一个函数文件。f 为函数句柄,@是定义句柄的运算符: % f.m function y=f(x) y=acos(x); 函数句柄的使用方法也和函数是一样的。
  • K>> A = [1 2 3 3 2 0]; K>> unique(A) %去除A中重复的值,并从小到大排序 ans = 0 1 2 3
  • K>> GI = [1 2 3 2]; K>> OC = [1 2 3]; K>> find(GI == OC(1)) ans = 1 K>> find(GI == OC(2))%find最终返回的是GI的位置 ans = 2 4
  • A = 1:5;B = cumsum(A)%求A的累积和一键获取完整项目代码html B = 1×5 1 3 6 10 15一键获取完整项目代码html
  • matlab 审查代码的时候会提示许多错误、不规范的代码或有潜在风险的代码。

        用 %#ok 可以标记这个地方是有意使用(或无法避免)不规范的代码或有潜在风险的代码。标记后 matlab 就不会再提示这个错误了。这个比较厉害
  •    for j = []
            Q = 2;
    %这一步不会执行
       end
  • K>> [cj, so]=sort([1 5 6 9 2 3])%默认从小到大进行排序
    cj =
         1     2     3     5     6     9
    %返回原数组从小到大排序后的数组
    so =
         1     5     6     2     3     4
    %返回排序后的数字在原数组的位置
  • K>> [cj, so]=sort([1 5 6 9 2 3],'descend')%从大到小进行排序
    cj =
         9     6     5     3     2     1
    so =
         4     3     2     6     5     1
  • cell2mat();%这个语句非常重要,用来将最后的数据转换成矩阵,用来保存数据
  • F = false(sz1,...,szN);%是由逻辑值“0”组成的 sz1×...×szN 数组
  • A = 95 45 92 41 13 1 84 95 7 73 89 20 74 52 95 7 73 5 19 44 20 95 7 40 35 60 93 67 76 61 93 81 27 46 83 76 79 91 0 19 41 1 B = sortrows(A);%默认依据第一列的数值按升序移动每一行,如果第一列的数值有相同的,依次往右比较。例: B = 76 61 93 81 27 46 83 76 79 91 0 19 41 1 95 7 40 35 60 93 67 95 7 73 5 19 44 20 95 7 73 89 20 74 52 95 45 92 41 13 1 84
  • >> h1 = legend('x'); >> set(h1,'box','off')%去除legend边框
  • 用legend画图例,一定要把所有的图画完了再在最下面加legend('y1','y2','y3');
  • A = [3 6 2 1 5 1 1]; B = [2 4 6];C = setdiff(A,B)%查找A中存在,B中不存在的值。C = 1×3 1 3 5一键获取完整项目代码html
  • M = max(A,[],dim) %返回维度 dim 上的最大元素。例如,如果 A 为矩阵,则 max(A,[],2) 是包含每一的最大值的列向量。dim = 1 是列。(这有点特别)
  • K>> A = [0 0 3;0 0 3;0 0 3]

        A =

             0     0     3

             0     0     3

             0     0     3

        K>> B = any(A,2)%通过指定 dim = 2 测试 A中是否有非零元素。

        B =

          3×1 logical 数组

           1

           1

           1
  • K>> A = randi(3,10,3)%函数产生均匀分布的伪随机整数

        A =
    2     1    3
    2     3     1

             3     2     3
    1     1    1
    3     1     3
    3     3     1
    1     3     3

             3     1     1
    3     2     2

             3     1     2

        K>> [C,ia,ic] = unique(A(:,1:2),'rows')%基于前两列的数据查找 A 中的唯一行。指定三个输出以返回索引向量 iaic,C = A(ia) and A = C(ic);注:ia是指C中元素在矩阵A中的位置;ic是指A中元素在矩阵C中的位置。

        C =

             1     1

             1     3

             2     1

             2     3
    3     1
    3     2

             3     3
    ia =%A中唯一行的行号

             4

             7

             1

             2

             5

             3

             6
    ic =%ic是指A中元素在矩阵C中的位置

             3   :2     1

             4   :2     3

             6   :3     2

             1   :1     1
    5   :3     1

             7   :3     3

             2   :1     3
    5   :3     1

             6   :3     2
    5   :3     1
  • K>> B = [1,1];

        K>> abs(B)%求绝对值

        ans =

             1     1

        K>> norm(B)%求二范数

        ans =

            1.4142
  • [Y1, Y2, Y3, ...] = deal(X1, X2, X3, ...) %与 Y1 = X1、Y2 = X2、Y3 = X3、 ... 相同
  • 保存随机数生成器的当前状态并创建一个由随机数组成的 1×5 向量。 s = rng;r = rand(1,5)r = 1×5 0.8147 0.9058 0.1270 0.9134 0.6324 一键获取完整项目代码html 将随机数生成器的状态恢复为 s,然后创建一个由随机数组成的新 1×5 向量。值与之前相同。 rng(s);r1 = rand(1,5)r1 = 1×5 0.8147 0.9058 0.1270 0.9134 0.632一键获取完整项目代码html
  • >> rands(2,2)%rands 函数一般是用在神经网络的权值和阈值的初始化时,范围是-1到1K ans = -0.6048 0.8495 -0.4401 0.3391
  • ceil 是向正无穷方向取整 如a = [-1.9, -0.2, 3.4, 5.6, 7, 2.4+3.6i] ceil(a)后:a=[-1,0,4, 6, 7 ,3+4i]
  • ⌊ x ⌋ 上面缺一横: 不大于x的最大整数。
  • x 下面缺一横: 不小于x的最小整数
  • K>> A = [3 4];%相乘 K>> prod(A) ans = 12 K>> A = [1 2;3 4];%列相乘 K>> prod(A) ans = 3 8
  • continue的作用是跳过continue之后的代码,继续进行循环操作,但是如果continue之后没有代码,continue在这里不起任何作用
  • 元胞数组cell内所属的元素可以存储不同类型数据,相当于c语言的结构体
  • tfdata(h,'v')中的v是什么意思?加上'v',可以让输出的值由元胞数组改为数组直接输出: 举个例子: h = tf([1 1],[1 2 5]); [num,den] = tfdata(h) 可以看出输出的num和den为元胞数组的形式无法直接输出,如果想输出他们的值,就必须用以下命令:num=num{1}; den=den{1}; 而添加上'v'之后,就可以省略上面的两步,直接得到num和den的向量。 h = tf([1 1],[1 2 5]); [num,den] = tfdata(h,'v')
  • pinv(A);求其伪逆矩阵
  • >> A = [11 12;21 22] A = 11 12 21 22 >> B = [31 32;41 42] B = 31 32 41 42 >> horzcat(A,B)%水平连接矩阵 ans = 11 12 31 32 21 22 41 42 >> vertcat(A,B)%垂直连接矩阵 ans = 11 12 21 22 31 32 41 42
  • quadprog求解标准二次规划问题: x = quadprog(H,f,A,b,Aeq,beq,lb,ub);%目标函数的H和f,不等式约束Ax≤b,等式约束Aeq*x=beq,自变量最小值最大值lb≤x≤ub.一键获取完整项目代码html
  • 颜色符号:r red   g green   b blue   y yellow   k black   w white
  • eval:eval的功能简单来说就是可以把字符串当做命令来执行。例:eval('y=sin(1)')与命令 y=sin(1)等价
  • dsolve:解常微分方程
  • s=tf('s');%s为设定的变量
  • system=8611.77/(((s+0.55)^2+36)*((s+0.25)^2+15.4^2));%自己设置的系统参数
  • Ts=0.2;%采样时间
  • plant=c2d(system,Ts);%将系统离散化
  • Q=diag(ones(10,1),0);%对角线是1的10*10的矩阵,此处是单位阵。相当于eye(10)
  • D = diag(v,k) 将向量 v 的元素放置在第 k 条对角线上。k=0 表示主对角线,k>0 位于主对角线上方,k<0 位于主对角线下方。例:S=diag(ones(40-1,1),1);%将39个1放置在主对角线上方的第一条对角线,注意这里的-1一定要有。
  • blkdiag函数中:作用是生成以矩阵块为对角线的矩阵;

        a=[1 2;

             3 4];

        则blkdiag(a,a)=[1 2 0 0

                                  3 4 0 0

                                  0 0 1 2

                                  0 0 3 4];
  • 可控性判断:>> A= [-2.692 161.863 -42.524;

              0 -33.333 0;

              0 0 -10];

        >> B = [0 0;

              33.333 0;

              0 10];

        >> Co=ctrb(A,B);

        >> rank(Co)

        ans =

             3   %所以可控
  • 可观性判断:>> A= [-2.692 161.863 -42.524;

              0 -33.333 0;

              0 0 -10];

        >> C = [-0.00193 0.124 0;

              1 0 0];

        >> rank(obsv(A,C))

        ans =

             3   %所以可观
  • sign(x):符号函数(Signumfunction)。1,前提是 x 的对应元素大于 00,前提是 x 的对应元素等于 0-1,前提是 x 的对应元素小于 0x./abs(x),前提是 x 为复数。
    免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空