• MATLAB入门笔记


    % MATLAB:MATLAB 为 Matrix Laboratory ,用来处理矩阵可编程可实现算法逻辑的计算工具
    %
    % eg:1 绘制正弦和余弦曲线
    x=[0:0.1:4*pi]; %建立角度向量
    plot(x,sin(x),x,cos(x)) %画图
    axis([0,2*pi,-1,1]) %设定坐标轴范围
    title(′正弦和余弦曲线′); %图形名称
    xlabel(′θ(弧度)′) %x轴名
    ylabel(′y′) %y轴名
    legend(′sinθ′,′cosθ′); %图例
    grid on; %网格线


    % MATLAB指令系统
    % Who或whos 显示在当前工作区中的所有变量名,前者显示变量名,后者还显示变量的大小、字节数和类型
    % disp(x) 显示x的内容,它可以是矩阵或字符串
    % which test 显示 M 文件 test.m 所在的目录
    % type test 在命令窗口下显示 test.m 的内容
    % cd,chdir,pwd 显示目前的工作目录
    % Load 文件名 调出mat文件中的数据。也可以调出文本文件,但是文本文件只能是由数字组成的矩阵形式
    % diary
    % 建立一个文本文件,记录在MATLAB中输入的所有命令和它们的输出,但是不能包括图形。如果想把你的输入存入一个特定的文件中,可使用 diary
    % filename 建立文件。使用diary off↙命令可以停止记录
    %
    % what 返回目前目录下M,MAT,MEX文件的列表
    % echo 控制是否显示M文件执行的每一条命令
    % clc 擦除MATLAB工作区中所有显示的内容
    % clf 擦除MATLAB图形 工作区中的图形
    % hold 控制当前图形窗口对象是否被刷新(在图表中保持现有图形)
    % dir,ls 列出指定目录下的文件和子目录清单
    % path 显示目前的搜索路径,可以用File菜单中的 Set path 观察和修改路径
    % quit 退出工作区可以用,也可选择File菜单中Exit命令
    %
    % 键盘操作部分
    % ↑/Ctrl+p 重调前一行 (用于调出前面的命令进行修改,重新计算)
    % ↓/Ctrl+n 重调下一行
    % →/Ctrl+b 向前移一个字符
    % ←/Ctrl+f 向后移一个字符
    % Ctrl+→ 右移一个字
    % Ctrl+← 左移一个字
    % Home 移动到行首
    % End 移动到行尾
    % Esc 清除一行
    % Del 删除光标后的字符
    % Backspace 删除光标前的一个字符
    % Ctrl+k 删除到行尾
    % help 查看当前帮助系统
    % look for 关键字查找,若是要全文搜索,需要加上 -all
    % 模糊查询: 输入关键字,然后按tab键,系统会列出这几个关键字开头的命令
    %
    % 三种基本数据类型:
    % 1.数值型数据:输入的数据为数值数据,包括实数和负数
    % 2.字符串数据: 用英文格式单引号加以界定的数字,字符,各种符号,表达式,方程式和汉字等
    % 3.符号型数据: 用sym或syms把字符、表达式、方程、矩阵等定义成数学符号,运算结果为数学表达式
    %
    % 变量符号的命名规则基本类似与JAVA,大小写是区分的,长度不能大于63个。
    %
    % 表达式使用示例:
    % x = sin(pi/4) (若省略“=”,系统自动建立一个名为ans的变量)
    % x = sin(pi/4); 若以分号结束,则只进行计算不会马上显示结果,但是不写分号,则会马上显示结果
    % 一行中若是写几个语句,他们之间要用逗号或分号隔开
    % 表达式的变量需要先定义后使用!
    %
    % 符号变量的声明: syms sym
    % syms a1 a2 a3
    % a1,a2,a3是需要定义为符号变量的标识符,不能是数字、函数表达式或方程式。
    % 变量a1,a2,a3,不能用引号界定,而是用“空格”隔开
    %
    % x = sym(1/2),y = sym('1/2'), z = sym('sin(x)+exp(x)')
    % 显然,sym定义的字符参量可以是数字,字符串,也可以是字符串变量名,字符表达式或字符方程
    %
    % eg 2: 求极限
    % lim [x^(1/m)-a^(1/a)]/x-a , x->a

    syms x a;
    y = sym('[x^(1/m)-a^(1/a)]/x-a')
    limit(y,x,a)

    % MATLAB的固定变量:
    % ans 用于结果的缺省变量名
    % i j 虚数单位,定义为根号-1
    % pi 圆周率
    % Inf 无穷大,如1/0
    % NaN 不确定量 如0/0
    % realmin 最小正实数 2.225073858507201×10-308
    % realmax 最大正实数 1.797693134862316×10+308
    %
    % 对变量操作的命令
    % who 显示当前工作空间中所有变量的一个简单列表
    % whos 列出变量的大小、数据格式等详细信息
    % clear 清除指定变量
    % save 文件名 变量名 将变量列中所列出的变量保存到磁盘文件中,变量列表中,各个不同的变量之间不能用逗号,只能用空格来分隔
    % load 文件名 变量名 将以前用save命令保存的变量从磁盘文件中调入MATLAB工作空间
    %
    %
    % MATLAB主要操作之一:矩阵
    % 常用操作矩阵的变量的方法:
    % 1.在命令窗口中输入
    % 2.语句生成
    % 3.函数生成
    % 4.小矩阵生成大矩阵
    %
    % 使用原则:
    % 1.矩阵的元素排列在方括号内
    % 2.按行输入,每行内的元素使用空格或逗号分隔
    % 3.行与行之间用分号,或回车键隔开
    % 4.矩阵生成不但可以使用纯数字(含复数),也可以使用变量和表达式
    %
    % 方括号表达式示例: A = [ 1,2,3;4,5,6;7,8,9]
    % 语句生成示例: B = a:h:b 或 B = [a:h:b]
    % 其中a为初始值,h为步长,b为终止值。当步长为1时可省略h参数,另外h也可以取负数
    % C = linspace(a,b,n) 等价于 C = a:(b-a)/(n-1):b
    % 意义是:在线性空间上,行矢量的值从a到b,数据个数为n,缺省则n默认为100.
    %
    % 常用创建矩阵的函数:
    % ones(m,n) 产生m x n的全1矩阵
    % zeros(m,n) 产生m x n的全0矩阵
    % rand(m,n) 产生m x n的随机矩阵
    % eye(m,n) 产生m x n的对角线全1矩阵
    % length(X) 返回矩阵最长的维的维度
    % size(X) 返回矩阵每一维的长度
    %
    % 4.小矩阵生成大矩阵示例:
    % a = [ 1,2;3 4]
    % c = [a a+2 3*a a-2]
    % c =
    % 1 2 3 4
    % 3 4 5 6
    % 3 6 -1 0
    % 9 12 1 2
    %
    %
    % 矩阵的引用:
    % 一.引用矩阵元素
    % 1.通过下表引用矩阵元素
    % 2.矩阵元素的序号来引用矩阵元素。按列排序,m x n 矩阵A,矩阵元素A(i,j)的序号为(j-1)*m + i (m为列的长度)
    % 二.矩阵的拆分
    % 1.A(:,j)
    % A(:,j)表示取A矩阵的第j列全部元素;
    % A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;
    % A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素;
    % A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素
    %
    %
    % MATLAB对数值矩阵的两种不同的运算方法:
    % 矩阵算法
    % 把矩阵看作一个整体,各种运算完全按照线性代数代表的矩阵运算法则进行,运算的书写形式和运算符号都与矩阵理论完全相同。
    % 数组算法
    % 把矩阵看作由其元素构成的一组数据(数组),各种运算是在参与运算矩阵的对应元素之间进行的数与数的运算,这种运算方便对大批数据的处理和一次求出多个函数值。
    % 数组算法的运算符主要有 .* ./ . .^
    %
    % MATLAB运算符:
    % + 加 A+B A B必须大小相同,或一个是标量
    % - 减 A-B A B必须大小相同,或一个是标量
    % * 矩阵乘 A*B A 的列数等于B的行数
    % .* 数组乘 A.*B A B必须大小相同
    % 矩阵左除 AB =A-1* B 等效于A*X=B求X A-1=inv(A)
    % . 数组左除 A.B Bij/Aij
    % / 矩阵右除 A/B =A*B-1 等效于X*B=A求X
    % ./ 数组右除 A./B Aij/Bij
    % ^ 矩阵乘方 A^m A自乘m次
    % .^ 数组乘方 A.^m A中每个元素的m次方
    %
    % 总结:1.直接使用运算符是矩阵运算,前面带小数点为数组计算。
    % 2.矩阵运算的结果是由原本的矩阵得到一个新的矩阵,而数组运算是对原本矩阵的矩阵中的元素做对应的运算
    %
    %
    % 关系运算符:
    % ==
    % ~=
    % >
    % <
    % >=
    % <=
    %
    % 逻辑运算符:
    % &
    % |
    % !
    % 说明:逻辑运算认定任何非零的元素都为真“1”,任何零元素都为假“0”.
    %
    % 转置:
    % A' —— 共轭转置(将矩阵中的每个元素取共轭复数,再转置)
    % A.' —— 普通转置(直接对矩阵做转置)
    %
    % 逆矩阵与行列式计算:
    % 求 逆: inv(A)
    % 求行列式: det(A)
    % 注意:这两种运算都要求矩阵A为方阵!
    %
    % 矩阵下标说明:MATLAB的矩阵中不同于其他语言,矩阵的下标从1开始,而不是从0开始!
    %
    % 重点1:四则运算与幂运算
    % 1.只有维数相同的矩阵才能进行加减运算
    % 2.只有当两个矩阵中前一个矩阵的列数和后一个矩阵的行数相同时,才可以进行乘法运算。
    % 3.a运算等效于求a*X=b的解,而a/b等效于求x*b=a的解。(这一条可以用来求方程的解)
    % 4.只有仿真才可以求幂
    % 5.点运算是两个维数相同矩阵对应元素之间的运算。
    %
    % 特殊矩阵之对角矩阵:V = [a1,a2,a3···,an]
    % A = diag(V)
    % A = a1 0 0·
    % 0 a2 0 0
    % 0 0 a3·
    % · · ·an
    %
    % 数值显示格式控制:Format命令
    % format(short) : 短格式(5位定点书)99.1253
    % format long : 长格式(15位定点书)99.123456789000000
    % format short e : 短格式e方式 9.91e+001
    % format long e : 长格式e方式 9.912345678900000e+001
    % format bank : 2位十进制(小数部分)99.12
    % format hex : 十六进制格式
    %
    % 重点一:求线性方程的解:
    % x1 + 4*x2 - 7*x3 + 6*x4 = 0
    % 2*x2 + x3 + x4 = -8
    % x2 + x3 + 3*x4 = -2
    % x1 + x3 - x4 = 1
    %
    % 实际代码:
    A = [1 4 -7 6;0 2 1 1;0 1 1 3;1 0 1 -1]
    B = [0;-1;-2;1]
    x = AB

    % MATLAB绘图篇:
    % help graph2d可以得到所用画二维图形的命令
    % help graph3d可以得到所用画三维图形的命令
    %
    % 一:绘制二维图形
    % 格式:
    % plot(X,'S')
    % plot(X,Y,'S')
    % plot(X1,Y1,'S1',X2,Y2,'S2'···,Xn,Yn,'Sn')
    % 说明:
    % 参数‘S’控制数据点的 标记 曲线类型 和 曲线色彩 , 三者置于一对单引号内。
    %
    % 常用的绘图选项:
    % - 实线 * 用星号标出数据点
    % -- 虚线 . 用点号标出数据点
    % : 点线 。 用圆圈号标出数据点
    % -. 点划线 x 用叉号标出数据点
    % b 蓝色 + 用加号标出数据点
    % g 绿色 s 用正方形标出数据点
    % r 红色 D 用菱形出数据点
    % c 青色 V 用下三角标出数据点
    % m 洋红 ^ 用上三角标出数据点
    % y 黄色 < 用左三角标出数据点
    % k 黑色 > 用右三角标出数据点
    % w 白色 H 用六角形标出数据点
    % P 用五角形标出数据点
    %

    % 格式一:plot(X,'S')
    % 说明:
    % 当X是实向量时,以该向量元素的下标为横坐标,元素值为纵坐标画出一条连续曲线。
    % 当X是实矩阵时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于输入参数矩阵的列数。
    % 示例:
    x=0:0.1:2*pi;%length(x)=63
    y1=sin(x);
    y2=cos(x);
    y=[y1',y2'];
    z=[y1;y2];
    figure(1)
    plot(y1 ,'--r+')
    figure(2)
    plot(y)
    figure(3)
    plot(z)

    % 格式二:plot(X,Y,'S')
    % 说明:
    % 当X和Y为向量时,长度必须相同,分别用于存储x坐标和y坐标数据。
    % 当X是向量,Y是有一维与X同维的矩阵时,则绘制出多根不同颜色的曲线。曲线条数等于Y矩阵的另一维数,X被作为这些曲线共同的横坐标。
    % 示例:
    x=0:0.1:2*pi;
    y=[sin(x);cos(x)];
    figure(1)
    plot(x,y(1,:))
    figure(2)
    plot(x,y)

    % 格式三:
    % plot(X1,Y1,′S1′,X2,Y2,′S2′ ,......,X3,Y3,′S3′)
    % 说明:
    % 当输入参数都为向量时,X1和Y1,X2和Y2,…,Xn和Yn分别组成一组向量对,
    % 每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以
    % 在同一坐标内绘制出多条曲线。
    % 示例:
    x=0:0.1:2*pi;
    y=[sin(x);cos(x)];
    plot(x,y(1,:),′-r′,x(10:60),y(2,10:60),′--ko′)

    % 格式四:绘制 y = f(X)图形
    % fplot(fname,lims,'S')
    % 说明:
    % 其中fname为函数名或单引号界定的函数表达式,
    % lims为x,y的取值范围,′S′定义与plot函数相同。
    % 示例:
    fplot('cos(tan(pi*x))',[ 0,1],'-ro')

    % 格式五:绘制隐函数图形 f(x,y)= 0
    % 方式一:ezplot(f,[xmin,xmax,ymin,ymax])
    % 说明:
    % 在区间xmin<x<xmax和ymin<y<ymax绘制f(x,y) = 0的图形。,默认区间-2π<x<2π和-2π<y<2π
    % 方式二: x=X(t) , y = Y(t)
    % ezplot(X,Y,[tmin,tmax])
    % 说明:
    % 在区间tmin < t < tmax 绘制 x = X(t)和y = Y(t)的图形,默认区间0< t < 2PI
    % 方式三: y = f(x)
    % ezplot(f,[a,b])
    % 说明:
    % 在区间a<x<b绘制y= f(x)的图形,默认区间-2π<x<2π
    % 示例:
    ezplot('x^2+y^2-9',[-3 3 -3 3]),axis equal
    ezplot('8*cos(t)','4*sqrt(2)*sin(t)',[0,2*pi])
    ezplot('cos(tan(pi*x))',[ 0,1])

    % 特殊坐标二位图形
    % 1.极坐标曲线
    % 格式: polar(theta,rho,'S')
    % theta:角度向量,rho:幅值向量,‘S’控制参数
    % 示例:
    theta=0:0.1:8*pi;
    r=cos(4*theta)+1/4;
    polar(theta,r)

    % 对角坐标曲线 (用法与plot相同)
    % 函数名 功能
    % semilogx x轴对数坐标,y轴线性坐标
    % semilogy x轴对数坐标,y轴线性坐标
    % loglog x y轴均为对数坐标
    % 示例:
    x=0:0.01:5;
    y=10.^x;
    plot(x,y),grid on

    x=0:0.01:5;
    y=10 .^x;
    semilogy(x,y)
    grid on

    % 二维图形处理
    % 标注方式:
    % title(′图形名称′)
    % xlabel(′x轴说明′)
    % ylabel(′y轴说明′)
    % text(x,y,′图形说明′)
    % legend(′图例1′,′图例2′,...)
    %
    % 函数中的说明文字,除使用标准的ASCII字符外,还可使用LaTeX格式的控制字符,这样就可以在图形上添加希腊字母、数学符号及公式等内容。例如,text(0.3,0.5, ′sin({omega}t+{eta}) ′)将得到标注效果sin(ωt+β)。
    % 上述函数除legend外,均可以用于三维函数。
    %
    % 示例:
    x=[0:0.1:2*pi];
    plot(x,sin(x),x,cos(x))
    title(′正弦和余弦曲线′);
    xlabel(′θ(弧度)′)
    ylabel(′y′)
    text(3,0.5,′sinθ cosθ 曲线′);
    legend(′sinθ′,′cosθ′);
    %
    % 坐标控制:axis函数
    % 主要格式
    % axis([xmin xmax ymin ymax zmin zmax])
    % axis equal:纵、横坐标轴采用等长刻度。
    % axis auto:使用缺省设置。
    % axis off:取消坐标轴。
    % axis on:显示坐标轴。
    %
    % grid on/off:控制是否画网格线。
    % hold on/off 控制是否刷新当前轴及图形
    %
    % 示例:
    t=0:0.1:2*pi;
    plot(sin(t),cos(t))
    hold on
    plot(t/2/pi,sin(t),'r')
    plot(-t/2/pi,sin(t),'r')
    grid on;
    axis equal
    %
    % 二.三维图形的基本函数
    % 1.三维曲线图
    % plot3函数
    % 格式:Plot3(x1,y1,z1, ′S1′, x2,y2,z2, ′S2′, …xn,yn,zn, ′Sn′)
    % 示例:画画螺旋线
    t=-pi:0.1:8*pi;
    x=sin(t);
    y=cos(t);
    plot3(x,y,t,′-r′)
    xlabel(′sin(t)′);
    ylabel(′cos(t)′);
    zlabel(′t′)
    %
    % 2.三维网格图
    % meshgrid函数:产生平面区域内的网格坐标矩阵
    % 格式: [X,Y]=meshgrid(A,B)
    % 说明:
    % 语句执行后,矩阵X的每一行都是向量A,行数等于向量B的元素的个数,矩阵Y的每一列都是向量B,列数等于向量A的元素的个数。
    %
    % mesh函数
    % 格式:mesh(x,y,z)
    % 说明:一般情况下,x,y,z是维数相同的矩阵。x,y是网格坐标矩阵,z是网格点上的高度矩阵。
    % 示例:三维网格图
    [x,y]=meshgrid(0:0.08:2*pi);
    z=sin(x).*cos(y);
    figure(1)
    mesh(x,y,z)
    xlabel('x'),ylabel('y')
    zlabel('sin(x)cos(x)')
    grid on,box on
    figure(2)
    mesh(z),box on
    %
    % 3.三维曲面图
    % 格式:surf(x,y,z)
    % 示例:
    [x,y]=meshgrid(0:0.08:2*pi);
    z=sin(x).*cos(y);
    surf(x,y,z)
    zlabel(′sin(x)cos(x)′)
    grid on
    box on
    % 示例:显示夫琅禾费衍射图样
    %
    w=3e-5;
    lamda=6.328e-7;
    z=1e5;
    A=pi*w^2;
    k=2*pi/lamda;
    a=linspace(-4000,4000,401);
    [x,y]=meshgrid(a);
    r=sqrt(x.^2+y.^2);
    m=k*w.*r/z;
    I=(A/lamda/z)^2 * ( 2*besselj(1,m)./m ).^2;
    J=max(max(I));
    I=I./J;
    figure(1)
    surf(x,y,I)
    xlabel('x'),ylabel('y'),zlabel('I')
    shading(‘interp’)%色彩效果
    colormap(jet),colorbar
    axis([-4000 4000 -4000 4000 0 1])

    figure(2)
    plot(x(1,:),I(201,:))
    xlabel('x'),ylabel('I')
    axis([ -4000 4000 0 1])
    %
    % 4.图形窗口和分割
    % 在实际应用中,有时需要在不同图形窗口或一个图形窗口中绘制若干个独立的图形,
    % 这就需要选取不同的图形窗口或对图形窗口分割。
    % figure函数
    % 格式: figure(n)
    % 说明:
    % 该函数打开不同的图形窗口。
    % n为图形窗口排序号。
    % 默认时打开的是1号图形窗,即当前窗。
    %
    % 示例:
    t=linspace(0,2*pi,50);
    figure(1)
    plot(t,sin(t))
    figure(2)
    plot(t,cos(t))

    % 在实际应用中,有时需要在一个图形窗口中绘制若干个独立的图形,这就需要对图形窗口分割。
    % subplot函数
    % 格式:subplot(m,n,p)
    % 说明:
    % 该函数将当前图形窗口分成m×n个绘图区,即每行n个,共m行。
    % 区号按行优先编号,且选定第p个区为当前活动区。
    % 在每一个绘图区允许以不同的坐标系单独绘制图形。
    %
    % 示例:
    t=0:0.1:2*pi;
    subplot(2,2,1)
    plot(t,sin(t),’-r’)
    title(′x=sin(t)′);
    xlabel(′t′)
    ylabel(′sin(t)′)
    subplot(2,2,2);
    plot(t,cos(t),′-b′)
    title(′y=cos(t)′);
    xlabel(′t′)
    ylabel(′cos(t)′)
    subplot(2,2,3);
    [X,Y]=meshgrid(0:0.1:2*pi);
    Z=sin(X).*cos(Y);
    surf(X,Y,Z)
    zlabel(′sin(t)cos(t)′)
    title(′z=sin(t)*cos(t)′);
    subplot(2,2,4)
    mesh(X,Y,Z)
    xlabel(′sin(t)′)
    ylabel(′cos(t)′)
    zlabel(′sin(t)cos(t)′)
    title(′z=sin(t)*cos(t)′);

    % 5.简单动画
    % (1)质点运动轨迹的显示
    % comet函数
    % 格式:
    % comet(x)
    % comet(x,y)
    % comet(x,y,p)
    % 说明:
    % comet(x)显示质点绕向量x运动
    % comet(x,y)显示质点绕向量x与y运动
    % comet(x,y,p),其中为p轨迹尾巴的长度,缺省值为P=0.1
    % 示例:模拟上抛运动
    % V(x)=100cos(pi/4)
    % V(y)=100sin(pi/4)
    % x = V(x)*t
    % y = V(y)*t - 1/2*g*t*t
    %
    vx = 100*cos(1/4*pi);
    vy = 100*sin(1/4*pi);
    t = 0:0.001:15;
    x = vx*t;
    y = vy*t-9.8*t.^2/2;
    comet(x,y)

    % (2)以电影播放的方式显示动画
    % 保存想要产生动画的图片,存储为一系列各种类型的二维、三维图,再像放电影的方式按次序播放出来
    % 步骤:
    % 由getframe函数将当前的图片抓取为电影的画面,存入矩阵中。
    % 再由movie函数将矩阵 中的画面以动画显示出来
    % 格式: m(j) = getframe
    % movie(m)
    % 示例:演示驻波
    a=50;w=0.2;v=3.64;
    for t=1:100
    x=0:1:80*pi;
    y=a*cos(w*(t-x./v)+pi/2);
    z=a*cos(w*(t+x./v));
    plot(x,y,x,z,x,y+z);
    axis([0 80*pi -100 100]);
    grid on;
    m(t)=getframe;
    end
    movie(m)

    %
    %
    % MATLAB的工作模式:
    % 1.指令驱动模式
    % 通常matlab以指令驱动模式工作,即在matlab 窗口下当用户输入单行指令时,matlab 立即处理这条指令,并显示结果,这就是matlab命令行模式。
    % ?命令行模式操作时,matlab窗口只允许一次执行一行上的一个或几个语句
    % 在matlab窗口输入数据和命令进行计算时,当处理复杂问题和大量数据时是不方便的。
    % 命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文件。
    %
    % 2.m文件模式
    % m文件是matlab所特有的使用该语言编写的磁盘文件。
    % 将matlab语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。
    % 程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。
    %
    % M文件有两类:
    % 1.脚本文件(Script File) : 独立的m文件
    % 2.函数文件(Function File): 可调制的m文件
    % 脚本文件是一串matlab命令的集合,完成制定的功能,变量空间是workspace;
    % 脚本文件既不接受输入参数也不返回输出参数,脚本文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。
    % 函数文件是一个黑箱,根据输入作出输出,变量空间是独立的函数变量空间,在函数运行完成后关闭。
    %
    % M文件建立:
    % 1.命令行输入edit
    % 2.新建文件
    %
    % 1.脚本文件包括两部分:注释部分和程序部分
    % a.m
    % %绘制sin(x)*cos(x)图形
    % x=0:0.1:4*pi;
    % y=sin(x).*cos(x);
    % plot(x,y)
    % %注释部分,用以说明函数的作用及有关内容,使用help命令时显示。只显示程序中的第一句注释语。
    %
    % 2.函数文件:指能够接受并输出参数的m文件
    % 函数文件的格式:
    % function 输出形参表=函数名(输入形参表)
    % 注释说明语句段
    % 程序语句段
    % 说明:
    % 1.函数m文件第一行必须以单词function作为引导词。
    % 2.函数文件的文件命名规则与变量相同,必须是函数名 .m。
    % 3.当输出形参多于一个时,须用方括号括起来,以矩阵形式表示。
    % 4.程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。
    % 示例:
    % peri_area.m
    function [l s]=peri_area(r)
    %计算圆的周长和面积
    l=2*pi*r; %周长
    s=pi*r.^2; %面积
    [a,b] = per_area(3);
    %
    % MATLAB的程序结构:(与C语言类似)
    % 1.顺序结构
    % 2.选择结构
    % 3.循环结构
    %
    % 一.顺序结构
    % (1)数据的输入
    % input 函数
    % 调用格式
    % A = input('提示信息'.'选项')
    % 说明:选项用于控制输入数据格式,‘s’允许输入字符串。
    % 除了字符串输入需要加‘s’,其余的一律不加(如果不加想要输入字符串,则需要‘’包裹输入的字符串)
    %
    % (2)数据的输出
    % disp 函数
    % 调用格式
    % disp(输出项)
    % 说明:
    % 输出项可以是变量或字符串。
    % 输出变量时,不显示变量名。
    %
    % sprintf函数
    % 调用格式
    % S = sprintf(格式,输出项)
    % 说明:
    % 输出格式控制同c语言
    % 输出项可以是变量或表达式
    % 示例:输出格式控制
    x=pi;m=2;
    sprintf('x1=%f x2=%4.3f x3=%10.9f', (1+sqrt(5))/2,x,pi)
    sprintf(‘%d’,round(x)) %不显示小数点后面的数字
    sprintf('%s','hello')
    S=sprintf('The array is %dx%d.',m,3) ;
    disp(S)

    % 重点再次回顾:
    %解一元二次方程
    %a b c方程系数
    %x1 x2为方程的根
    disp('pls input a b c')
    a=input('a=');
    b=input('b=');
    c=input('c=');
    d=b*b-4*a*c;
    x1=(-b+sqrt(d))/(2*a);
    x2=(-b-sqrt(d))/(2*a);
    disp('x1 x2 is')
    disp([x1,x2])
    disp(sprintf('x1=%6.5f x2=%6.5f',x1,x2))

    % (3)程序的暂停
    % pause函数
    % 调用格式
    % pause(延迟秒数)
    % 说明:
    % 如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。
    % 若要强行中止程序的运行可使用Ctrl+C命令。
    %
    % 二。选择结构
    % (1)if语句
    if 条件1
    语句组1
    elseif 条件2
    语句组2
    ……
    elseif 条件m
    语句组m
    else
    语句组n
    end
    % (2)switch语句
    switch 表达式
    case 表达式1
    语句组1
    case 表达式2
    语句组2
    ……
    case 表达式m
    语句组m
    otherwise
    语句组n
    end
    % try语句
    try
    语句组1
    catch
    语句组2
    end

    % 示例
    A=[1,2,3;4,5,6]; B=[7,8,9;10,11,12];
    try
    C=A*B;
    catch
    C=A.*B;
    end
    C
    erro=lasterr%显示出错原因

    % 三。循环结构
    % (1)for语句
    % 格式
    % for 循环变量=表达式1:表达式2:表达式3
    % 循环体语句
    % end
    % 说明:
    % 表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。
    % 步长为1时,表达式2可以省略。
    % (2)while语句
    % while(条件)
    % 循环体语句
    % end
    % 说明:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环
    %
    % break和continues语句
    % break:用于终止循环的执行。
    % continue: 直接进行下一次循环
    % 示例:
    %计算100~200之间第一个能被21整除的整数
    for n=100:200
    if rem(n,21)~=0 %rem(x,y) :计算x./y的余数
    continue
    end
    break
    end
    n

    % 一、MATLAB文件的打开和关闭
    % (1)文件的打开
    % 格式: fid = fopen(文件名,打开方式)
    % 说明:
    % 其中文件名用字符串形式,表示待打开的文件。
    % 常见的打开方式有:
    % ′r′表示对打开的文件读数据;
    % ′r+′表示读写;
    % ′w′删除已经存在的文件内容或建立一个新文件,并打开文件写;
    % ′w+′删除已经存在的文件内容或建立一个新文件,读写;
    % ′a′表示在打开的文件末尾添加数据。
    % fid用于存储文件句柄值,句柄值用来标识该数据文件,其它函数可以利用它对该数据文件进行操作。
    %
    % (2)文件的关闭
    % 格式 sta = fclose(fid)
    % 说明:该函数关闭fid所表示的文件。
    % sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回–1。
    %
    % 二、文件的读写操作
    % 文件数据格式有两种形式,一是二进制文件,二是文本文件。对不同类型的文件读写是不同的。
    %
    % (1)二进制文件的读写操作
    % 读二进制文件
    % 格式 [A,COUNT]=fread(fid,size, precision)
    % 说明:
    % A用于存放读取的数据。
    % COUNT返回所读取的数据元素个数
    % fid为文件句柄
    % precision代表读写数据的类型:′int′ ′float′ ′char′等
    % size为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值: (
    % 1) N表示读取 N个元素到一个列向量。
    % (2) [M,N]表示读数据到M×N的矩阵中,数据按列存放。
    %
    % 写二进制文件
    % 格式: COUNT=fwrite (fid, A, precision)
    % 说明:
    % COUNT返回所写的数据元素个数。
    % fid为文件句柄。
    % A用来存放写入文件的数据,
    % precision用于控制所写数据的类型,其形式与fread函数相同
    %
    % (2)文本文件的读写操作
    % 读文本文件
    % 格式 A = fscanf(fid,format)
    % [A,COUNT] = fscanf(fid,format,size)
    % 说明:
    % A用以存放读取的数据。
    % COUNT返回所读取的数据元素个数。fid为文件句柄。
    % format用以控制读取的数据格式,由%加上格式符组成,常见的格式符有%d,%f,%e,%c,%s等。
    % size为可选项,决定矩阵A中数据的排列形式。
    %
    % 写文本文件
    % 格式: COUNT= fprintf(fid, format, A)
    % 说明:
    % A存放要写入文件的数据。
    % 先按format指定的格式将数据矩阵A格式化,然后写入到fid所指定的文件。格式符与fscanf函数相同。
    %
    % 示例:文件的操作
    clear
    x=0:0.1:2*pi;
    fid=fopen('example.mat','w+')
    count=fwrite(fid,x,'float')
    fclose(fid)
    fid1=fopen('example.mat','r+')
    t=fread(fid1,'float');
    y=[t,sin(t)];
    plot(t,y(:,2))
    fclose(fid1)
    %
    %
    % 二、函数的调用
    % 格式
    % [输出实参表]=函数名(输入实参表)
    % 说明:
    % 函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。
    % 函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。
    % 示例:利用函数文件,实现直角坐标和极坐标的转换

    %定义函数文件tran.m:
    function [rho,theta]=tran(x,y)
    rho=sqrt(x*x+y*y);
    theta=atan(y/x);


    %调用tran.m的命令文件exam406.m
    x=input('Please input x=:');
    y=input('Please input y=:');
    [rho,theta]=tran(x,y);
    rho
    theta

    %
    % 函数参数的可调性
    % nargin和nargout
    % 说明:
    % 在调用函数时,用nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。
    % 只要在自定义函数文件中包含这两个函数,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。
    % nargin和nargout用法示例:
    %定义函数文件sumproduct.m:
    function [out1,out2]=sumproduct(x,y,z)
    if nargin==0
    disp('no input arguments'),return
    elseif nargin==1
    sum=x;product=x;
    elseif nargin==2
    sum=x+y;product=x.*y;
    elseif nargin==3
    sum=x+y+z;product=x.*y.*z;
    else
    disp('too many input arguments')
    end

    if nargout==0
    return
    elseif nargout==1
    out1=sum;
    else
    out1=sum;out2=product;
    end

    %调用sumproduct.m
    sumproduct
    [x,y]=sumproduct(1,2,3)
    [x,y]=sumproduct(1)
    x=sumproduct(1,2,3)
    [x,y]=sumproduct(1,2,3,4)


    % 定义全局变量
    % globle X
    % 说明:
    % 说明:
    % 全局变量名一般用大写。
    % 自定义函数文件中的变量,作用区域仅在函数内部。对于自定义函数中的一些公用变量,可以定义成全局变量,在主程序中统一定义.
    % global用法示例:
    function y=Ep(x)
    %计算弹性势能
    global K
    y=K*x.^2/2;

    function f=F(x)
    %计算弹力
    global K
    f=K*x;

    %计算exam408.m
    global K
    K=0.01;
    x=input('Please input x=');
    ep=Ep(x)
    f=F(x)

    % 来自臧小飞老师在最后留下的话:
    % 良好的编程习惯:
    % 在动手编程之前,明确程序的目的,设想解决方案,作出初步的流程图。如果程序较大,就要把程序分成几个相对独立的模块,各司其职。一个一个模块解决。
    % %后面的内容是程序的注解,要养成注释程序的习惯,在关键的命令行,变量定义处必须要有注释,在整个程序开头有一个总结性的注释。这样便于自己或别人查看和修改程序。
    % 变量命名规则要统一, 含义清晰。
    % 编辑m文件要注意排版,这可以使程序层次变得更清晰,有序,增加程序的可读性。
    % 养成在主程序开头用clear指令清除变量的习惯,以消除工作空间中其它变量对程序运行的影响。但注意在函数或子程序中不要用clear。
    % 参数值要集中放在程序的开始部分,以便维护。在语句行之后输入分号使其中间结果不在屏幕上显示,以提高执行速度。
    % input指令可以用来输入一些临时的数据;而对于大量参数,则通过建立一个存储参数的子程序,在主程序中用子程序的名称来调用。
    % 程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的操作。
    % 设置好MATLAB的工作路径,以便程序运行。
    %
    % 提升MATLAB的运行效率
    % 1. 尽量避免使用循环
    % a.尽量用向量化的运算来代替循环操作。
    % b.在必须使用多重循环时下,则在循环的外环执行循环次数少的,内环执行循环次数多的。这样可以显著提高速度。
    % 2.预分配矩阵空间,即事先确定变量的大小、维数。
    % 这一类的函数有zeros、ones等。
    % 3. 将耗时的循环调用C或fortrun等低级语言运算
    % 4.改用更有效的算法
    %
    % 最后一道题:输出100-200之间第三个被15整除的数
    % x=100:200; n=find(rem(x,15)==0); X=x(n(3))
    %
    %
    % 往年期末考试习题:
    % 以两种方式求线性方程组的解:
    % x1 + 2*x2 - 7*x3 + 6*x4 = 0
    % 2*x2 + x3 + x4 = 6
    % 4*x2 - 7*x3 + 2*x4 = 7
    % 2*x2 - 2*x3 + x4 = 4
    % X=AB
    % 在一个图形窗口中绘制直线、圆、极坐标和曲面图四个独立的图形,数据自设,要求图形标注完整。
    % 实现上抛和平抛运动的动画演示(速度,时间自设)。
    % 输出[100,300]之间第3个能被13整除的整数,另将该 数值范围内所有能被13整除的整数输出。
    % Created by Andrew Duan 2016.10.17 00:27:52

  • 相关阅读:
    [转载]重构代码的7个阶段
    查看JDK源码
    敏捷结果30天之第七天:设定边界值和缓冲
    敏捷结果30天之第十一天:高效能、慢生活
    他们到底需要神马???——戏说“用户需求”
    敏捷结果30天之第一天:总体认识敏捷结果方法
    敏捷结果30天之第五天:使用热图标识出重要事情
    重构代码学习笔记一:重构的原则
    开发可统计单词个数的Android驱动程序(2)
    使用Android NDK和Java测试Linux驱动
  • 原文地址:https://www.cnblogs.com/thinfog/p/5969370.html
Copyright © 2020-2023  润新知