控制系统与仿真CAD(3)——Matlab语言程序设计基础part2

一,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:用循环求解\sum_{i=1}^{100}i

①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:向量化编程

求和  S=\sum_{100000}^{i=1}(\frac{1}{2^i}+\frac{1}{3^i})

所谓向量化编程,就是假设有这样一个表达式,想让这个表达式从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,使下式成立

\sum_{i=1}^{m}>10000

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:分段函数

绘制饱和函数方程y=\left\{\begin{matrix} 2x+3& |x|>1.1 \\ x& |x|\leqslant 1.1 \end{matrix}\right.

①常规分段处理

首先,生成一个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:绘制极坐标函数

\rho =5sin(4\theta /3)    

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.隐函数绘制及应用

(待定)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值