% 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;
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=A\B
% 在一个图形窗口中绘制直线、圆、极坐标和曲面图四个独立的图形,数据自设,要求图形标注完整。
% 实现上抛和平抛运动的动画演示(速度,时间自设)。
% 输出[100,300]之间第3个能被13整除的整数,另将该 数值范围内所有能被13整除的整数输出。
% Created by Andrew Duan 2016.10.17 00:27:52

MATLAB入门笔记的更多相关文章

  1. matlab入门笔记(六):编程基础之M文件

    摘自<matlab从入门到精通>胡晓东 在Matlab中,用户可以在命令行中直接输入命令,从而以一种交互式的方式来编写程序.这种方式适用于命令行比较简单,输入比较方便,同时处理的问题较少的 ...

  2. matlab入门笔记(二):矩阵和数组

    摘自<matlab从入门到精通>胡晓东 matlab最基本的数据结构就是矩阵,一个二维的.长方形形状的数据,可以用易于使用的矩阵形式来存储,这些数据可以是数字,字符.逻辑状态,甚至是mat ...

  3. matlab入门笔记(一):常用快捷键

    摘自<matlab从入门到精通>胡晓东 matlab命令窗口常用快捷键与命令 matlab的工作空间和变量编辑窗口 搜索命令help和look for

  4. Matlab入门笔记(1)

    1.简单练习题: cos(((1+2+3+4+5)^3/5)^0.5) sin(pi^0.5)+log(tan(1)) 2^(3.5*1.7) exp(sin(10)) 2.实数,复数,行向量,列向量 ...

  5. matlab入门笔记(七):数据文件I/O

  6. System Generator入门笔记

    System Generator入门笔记  [CPLD/FPGA] 发布时间:2010-04-08 23:02:09  System Generator是Xilinx公司进行数字信号处理开发的一种设计 ...

  7. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  8. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  9. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

随机推荐

  1. XML基础学习

    XML 信息传输工具 标签未被预定义 具有自我描述性 W3C的推荐标准 XML  HTML的差异 XML:传输 存储数据 HTML:显示数据 树结构 <root> <child> ...

  2. Linux df -h空间显示不正确

    今天发现一个测试数据库磁盘空间快满了,准备将几个不再用的表空间删除.通过以下命令删除表空间内容及数据文件. drop tablespace tablespace_name including cont ...

  3. c++中函数指针作为int传递

    int f() { ; } typedef int (*method)(); int _tmain(int argc, _TCHAR* argv[]) { int value = (int)& ...

  4. DataGrip for Mac破解步骤详解 亲测好用

    https://blog.csdn.net/le945926/article/details/81912085

  5. Beginning Math and Physics For Game Programmers (Wendy Stahler 著)

    Chapter 1. Points and Lines (已看) Chapter 2. Geometry Snippets (已看) Chapter 3. Trigonometry Snippets  ...

  6. 树莓派3 Raspberry系统安装samba

    默认Raspberry不自带samb,需要手动安装. 如果默认的rasp源不好用的话,可以使用下面从网上找的: deb http://mirrors.cqu.edu.cn/Raspbian/raspb ...

  7. linux路由

    https://www.cnblogs.com/luckyall/p/6418965.html https://www.cnblogs.com/dapaitou2006/p/6564622.html一 ...

  8. Django之 HelloWorld

    1.C:\Users\andy>django-admin startproject sundyblog   ## 创建项目     C:\Users\andy>cd sundyblog2. ...

  9. Ubuntu16.04下安装xunsearch+opencc实现php客户端的中文分词

    1.准备服务器环境 apt-get install apache2 php mysql-server apt-get install mysql-client phpmyadmin apt-get i ...

  10. 前端SEO与爬虫与SSR(Server Side Render)

    讲真,之前没考虑过这个问题.因为项目原因,自己用python的一些工具,爬取了淘宝.京东.百度等的一些图片和图片名称之类的信息.以为爬虫只是解析html文本,然后提取关键字,保存自己想要的信息即可,或 ...