王国利信息科学与技术学院中山大学
http://human-robot.sysu.edu.cn
Matlab计算与仿真技术第九讲,Matlab编程 -III
http://human-robot.sysu.edu.cn/course
Matlab计算与仿真
第八讲回顾
Matlab编程 -III
- 变量查询
- 匿名函数
- 参数交互输入
- Matlab程序调试
- 语言结构与调试函数第九讲提纲
Matlab计算与仿真第八讲回顾
函数的定义及申明
- 使用方式,调用 /嵌套
- 协作方式,主函数 /子函数 /嵌套函数
- 内部变量,生存周期控制
控制语句
- if /if-else/if-elseif-…-else
- switch-case
- for/while
Matlab计算与仿真第八讲回顾 (续 )
if 语句一般形式
if logical_expression
block of statements
elseif logical_expression
block of statements
… …
else
block of statements
end
Matlab计算与仿真第八讲回顾 (续 )
switch 语句一般形式
switch expression
case value1,
block of statements
case value2,
block of statements
...
otherwise,
block of statements
end
Matlab计算与仿真第八讲回顾 (续 )
- 循环结构根据条件重复执行程序指令或模块
for 语句 % 计数循环一般形式
for index = expression
block of statements
end
Matlab计算与仿真第八讲回顾 (续 )
while 语句一般形式
while expression
block of statements
end
Matlab计算与仿真
Matlab编程 (续 )
while 语句实例,newton法计算
while abs(rold-r) > delta
rold = r;
r = 0.5*(rold + x/rold);
end
1
2n e w o ld o ld
x
rr
r



