数学实验第三次课
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2) 脚本可以直接在Matlab环境下执行,它可以访问 整个 Matlab工作空间中的变量,而脚本中的变量在 脚本执行完后仍然保留在工作空间中,并能被其它脚 本所引用,直到用 clear命令清空。
数学实验
例: 脚本文件 mypro1.m num=input('输入一个正整数:') s=0; for i=1:num, s=s+i; end s 本脚本功能是输入一个正整数,赋值给num,然后 计算 1到该正整数的所有整数的和,并将结果保存到 变量 s中。
数学实验
1.5.3 主函数与子函数
• 函数文件可以包含一个以上的函数,该文件中的 第一个函数是主函数,后面定义的所有函数都是 子函数。
• 函数文件名要与主函数名相同。 • 子函数只允许同一个文件中的函数及其它函数访 问。 • 调用含有子函数的函数文件时,只执行主函数的 语句块。
数学实验
函数间的调用规则:
数学实验
函数文件:
function
% 注解说明
返回变量列表=函数名(输入变量列表)
输入变量检测,输出变量检测
函数体 函数文件的第一行必须按特定格式书写 . 函数内所有变量是局部变量,既不影响其他M文件 中同名变量,也不被其他M文件中同名变量所影响 . 函数文件中的输出变量要等于某个确定的表达式 .
数学实验
1.4.4 其它控制函数
( 1) error(‘message’)
显示文本 message,并中断程序执行. if 条件表达式, error(‘message’), end
( 2) warning(‘message’)
显示警告信息 .
数学实验
1.5 程序文件(M文件)与函数编程
1.5.1 基础
数学实验
(二)语句return,pause return返回调用函数
pause暂停运行,按任意键执行 示例: function [r,v]=myfun(x) if nargout<=1, r=x.ˆ2; % 只计算第一个返回参数 return end v =2*x;% 计算第二个返回参数
数学实验
(三)全局变量 Matlab工作空间中的变量要被函数程序所使用, 必须定义为全局变量。 定义函数:global global varname1 varname2 . . . 注:
( 3)用Matlab程序编辑器打开程序文件,通过 快捷键(功能键F5或菜单条)运行.
数学实验
常见运行错误: “Undefined function or variable”
示例说明:现编写了一个程序myprg.m,保存在文 件夹“E:\”中,在Matlab命令窗口输入程序名 myprg提示出错。 >>myprg ??? Undefined function or variable ’myprg’.
数学实验
g = inline('sin(2*pi*f + theta)') g= Inline function: g(f,theta) = sin(2*pi*f + theta)
g = inline('sin(2*pi*f + theta)', 'f', 'theta') g= Inline function: g(f,theta) = sin(2*pi*f + theta) g = inline('x^P1', 1) g= Inline function: g(x,P1) = x^P1
数学实验
1.5.5 函数编程部分高级用法
(一)nargin和nargout
nargin返回函数被调用时输入变量的个数。 nargout返回当函数被调用时输出变量的个数。
ຫໍສະໝຸດ Baidu数学实验
示例: function [r,v]=myfun(x,y) if nargin ==1,% 如果输入参数为 1个 y=x; % 则设置第2个参数y与x相同 end r =xˆ2-yˆ2; if nargout >1,% 如果返回1个以上参数,则计算 v v =sqrt(xˆ2+yˆ2); end
• 全局变量必须在使用前定义;
• 全局变量可以在脚本文件、函数文件中定义, 也可以通过命令行定义。
数学实验
示例:
文件1:temp1.m global t1 t1=[1 3 5 7] 文件2:testfun.m function testfun(x) global t1 t1=x;
在命令行中运行:
clear all temp1 testfun(2) t1 % 此时t1的值已被函数testfun修改
数学实验
例 杨辉三角形
function Y=young(n)
if nargin==0,n=3;end
Y=eye(n);Y(:,1)=ones(n,1);
for k=3:n Y(k,2:k-1)=Y(k-1,1:k-2)+Y(k-1,2:k-1);
end
数学实验
例:求任意两个自然数之间(包含两个自然数)所有 自然数的和。 说明:
原因:myprg.m不在 Matlab的搜索路径中。 可通过path命令查看搜索路径。
解决办法:将文件夹“ E:\”添加到Matlab搜索路径中。
数学实验
Matlab搜索路径的设置:
( 1)运行菜单条“ Set Path”,通过“Set Path”对 话框设置; ( 2)命令行方式:
addpath(’实际文件夹’)
1.5.2 1.5.3 1.5.4
1.5.5
程序文件 主函数与子函数 inline函数
函数编程部分高级用法
数学实验
1.5.1 基础
计算机程序主要功能——接收数据和处理数据 ,并将 处理后的数据完整有效地提供给用户 . 文件执行:对文件中命令进行批处理,即从第一 条命令开始按顺序执行,直到最后一条命令。如果 中间某条命令出错,则中断并输出错误信息。
a2 = a1(1 + r) % a2 — 第二年后本金+利息之和 a3 = a2(1 + r) % a3 — 第三年后本金+利息之和
数学实验
程序: a0=10000; a =a0; r = 0.0425; for i=1:50, % 假设50年内可以翻番,最多循环50次 a = a*(1+r); % 计算第i年末存单价值 if a>=2*a0, disp(sprintf('存了%d年终于翻番了.',i)) break; % 结束迭代 end end 思考:如果要存储每年存单的价值,如何修改程序? 提示:使用数组存储。
• 主函数可以调用子函数; • 子函数可以调用子函数; • 子函数不能调用主函数; • 子函数可以调用其它程序文件。
数学实验
例: myfun.m
function s=myfun % 文件名myfun.m num=input('输入一个正整数:') sprintf('从1到整数%d的和为%d',num,mysum(num))
数学实验
1.5.2 程序文件(M文件)
程序文件格式:纯文本文件,可用Matlab程序编辑 器、记事本、写字板等软件编辑。
程序文件类型:1. 脚本文件;2.函数文件
数学实验
脚本文件: 由程序语句组成(非函数文件)
(1) 在 Matlab中既不接受输入参数,也不返回参数的 M文件称为脚本,这类文件中没有函数申明,它是一 些 Matlab函数和命令的组合。
数学实验
例: g = inline('t^2') f = inline('x*y*z','x','y','z') g = inline('x^P1+x^P2',2) f = inline('x^2+y^3') f= Inline function: f(x,y) = x^2+y^3 f(3,1) ans = 10
function s=mysum(num) % 求1到num所有整数相加之和 s=0; for i=1:num, s=s+i; end
数学实验
1.5.4 inline函数
inline语法:
inline(expr) 根据expr建立内部函数,函数自变量根 据表达式自动搜索;
inline(expr, arg1, arg2, ...) 指定参数,arg1等参数是 字符串参数 inline(expr, N) 参数为 P1,P2,…,PN
过程:①在编辑窗口中编写; ②保存并对文件命名; ③命令窗口键入文件名运行; ④观察运行结果; · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 数学实验
如何运行Matlab程序文件?
( 1)命令行输入程序文件名(不包含扩展名) ; ( 2)在程序文件中调用 ;
通常用于for或while循环语句中,与if语句一起 使用,中止本次循环,跳出最内层循环. if 条件表达式,break, end
数学实验
例 设银行年利率为4.25%。将10000元钱存入银行, 问多长时间会连本带利翻一番?
ak (1 0.0425)ak 1 , a0 10000.
分析: a1 = a(1 + r) % a1 — 第一年后本金+利息之和
输入参数2个,输出参数1个,即返回求和结果。 函数名这里取为sum2,函数名要有一定意义,才便
于记忆,而且不要与系统内部函数相同。可以通过
“ help 函数名”看出该函数是否为系统函数。
数学实验
function r=sum2(n1,n2) %sum2.m 求任意自然数 n1和n2之间(含n1和n2) 所有整数的和 if n2>=n1 , r =(n2-n1+1)*(n1+n2)/2; else r=(n1-n2+1)*(n1+n2)/2; end 输入: sum2(1,100) ans = 5050
3. 控制语句continue,break (1) continue 命令
通常用于 for 或 while 循环语句中,与 if 语句一 起使用,跳过本次循环,去执行下一轮循环. for x=array 语句块1 if 条件表达式, continue, end 语句块 end
数学实验
(2) break 命令
数学实验
谢 谢!
数学实验