@suixinhita
        
        2020-09-10T08:22:31.000000Z
        字数 6877
        阅读 1049
    软件学习 MATLAB 语言学习
- 第四代计算机语言
- 语言简单
- 计算功能强大
- 可视化功能强大,绘图功能强大,图像处理能力强大
- 可扩展性强、开放、扩充能力强
- 有很多现成工具
三大功能:
- 数学计算
- 可视化
- 程序设计
Simulink:类似于蓝图的可视化建模系统,基于MATLAB,可以自动生成代码
>>12+2*(7-4)\(3^2)>>x=? >>y=f(x) y=....红色字体是错的
- 直接对于抽象的符号对象进行计算,获得问题的解析结果
符号计算的基本概念:
- 相对于数值计算的概念,在MATLAB中是使用符号运算工具箱来实现的。
- 不受误差困扰,计算可以给出完全正确的封闭解或者任意精度的数值解。
- 指令比较简单,时间较长。
- 数值运算必须要先对变量进行赋值,但符号计算不需要,运算结果会世界以标准是符号形式表达
符号计算的一般使用:
- 建立符号变量
>>syms a b c x;- 输入方程
f=- 把方程解出来
solve(f)- 得到答案
ans=
软件不止一种
sym 用来建立单个符号量,写法是 符号变量名=sym('符号字符')whos 命令可以了解到变量的特性syms 一次可以定义多个符号变量,写法是 syms 符号变量名1 符号变量名2 ...,该语句没有进行赋值,只是创建了变量。sym 函数建立表达式 ,例如 u=sym(x*y),或者不写 sym 也可以sym ,例如 A=sym([a,2*b;3*x,0]) 矩阵使用方括号 [] ,中间换行是 ;collect(),针对合并  的话 collect(R,v) ,否则就是将所有的都合并expand() simplify()factor() ,会使用行向量去表示finverse() ,一般需要指定变量compose() ,一般是用后替代前digits(d) 确定精度为d位的有效数字vpa(a,d) 输出精度是d位的有效数字double() 转换为双精度变量 
limit 函数limit(f,a) 默认 x 趋近于 a 的时候极限,不写a会默认趋向于0limit(f,'y',inf) ,是y趋近于正无穷limit(f,'x',a,'left') 是x从左边趋近于a,右侧同理微分 
    - 使用 diff 函数 
    - diff(s) 默认一阶导数 
    - diff(s,3) 求三阶导数 
    - diff(s,x,2) 对x求二阶导数
