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必须大小相同

% \ 矩阵左除 A\B =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\b运算等效于求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 = A\B

% 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+{\beta}) ′)将得到标注效果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\nx3=%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\nx2=%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;

fexample.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=A\B

% 在一个图形窗口中绘制直线、圆、极坐标和曲面图四个独立的图形,数据自设,要求图形标注完整。

% 实现上抛和平抛运动的动画演示(速度,时间自设)。

% 输出[100,300]之间第3个能被13整除的整数,另将该 数值范围内所有能被13整除的整数输出。

% Created by Andrew Duan 2016.10.17 00:27:52