x
Matlab计算与仿真
Matlab编程 (续 )
循环中断控制,while 语句实例
x = rand(1,10);
k = 1;
while k<=10
if x(k)>0.8
break
end
k = k + 1;
end
Matlab计算与仿真
Matlab编程 (续 )
函数返回控制,while 语句实例
x = rand(1,10);
k = 1;
while k<=10
if x(k)>0.8
return
end
k = k + 1;
end
Matlab计算与仿真综合练习,利用级数展开近似计算 sin
- 提示 sin 的级数展开为
- m-函数实例
1,function s=powersin(x);
2,% POWERSIN,Power series for sin(x).
3,% POWERSIN(x) tries to compute…
sin(x) from a power series.
Matlab编程 (续 )
3 5 7
s in 3 ! 5 ! 7 !x x xxx
Matlab计算与仿真
Matlab编程 (续 )
4,s=0;
5,t=x;
6,n=1:
7,while abs(t) > eps
8,s=s+t;
9,t=-x.^2/((n+1)*(n+2)).*t;
10,n=n+2;
11,end
Matlab计算与仿真
综合练习七,生命周期曲线
- 提示,生理 -23天 ; 情感 -28天 ; 智力 -33天
function biorythm(mybirthday)
t0=datenum(mybirthday);
t1=fix(now);
t=(t1-28):1:(t1+28);
t=t';
y=100*[sin(2*pi*(t-t0)/23) …
sin(2*pi*(t-t0)/28) …
sin(2*pi*(t-t0)/33)];
Matlab编程 (续 )
Matlab计算与仿真
plot(t,y(:,1),t,y(:,2),'--',t,y(:,3),'.-',[t1 t1],[-100 100],'k:');
datetick('x','dd/mm','keeplimits');
axis tight;
title(mybirthday);
legend('Physical','Emotional','Intellectual');
xlabel('time[dd/mm]');
ylabel('biorythm index [%]')
Matlab编程 (续 )
Matlab计算与仿真
- 关于函数变量与参数传递输入 (输出 )变量查询函数,nargin(nargout)
功能,返回函数的输入 (输出 )个数应用,根据变量个数,选取模块执行
function c = testarg1(a,b)
if (nargin == 1)
c = a,^ 2;
elseif (nargin == 2)
c = a * b;
end
Matlab编程 (续 )
Matlab计算与仿真
Matlab编程 (续 )
- 变量的传递输入 (输出 )变量查询函数,varargin(varargout)
功能,返回由函数的输入 (输出 )变量的元胞数组元胞,Matlab的数据类型,由 { }标识
{ } 中可以是算术 /逻辑 /字符 /结构数据类型,例如
>> A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};
>> A(1,2) = {'Anne Smith‘};
>> A(2,1) = {3+7i};
>> A(2,2) = {-pi:pi/10:pi};
Matlab计算与仿真
Matlab编程 (续 )
- 变量的传递 (续 ),替代列表注意,元胞数组的引用,{ }
function testvar(varargin)
for k = 1:length(varargin)
x(k) = varargin{k}(1); % Cell array indexing
y(k) = varargin{k}(2);
end
xmin = min(0,min(x));
ymin = min(0,min(y));
axis([xmin fix(max(x))+3 ymin fix(max(y))+3])
plot(x,y)
Matlab计算与仿真
Matlab编程 (续 )
- 函数句柄定义,指向函数的 Matlab值,基本格式
fhandle=@functionname
fhandle可以作为变量传递功能,用于函数的创建和访问 (运算 )
>> sqr = @(x) x.^2 % 匿名函数
>> trigFun = {@sin,@cos,@tan}
>> plot(trigFun{2}(-pi:0.01:pi))
Matlab计算与仿真
Matlab编程 (续 )
函数句柄的引用格式
fhandle(arg1,arg2,...,argn)
实例,fhandle指向 函数的曲线绘制
function x = plotFHandle(fhandle,data)
plot(data,fhandle(data))
引用,绘制 sin函数的曲线
>> plotFHandle(@sin,-pi:0.01:pi)
Matlab计算与仿真
Matlab编程 (续 )
匿名函数创建匿名函数
fhandle = @(arglist) expr
创建实例
>> sumxy = @(x,y) (x + y)
应用操作
>> sumxy(5,7)
Matlab计算与仿真匿名函数元胞组实例
>> A = {@(x)x.^2,@(y)y+10,(x,y)x.^2+y+10}
A =
[@(x)x.^2] [@(y)y+10] [@(x,y)x.^2+y+10]
>> A{1}(4) + A{2}(7)
ans =
33
>> A{3}(4,7)
ans =
33
Matlab编程 (续 )
Matlab计算与仿真参数化的匿名函数
>> a = 1.3; b =,2; c = 30;
>> parabola = @(x) a*x.^2 + b*x + c;
>> fplot(parabola,[-25 25])
% fplot(@(x) a*x.^2 + b*x + c,[-25 25])
>> a = -3.9; b = 52; c = 0;
>> fplot(parabola,[-25 25])
提示,fplot 绘制句柄指向函数的图形
Matlab编程 (续 )
Matlab计算与仿真
Matlab编程 (续 )
多重匿名函数的使用问题,计算提示,quad 是 matlab 缺省的积分计算函数回忆,>> lookfor quad
>> g = @(c) (quad(@(x) (x.^2 + c*x + 1),…
0,1));
>> g(2)
1 20( ) 1 dg c x c x x
(2)g
Matlab计算与仿真
Matlab编程 (续 )
用户参数交互输入参数的作用,使程序更加通用灵活参数输入的主要模式
- input 函数输入参数
- keyboard函数 (键盘模式 )
- menu 函数 (菜单模式 )
Matlab计算与仿真
Matlab编程 (续 )
键盘输入模式基本格式,v= input(‘ 显示的提示信息 ’ );
功能实现,向用户显示提示信息将用户的输入赋给 v
使用实例
freq=input(‘frequence is’)
结果
frequence is (等待键盘输入,
回车确认输入完成 )
Matlab计算与仿真
Matlab编程 (续 )
键盘控制模式基本格式,keyboard;
功能实现,临时终止程序执行将控制权交给命令窗口利用回车结束键盘控制使用实例查询 /修改函数工作空间的变量建立新的函数空间的变量
Matlab计算与仿真
Matlab编程 (续 )
菜单输入模式基本格式,
item_no=menu(‘title’,’item1’,…’itemn’);
功能实现,显示菜单用户选择按钮返回菜单序号使用实例
s=menu(‘signal’,’red’,’green’,yellow’)
可结合选择控制语句使用
Matlab计算与仿真
Matlab编程 (续 )
程序设计技术循环向量化计算模式目的,向量计算替代循环模式实例,
tic tic
for t=0:0.01:100 t=0.0:0.01:100
i=i+1; y(i)=sin(t) y=sin(t)
end toc
toc 耗时 7.58 耗时 0.01
Matlab计算与仿真
Matlab编程 (续 )
程序设计技术 (续 )
阵列预分配空间目的,避免循环过程空间分配的耗时实例,y(k)=0.75y(k-1)-0.125y(k-2)+2u(k)
clear all,tic
T=0.001; t=[0:T:16]
u=sin(2*pi*t);
% y=zeros(size(u))
y(1)=2*u(1);
y(2)=0.75*y(1)+2*u(2); 耗时 0.562(%)/0.0160
for k=3:fix(16/T)+1
y(k)= 0.75*y(k-1)-...
0.125*y(k-2)+2*u(k)
end
toc
Matlab计算与仿真
Matlab编程 (续 )
程序设计技术 (续 )
内存使用 /管理目的,提高内存使用效率主要的命令
>> clear % 清楚变量
>> pack % 将变量寄宿在磁盘
>> quit % 退出 Matlab环境
>> save % 将变量数据存入文件
>> load % 将文件数据加载进入工作空间
Matlab计算与仿真
Matlab编程 (续 )
Matlab程序调试主要工具,m编辑器内嵌 debugger功能程序错误语法或格式错误,显式且容易定位功能或计算错误,算法错误纠错技巧显示中间变量的内容利用 Keyboard语句,查看函数工作空间的变量内容设置断点或单步执行方式
Matlab计算与仿真第十讲预告,Matlab绘图 -I
( 2008年 04月 30日)
结束语