int函数int(s) 是不定积分int(s,t) 对t不定积分int(s,t,a,b) 上下限分别是 a b 
级数:
symsum(s,v,n,m) s是通项表达式,v求和变量,n,m分别是开始项和末项taylor(f,v,a,name,value) 函数f按变量展开为泰勒级数,展开到第n项,n默认为6,a是在a处展开,'order'写在name处代数方程:(solve是不能解微分方程的!)
slove函数slove(f) 默认是解  的情况ep1=a+b+c==3方程组是 f=[a+b==2;a+c==3;b+c==4];[a,b,c]=solve(f)
微分方程:Dy表示y的一阶导数,D2y表示二阶导
dslove('表达式','初值','求导对象')命令可以嵌套
- 对于数值进行计算,以有限精度的数字为基本的操作元素
- 数值计算是定义在数值数组的基础上,在计算前要定义变量进行赋值
存在误差,速度较快
数据的表达方式:十进制
- 复数:用特殊的变量 表示
- 变量命名规则同C++
a=m:p:n 生成步长为p的均匀等分行向量,m开头,n结尾 linspace(m,n,s)(生成m~n中的s个等分的行向量)或 logspace(m,n,s)(生成 ~  之间按照对数等分的s个行向量(s默认100)A=[1,2;3,4][] 空矩阵、eye(n) 单位矩阵、ones(n,m n*m的纯1矩阵、zeros(n,m)纯0矩阵、rand(n,m) [0,1]随机的矩阵、randn(n,m) 标准正态分布的随机矩阵、randi([imin,imax],n,m)生成的是[imin,imax]之间的随机矩阵diag 生成对角矩阵、B = repmat(A,m,n),指将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成。 、reshape改变形状,比如把8*1换成4*2(一列一列排的)(使用方法是reshape(原矩阵,行数,列数))、flipud以水平中线为对称轴做镜面、fliplr以垂直中线为对称轴做镜面、rot90逆时针旋转90°。A(i,j) 表示矩阵A的第i行第j列元素,A(2:3,3:4)2~3行,3~4列,隔行则为 A(1:2:5,3:4),如果是 B(:,[1,2]) 这种情况,代表列是第二列(事实上[1,2]可以换成任意[x,2],都一样),如果是A([a,b],,[c,d])会是与A(a:b,c:d)类似的结果。 


rank矩阵的秩、ret矩阵行列式的值、trace矩阵的对角线元素之和、[V,D]=eig(A)矩阵的特征值和特征向量(AV=VD)、[R,ci]=rref(A)阶梯矩阵和行向量。sum函数:如果 A 是向量,则 sum(A) 返回元素之和。 sum(A) 将返回包含每列总和的行向量。sum(A)沿大小不等于 1 的第一个数组维度计算,并将这些元素视为向量。此维度会变为 1,而所有其他维度的大小保持不变。S = sum(A,'all')计算 A 的所有元素的总和。S = sum(A,dim) 沿维度 dim 返回总和。例如,如果 A 为矩阵,则 sum(A,2) 是包含每一行总和的列向量。(1是形成行向量,2是列向量)mean 函数:指对于一个数组第一个维度不是一的维度做平均std(标准差)、min、max、var(方差)等。~,不等于为~=,其他同c++ int的情况下,结果可能需要通过vpa进行约束integral(fun,x_min,x_max)的情况下,fun需要真的是一个“函数”,即需要使用@句柄定义和使用的“函数”。简单的定义方式如下: 
 
 
 
  
 cumtrapz,输入的是一串等间距的函数值,或一个包含了xy的矩阵fminbnd(fun,l,r),其中,fun需要是一个“函数”,否则无法通过,同时也需要进行画图判断。fzero(fun,st) 也同样需要将fun化为函数,同时需要作图得到起始点。fminsearch(fun,x0)的使用方法如下:ode45函数计算微分方程的解:[t,y] = ode45(odefun,tspan,y0)其中,tspan是指时间区间,y0为初始条件 
 
 
conv(a,b),注意第一个不能是0,除时使用[p,r]=deconv(a,b)p是商,r是余数的系数。Ploy2sym(q,’x’)将多项式系数向量q写成容易读的多项式p=polyfit(x,y,n) 求x,y数组所给数据的n阶拟合多项式系数向量p
pk=binopdf(k,N,p) 事件A发生k次的概率Fk=binocdf(k,N,p) 事件A发生次数不大于k次的概率 px=normpdf(x,Mu,Sigma)服从 分布的随机变量取值x的概率密度Fx=normcdf(x, Mu,Sigma)服从分布的随机变量取值不大于x的概率密度disttool 概率函数分布工具plotplot(x) x是一组向量,x为纵坐标,其下标为横坐标plot(x,y) x自变量,y函数值,如果y是n*m的矩阵,且x长为n,则以x为自变量,画m条曲线plot(x1,y1,x2,y2) 连着画多条线plot后可以加入控制线的特征的量:对于颜色/线型/标点类型可以直接标注,例如'r:*'代表了红色点线*标注;对于标注的特征/线宽等则需要说明,例如'lineWidth',2和'MarkerSize',10 

hold on; 可以保持上一个不被清除,hold off;才会停止。plot(x,y,'s','线名','线宽'...) 其中's'是开关必须加上,和设置没关系(如果是上文中的特殊标记是不需要加's'的)subplot 子图分割命令,格式 subplot(m,n,p)  m,n,q分别是行、列、图的编号,编号从左到右从上到下,如果1张图需要多个位置,可以挑选准确的位置然后使用[]选择,例如[2 4]。也可以采用定位左下角和右上角的坐标的方法去确定图形位置,图窗的长宽均视为1,并取左下角为点,例如subplot('position',[0.2,0.1,0.6,0.40])figure(n)创建窗口函数,n为窗口顺序号,使用的时候要先进行声明在第几个窗口画图。图形标注:
title 标题x(y)label('text',’property','文本属性'...) 轴标注text 在图形上指定位置加标注(这个指定位置的坐标是表上的坐标,不能标到表外)gtext 在图形任意位置加标注,使用方法是gtext(''),然后进行鼠标选点grid on(off)打开/关闭网格线legend(string1,string2,...) 文字标注,图例说明,可以用 Location 参数将其放在想要的位置,或者使用Pos对图例的位置作出设置和调整:  legend offlegend({'cos(x)','cos(2x)','cos(3x)','cos(4x)'},'NumColumns',2)title(lgd,'My Legend Title')可以为标注添加标题文字的调整:
\bf:采用的字体加粗。\it:采用的字体为斜体。\rm:采用标准形式。\fontname {fontname}:设置文字的字体。\fontsize {fontsize}:设置字体的大小。\color {colorname}:对字体的颜色进行设置 
\lineWidth、\lineStyle、\MarkerSize 等

坐标轴调整命令axis([xmin,xmax,ymin,ymax])    
manual/自动auto [自动的轴]tight 与数据范围完全相等/  equal每个坐标轴单位长度一样 / imagetight+equal / square调整单位长度使之成为方形 / vis3d 冻结比例/ normal还原默认box on(off)坐标轴封闭/开启命令bar 表示绘制直方图polar表示绘制极坐标图hist表示绘制统计直方图stairs 表示绘制阶梯图stem表示绘制火柴杆图rose表示绘制统计扇形图comet表示绘制彗星曲线errorbar表示绘制误差棒图compass表示复数向量图(罗盘图)feather 表示复数向量投影图(羽毛图)quiver 表示向量场图area 表示区域图pie 表示饼图convhull表示凸壳图 scatter 表示离散点图plotmatrix表示散点图yyaxis可以画出有两个y轴的图形semilogx画出来的函数中x是取对数的ginput命令用于显示鼠标处的坐标点fill命令用于绘制二维多边形并进行填色,使用方法fill(x,y,'颜色')plot3(可查询help graph3d)meshgrid(x,y)用于生成平面网格点的坐标fill3与fill使用方法相同
三维网格图 mesh(z) z为n*m矩阵,xy坐标为元素下标
meshgridsurf(x,y,z),surfc带等高线的曲面图contour(Z,n)绘制n条等高线,如果有返回值就是等高线坐标 Clabel(c)用于给等高线加标注fsurf(fun,取值范围,'其他要求','')其中,fun必须是一个“函数”,并且需要注意的是不能是一个inline函数,会报错,需要使用@
色图设定函数 colormap([R,G,B]),其中有部分预设如下:
 
 
- 在图像中还有对其的修饰 
 - shading interp根据小方块四角的值差补过度点的值确定颜色 
 - shading flat去掉黑色线条,根据小方块的值确定颜色 
  
 
 - 'EdgeColor','none'是可以将边框颜色去掉的 
 - hidden on(off)是开关透视效果的 
 - view(az,el) 用于调整视角,az是方位角,el是俯视角
>>notebook-setup 在word里面寻找加载项fuction(如果是脚本则不需要),之后写返回值的变量名=函数名(自变量),最后需要加上end,与C++相类似,如果可以使用全局变量把结果传递出函数,也可以不写返回值是什么变量。nargin 表示所用函数输入变量的个数,可以在函数内部判断输进了几个函数,也可在函数外查询最多能输进去几个函数。nargout是检测有多少个输出,该函数只能在函数内部使用clear 释放内存global 全局变量的声明,在定义和引用的时候都需要声明,(在函数里面定义了的 global 变量,在外面想引用需要先声明。logical 逻辑运算 A(A>0)=1可以直接将A中大于0的变成1
for 循环,写成 
for index=start:increment:end   
        ... 
end
MATLAB 的 for 循环中可以使用矩阵,i=A的话是每次取一列进行循环。
if 语句 (break)也可以使用 if .... 
        ... 
        else 
        ... 
        endswitch语句,同C++echo on/echo off 显示/隐藏命令(尤其是M文件里面的命令,对调试有帮助)x=input('提示语句') 来输入xpause 暂停用 tic秒表计时器,会记录下当前时间;toc秒表停止器,可以得到使用了多长时间;使用方法是st_time=tic;  used_time=toc(st_time);结构数组(结构体)与C++的结构体类似。
cell 单元格数组,需要使用花括号 {} ,里面可以放各种变量类型,类似于变换了的结构体,只是不需要自己定义里面有什么,可以直接使用。
@标注