1、Matlab编程,一、Matlab编程,二、Matlab编程实例,MATLAB的内部函数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件. 函数文件是文件名后缀为M的文件,这类文件的第一行必须是一特殊字符function开始,格式为:function 因变量名=函数名(自变量名)函数值的获得必须通过具体的运算实现,并赋给因变量.,一、Matlab编程,M文件建立方法:1. 在MATLAB中,点:FileNew M-file2. 在编辑窗口中输入程序内容3. 点File Save,存盘,M文件名必须 与函数名一致.,MATLAB的应用程序也以M文件保
2、存.,1. for循环:允许一组命令以固定的和预定的次数重复for x=arraycommandsend在for和end语句之间的命令串commands按数组(array)中的每一列执行一次. 在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:,n),控制流,MATLAB提供三种决策或控制流结构:for循环、while循环、if-else-end结构. 这些结构经常包含大量的MATLAB命令,故经常出现在MATLAB程序中,而不是直接加在MATLAB提示符下.,例 对n=1,2,10,求xn= 的值.,MATLAB(for1),for n=1:10x(n)=sin(n
3、*pi/10); end x,MATLAB(for1),while (expression)commandsend只要在表达式(expression)里的所有元素为真,就执行while和end语句之间的命令串commands.,2. While循环与for循环以固定次数求一组命令相反,while循环以不定的次数求一组语句的值.,MATLAB(while1),例 设银行年利率为11.25%.将10000元钱存入银行,问多长时间会连本带利翻一番?,money=10000 years=0 while money20000years=years+1money=money*(1+11.25/100) e
4、nd,MATLAB(while1),3. if-else-end结构 (1)有一个选择的一般形式是:if (expression)commandsend 如果在表达式(expression)里的所有元素为真,就执行if和end语句之间的命令串commands.,MATLAB(fun1),MATLAB命令窗口输入fun1(2),fun1(-1)即可.,function f=fun1(x) if x1f=x2+1 end if x=1f=2*x end,MATLAB(fun1),2) 有三个或更多的选择的一般形式是:if (expression1)commands1else if (express
5、ion2)commands2 else if (expression3)commands3 else if else commands end end end end,先建立M文件fun2.m来定义函数f(x),再在MATLAB命令窗口输入fun2(2),fun2(0.5), fun2(-1)即可.,MATLAB(fun2),返回,function f=fun2(x) if x1f=x2+1 else if x=0f=x3elsef=2*xend end,MATLAB(fun2),function f=fun3(x) f=(x2+1)*(x1)+2*x*(x0&x=1)+x3*(x=0),分段
6、函数可表示为:,MATLAB的程序调试方法,MatLab在执行程序有错时会自动终止运行,并在其命令窗口(Matlab Command Windows)中给出相应错误的提示信息 同时MATLAB的编辑器(Editor)具有程序调试功能,可用调试命令用来检查程序的正确性,17/18,单步执行,断点间执行,终止调试,(1)在程序可疑处设置断点; (2)执行程序; (3)检查程序运行至断点处变量当前值 (4)在程序中一步步执行 (5)结束调试状态。 (6)取消断点。,执行程序之后,程序会停在断点处。并出现箭头同时调试工具栏由灰色变为深色,18/18,调试程序步骤:,编缉窗口 function yy=f
7、f(x) yy=sqrt(x.2+1002)+sqrt(120-x).2+1202);,例 1 分析并计算函数极值点,命令窗口 fplot(ff ,0, 120) grid x=fmin(ff ,40,60) hold on plot(x,ff(x),ro),x = 54.5455,图形窗口,二、Matlab编程实例,例2 函数的递归调用: 阶乘计算,function fac=fact(n) if n=1|n=0;fac=1;return end fac=n*fact(n-1);,fact(11) ans = 39916800 fact(21) ans = 5.109094217170944e
8、+019,另两条MATLAB语句 factorial(11) ans = 39916800,prod(1:11) ans = 39916800,简单函数编写技巧 建立内嵌函数,使用格式 inline(expr) 根据expr建立内部函数,函数自变量根据表达式自动搜索; inline(expr, arg1, arg2, .) 指定参数,arg1等参数是字符串参数 inline(expr, N) 参数为 x,P1,P2,PN,例子:g = inline(t2) f = inline(xyz,x,y,z) g = inline(xP1+xP2,2),例3 分期付款购一套30万元住房. 首付7万,以后
9、每月付1500元,15年后付清. 这实际上是贷款购房, 问这样贷款的利息是多少 ?,解:设代款总额A=230000,每月付款P=1500,银行利率为x,贷款期 m = 1512 =180.,A(1+x)m = P + P(1+x) + P(1+x)2 + P(1+x)m-1,a=0.001;b=0.002;k=0; f=inline(1500*(1-1/(1+x)180)/x-230000); ya=f(a);,k = 14 x0 = 0.0018,while (b-a)0.0000001x0=.5*(a+b);y0=f(x0);if ya*y00b=x0;elsea=x0;ya=y0;end
10、k=k+1; end k x0,有一天小猴摘下了若干个桃子,当即吃掉了一半,又 多吃了一个.第二天接着吃了剩下的一半,又多吃了一个 以后每天都是吃掉尚存的桃子的一半零一个.到第十天 早上,小猴准备吃桃子时,看到只剩下 1 个桃子了.问 小猴第一天共摘下了多少个桃子?,例4 小猴吃桃问题,16/18,解:设第k天的桃子数为pk,(k=1,10)则规律为,Pk-1 =2(pk +1),k=10;p(k)=1; while k=2k=k-1;p(k)=2*(p(k+1)+1); end p(1),ans = 1534,例5 角谷猜想.,18/18,n=input(input n=); %输入数据 w
11、hile n=1 r=rem(n,2); %求n/2的余数if r = =0n=n/2 %第一种操作elsen=3*n+1 %第二种操作end end,对任一自然数n,按如下法则进行运算:若n为偶数, 则将n除2;若n为奇数,则将n乘3加1。将运算结果按 上面法则继续运算, 重复若干次后计算结果最终是1.,n=5 16, 8, 4, 2, 1,对以下问题,编写M文件: (1)用起泡法对10个数由小到大排序. 即将相邻两个数比较,将小的调到前头. (2)有一个 矩阵,编程求出其最大值及其所处的位置. (3)编程求 (4)一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下. 求它在第10次落地时,共经过多少米?第10次反弹有多高? (5)有一函数 ,写一程序,输入自变量的值,输出函数值.,实验作业,返回,谢 谢!,