一,MATLAB的流程控制结构
利用流程控制,可以编写出复杂程序。
MATLAB支持的流程结构:
循环结构,转移结构,开关结构,试探结构
1.for循环结构
for i=v, loop programs body(循环体),end
i是循环变量,v为一个向量。循环变量i每次从v向量中取一个数值,执行一次循环体的内容,如此下去,直至执行完v向量中所有分量。
v的内容可以任意排列。
C语言中类似的结构
for (i=0;i<=n-1;i++) loop programs body(循环体)
2.while循环结构
while(condition)
loop struction body,
end
for和while结构侧重点不同,while结构的特点是可以设置出口。
Eg:用循环求解
①for循环结构
s1=0;
for i=1:100,
s1=s1+i;
end,
s1
②while循环结构
s2=0;
i=1;
while (i<=100),
s2=s2+i;
i=i+1;
end
s2
③MTLAB自带语句
sum(1:100)
Eg:向量化编程
求和
所谓向量化编程,就是假设有这样一个表达式,想让这个表达式从i=1一直加到i=100000。正常操作下这个累加的量会很大。
tic,s=0;
for i=1:100000,
s=s+1/2^i+1/3^i;
end;
toc
其中,tic和toc是用来测试耗时的。
向量化方法。首先生成一个向量,
tic,i=1:100000;
s=sum(1./2.^i+1./3.^i);
toc
这里需要用到点运算,因为i是一个向量。
结果对比可以看出,向量化编程是比较节约时间的。
3.条件转移结构
if (condition 1)
statement group 1
elseif (condition 2)
statement group 2
...
...
else
statement group n+1
end
Eg:用for循环求解最大的m,使下式成立
s=0;
for i=1:10000,
s=s+i;
if s>10000,
break;
end,
end,
m=s
4.开关结构
switch switch expression
case expression 1,statements 1
case{expression2,expression3,...,expression m},statements 2
otherwuse,statements n
end
5.试探结构
try,
statement group 1,
catch,
statement group 2,
end
程序先执行statement group 1,如果执行这个语段不出现错误,执行完这个段落就结束了。
如果执行这个段落出现错误,就可以停止前面的执行,转到catch后面去执行这个语句段。
综上,这样的结构是比较有益的结构。
优点:设置错误陷阱,提高算法的执行效率
二,MATLAB函数编写
1.函数编写和调试
编程:脚本程序与M-函数(主流)
MATLAB函数的编写
MATLAB语言函数的基本结构
可变输入输出个数的处理
inline函数与匿名函数
伪代码与保密处理
2.MATLAB语言函数的基本结构
信息处理单元
输入变量——函数——返回变量
函数的程序结构
function [return vars]=funname(input vars)
comments led by %
input and output variables check
main body of the function
3.递归调用函数的正常实现
设置出口,变量检测
function k=my_fact(n)
if nargin~=1,
error{'Error:Only one input variable accepted');
end
if abs(n-floor(n))>eps | n<0
error{'n should be a non-negtive integer');
end
if n>1,k=n*my_fact(n-1)
elseif any([0 1]==n),k=1;end
4.阶乘的不同计算方法
计算11!
my_fact(11)
其他函数
factorial(n)
prod(1:n)
gamma(1+n)
gamma(1+sym(n))
符号运算
factorial(sym(n))
5.可变输入输出个数的处理
处理可变输入输出的感觉函数
输入输出变量:varargin,varargout
变量的提取——单元数组(cell)
varargin{1},varargin{2},...,varargin{n}
6.inline函数与匿名函数
inline函数(功能叠用,不建议使用)
可以免去编辑M-文件
fun=inline(function expression,list of variables)
MATLAB 7.0以上版本提供的匿名函数
MATLAB工作空间内的变量可以直接使用
f=@(list of variables)function_contents
7.伪代码与代码保密处理
伪代码化的目的:
提高程序的执行速度
保密:把ASCII的.m文件转换成二进制代码
伪代码语句
pcode mytest
pcode *.m
pcode mytest -inplace
用户一定要在安全的位置保留.m源文件,不能轻易删除,因为.p文件是不可逆的。
三,二维图形绘制
1.二维图形绘制基本语句
①已知数据绘图
两个序列t=t1,t2,...,tn和y=y1,y2,..yn构造向量:
t=[t1,t2,...,tn]
y=[y1,y2,...,yn]
利用这些数据绘图plot(t,y)
注:MATLAB跑出来的曲线不是真正的曲线,本质上是对数据点进行折线拟合。因此,需要缩小步长多次拟合进行对比。
②已知函数绘图
描述函数再绘图fplot(f,[xm,XM])
Eg:分段函数
绘制饱和函数方程
①常规分段处理
首先,生成一个x向量。然后用循环的形式,对每一个x进行判断,看看到底属于分段函数里的哪一个分支。最后把对应的y值计算出来,得到x向量和y向量,用plot进行画图。
x=[-2:0.02:2];
for m=1:201
if abs(x(1,m))>1.1,
y(1,m)=2*x(1,m)+3;
else
y(1,m)=x(1,m);
end
end,plot(x,y)
②向量化方法
将每一个分段函数和其对应的条件进行点乘,再叠加起来,就能得到对应的y值。
x=[-2:0.02:2];
y=(2*x+3).*(abs(x)>1.1)+x.*(abs(x)<=1.1);
plot(x,y)
结果如图所示
2. 其他调用格式
t是一个向量,y是一个向量,可以调用plot(t,y)将对应的曲线画出来。
t仍为向量,而y为矩阵,这个矩阵的列数正好等于t元素的个数。这时依然可以用plot(t,y)来画图。画出来的结果是,每一行画出一条曲线,MATLAB会自动安排曲线的颜色。
3.改变曲线形式
h=plot(t1,y1,option 1,t2,y2,option 2,...)
线型:'-' '--' ':' '-." 'none'
颜色:'b' 'g' 'y' 'm' 'w' 'c' 'k' 'r'
标记:'*' '.' 'x' 'v' '^' '>' 'pentagram' 'o' 'square' 'diamond' 'hexagram' '<'
Eg:多条曲线在一张图上展示
试绘制曲线y1=sinx,y2=0.1cosx
x=0:0.01:2*pi;
y1=sin(x);
y2=0.1*cos(x);
plot(x,y1,x,y2,'--')
当然,除了上面展示的调用,还可以将两个函数分别写出来,用hold on处理。
如果两条曲线的幅值相差过于悬殊,可以调用双纵轴绘制函数plotyy()
x=0:0.01:2*pi;
y1=sin(x);
y2=0.1*cos(x);
plotyy(x,y1,x,y2)
不难看出,蓝色线条对应的y轴在左侧,红色线条对应的y轴在右侧。
四,特殊二维图形
1.其他绘制函数
bar(x,y) 绘制直方图
comet(x,y) 绘制一个动态图
stairs(x,y) 绘制一个阶梯型图
polarplot(x,y) 绘制一个极坐标图
Eg:绘制极坐标函数
theta=0:0.01:6*pi;
rho=5*sin(4*theta/3);
polarplot(theta,rho)
Eg:在同一窗口的不同区域用不同的绘图方式绘制出相应的曲线。
在不同区域上,所以需要调用一个叫subplot的函数。subplot(2,2,1)表示将区域分成2行2列,调用其中第一块区域。
t=0:0.2:2*pi;
y=sin(t);
subplot(2,2,1),stairs(t,y);
subplot(2,2,2),stem(t,y);
subplot(2,2,3),bar(t,y);
subplot(2,2,4),semilogx(t,y);
2.隐函数绘制及应用
(待定)