MATLAB中M文件例子
- 格式:doc
- 大小:282.50 KB
- 文档页数:29
Matlab实验21、编写一个函数文件,计算一个球的体积。
M文件如下(命名为volume.m):function V=volume(r)if r<0%判断球半径r的大小error('r is smaller than 0,error input!');%如果半径r小于0提示输入错误elseV=4/3*pi*r^3;%计算球的体积end在命令窗口中输入如下指令:>> volume(5)运行结果为:ans =523.59882、分别用命令文件和函数文件实现下题(1)Y<3时的最大的n值(2)与(1)的n值对应的y值M文件如下(命名为summ1.m):function y=summ1(n)y=0;for k=1:n;y=y+1/(2*k-1);if y>3;m=k-1y2=summ1(m)break;endend在命令窗口中输入如下指令:>> summ1 (100)运行结果为:m =56y2 =2.9944ans =3.00333、输入一个百分制成绩,要求输出成绩等级,A, B, C, D, E. 其中90-100分为A,80-89为B,70-79为C,60-69分为D,60分以下为E。
要求:(1)分别用if和switch语句实现(2)输入百分制成绩后要判定成绩的合理性,对不合理的成绩要做出出错信息。
方法一:if函数法%求解输出成绩等级的If源程序代码by ljlclear;clc;%删除wordspace中的矩阵变量并进行清屏处理fenshu=input('输入分数=');if fenshu<0||fenshu>100%判断分数的值error('fenshu输入不合理,错误的输入!');%如果分数不合理提示输入错误elseif fenshu>=90r='A'elseif fenshu>=80r='B'elseif fenshu>=70r='C'elseif fenshu>=60r='D'elser='E'end在命令窗口中输入如下指令:输入分数=60运行结果:r =D输入分数=101运行结果:??? Error using ==> chengji_if at 5fenshu输入不合理,错误的输入!方法二:switch法%求解输出成绩等级的Switch源程序代码by ljlclear;clc;%删除wordspace中的矩阵变量并进行清屏处理fenshu=input('输入分数=');if fenshu<0||fenshu>100%判断分数的值error('分数输入不合理,错误的输入!');%如果分数不合理提示输入错误elseswitch fix(fenshu/10)case {10,9}r='A'case 8r='B'case 7r='C'case 6r='D'otherwiser='E'endend在命令窗口中输入如下指令:输入分数=90运行结果:r =A输入分数=-88运行结果:??? Error using ==> chengji_switch at 5分数输入不合理,错误的输入!4、鸡兔同笼问题:鸡和兔子关在一个笼子里,已知共有头36个,脚100个,求笼内关了多少只兔子和多少只鸡?程序如下:%求解鸡兔同笼问题的源程序代码by ljlclear;clc;%删除wordspace中的矩阵变量并进行清屏处理Ji=1;%设定鸡的数目从一只开始while 1%不满足条件继续试if Ji*2+(36-Ji)*4==100&(Ji+(100-Ji*2)/4)==36%鸡兔同笼的条件(同时满足两个)break;%一旦条件满足,跳出循环endJi=Ji+1;endJi%输出鸡的数目Tu=(100-2*Ji)/4%输出兔子的数目运行结果如下:Ji =22 Tu =14。
1.建立M文件的必要性:对于常用的或很长的程序,如果每次都从头输入,则非常费时间,也容易出错.将这些程序做成M文件就方便多了--只要输入自定义的命令,就可以方便的调用,编程的效率大大提高!2.如何建立M文件(1)在记事本(.txt)或maltab命令窗口中编辑好M文件例:编写一个输入半径,计算圆的面积和球的体积的M文件.前两行是文件头,一般说明文件的类型(M-file),文件名(tutex2),和文件的功能(输入半径,计算圆的面积和球的体积),后面是文件体,主要是解决特定问题的程序代码.% M-file, tutex2.m% 输入半径,计算圆的面积和球的体积r = input('Type radius:'); %从键盘输入Type radius的值,并将它赋值给r.area=pi*r^2;volume=(4/3)*pi*r^3;fprintf('The radius is %12.5f\n',r)fprintf('The area of a circle is %12.5f\n',area)fprintf('The volume of a sphere is %12.5f\n',volume)(2)将上面的代码保存到工作空间里.保存方法是:File/save As3.如何调用M文件?在matlab工作窗口直接键入M文件名,即可调用.以上面的程序为例,>> tutex2 %键入文件名,回车Type radius: %提示输入半径 ,输入半径,比如 10, 回车显示如下Type radius:13.5The radius is 10.00000The area of a circle is 314.15927 The volume of a sphere is 4188.79020。
MATLAB中M文件例子20.11 M文件例子精通MATLAB工具箱含有许多实用函数,它们可以验证本章的许多概念。
这些函数的基本部分已经在二维和三维图形这些章阐述过了。
有了前面对句柄图形的讨论,我们现在可以更彻底地讨论这些函数。
最简单的精通MATLAB工具箱的函数之一提出了一个共同的问题。
MATLAB函数gcf返回当前图形的句柄。
但是,它有一个副作用。
如果图形不存在,gcf就创建一个,并返回它的句柄。
如果想寻找一个图形是否存在于头一个位置,要是没有,又不得不创建,怎么办?函数mmgcf正好实现由其内容所描述的工作。
function HF=mmgcf%MMGCF Get Current Figure if it Exists.% MMGCF returns the handle of the current figure if it exists.% If no current figure exists,MMGCF returns an empty handle.%% Note that the function GCF is different.It creates a figure and returns its handle if it does not % exist.% Copyright (c) 1996 by Prentice-Hall,Inc.Hf=get(0, ‘Children’ ); % check for figure childrenif isempty(Hf)returnelseHf=get(0, ‘CurrentFigure’ );end函数mmgcf首先检查根对象的子对象的图形是否存在,如至少有一个图形对象时,根对象的‘CurrentFigure’属性就返回当前的图形。
函数mmgca为坐标轴对象执行同样的功能,如同在它的M文件内所描述的那样。
function Ha=mmgca%MMGCA Get Current Axes if it exists.% MMGCA returns the handle of the current axes if it exists.% If no current axes exists,MMGCA returns an empty handle.%% Note that the function GCA is diffent.It create a figure and an axes and returns the axes % handle if they do not exist.% Copyright (c) 1996 by Prentice-Hall,Inc.Ha=findobj(0, ‘Type’, ‘axes’ );if isempty(Ha)returnelseHa=get(get(0, ‘CurrentFigfure’ ), ‘CurrentAxes’ );end由于函数gco已经表现出当对象不存在时返回空矩阵的行为特性,就不需要函数mmgco 了。
Matlab笔记之十一---- ◎#有关M文件编写#◎for循环结构:for x = array( commands )endwhile循环结构:while expression( commands )enda(1)=1a(2)=1i=2while a(i)<=10000a(i+1)=a(i-1)+a(i)i=i+1end;ia(i)单分支:if expression(commands)end双分支:if expression(commands1)else(commands2)end多分支:if expression1(commands)elseif expression2(commands)…………else(commands)end如果判决条件expression为一个空数组,MATLAB认为条件为假(false)。
表达式有时由多个逻辑子表达式组成的,MATLAB将尽可能少地检测这些子表达式的值。
例如,表达式为:(子表达式1 |子表达式2),当MATLAB 检测到子表达式1的值为真时,它就认为表达式为真,而不再对子表达式2进行检测。
又如,表达式为:(子表达式1 & 子表达式2),当MATLAB检测到子表达式1的值为假时,它就认为表达式值为假的,从而跳过该结构。
if指令判决和break指令的配合使用,可以强制终止for循环或while循环。
switch-case结构:switch ex ex为一标量或字符串。
case test1(commands 1) 当ex等于test1时,执行组命令1,然后跳出该结构。
case test2……(commands k) 当ex等于testk时,执行组命令k,然后跳出该结构。
otherwise otherwise指令可以不存在(commands) 表达式不等于前面所有检测值时,则执行该组命令。
end1 当遇到switch结构时,MATLAB将表达式的值依次和各个case指令后面的检测值进行比较。
matlab编写m文件的例子一、矩阵运算在MATLAB中,矩阵运算是一项重要的功能。
下面以几个示例来说明如何使用MATLAB进行矩阵运算。
1. 矩阵的加法假设有两个矩阵A和B,它们的维度相同。
我们可以通过使用"+" 运算符来对这两个矩阵进行相加。
例如:```matlabA = [1 2 3; 4 5 6; 7 8 9];B = [9 8 7; 6 5 4; 3 2 1];C = A + B;disp(C);```上述代码将输出矩阵C,即A和B对应位置元素相加的结果。
2. 矩阵的乘法矩阵的乘法在MATLAB中有两种形式:点乘和矩阵乘。
点乘使用".*" 运算符,而矩阵乘使用"*" 运算符。
下面分别介绍这两种运算。
点乘示例:```matlabA = [1 2 3; 4 5 6; 7 8 9];B = [9 8 7; 6 5 4; 3 2 1];C = A .* B;disp(C);```上述代码将输出矩阵C,即A和B对应位置元素相乘的结果。
矩阵乘示例:```matlabA = [1 2 3; 4 5 6; 7 8 9];B = [9 8 7; 6 5 4; 3 2 1];C = A * B;disp(C);```上述代码将输出矩阵C,即A和B的矩阵乘积。
3. 矩阵的转置在MATLAB中,可以使用 "transpose" 函数或 ".'" 运算符对矩阵进行转置。
下面是一个示例:```matlabA = [1 2 3; 4 5 6; 7 8 9];B = transpose(A);C = A.';disp(B);disp(C);```上述代码将分别输出矩阵B和C,它们都是矩阵A的转置。
二、图像处理MATLAB也提供了丰富的图像处理函数,下面以几个示例来说明如何使用MATLAB进行图像处理。
1. 读取图像使用"imread" 函数可以读取图像文件。
20.11 M文件例子精通MATLAB工具箱含有许多实用函数,它们可以验证本章的许多概念。
这些函数的基本部分已经在二维和三维图形这些章阐述过了。
有了前面对句柄图形的讨论,我们现在可以更彻底地讨论这些函数。
最简单的精通MATLAB工具箱的函数之一提出了一个共同的问题。
MATLAB函数gcf返回当前图形的句柄。
但是,它有一个副作用。
如果图形不存在,gcf就创建一个,并返回它的句柄。
如果想寻找一个图形是否存在于头一个位置,要是没有,又不得不创建,怎么办?函数mmgcf正好实现由其内容所描述的工作。
function HF=mmgcf%MMGCF Get Current Figure if it Exists.% MMGCF returns the handle of the current figure if it exists.% If no current figure exists,MMGCF returns an empty handle.%% Note that the function GCF is different.It creates a figure and returns its handle if it does not % exist.% Copyright (c) 1996 by Prentice-Hall,Inc.Hf=get(0, ‘Children’ ); % check for figure childrenif isempty(Hf)returnelseHf=get(0, ‘CurrentFigure’ );end函数mmgcf首先检查根对象的子对象的图形是否存在,如至少有一个图形对象时,根对象的‘CurrentFigure’属性就返回当前的图形。
函数mmgca为坐标轴对象执行同样的功能,如同在它的M文件内所描述的那样。
function Ha=mmgca%MMGCA Get Current Axes if it exists.% MMGCA returns the handle of the current axes if it exists.% If no current axes exists,MMGCA returns an empty handle.%% Note that the function GCA is diffent.It create a figure and an axes and returns the axes % handle if they do not exist.% Copyright (c) 1996 by Prentice-Hall,Inc.Ha=findobj(0, ‘Type’ , ‘axes’ );if isempty(Ha)returnelseHa=get(get(0, ‘CurrentFigfure’ ), ‘CurrentAxes’ );end由于函数gco已经表现出当对象不存在时返回空矩阵的行为特性,就不需要函数mmgco 了。
在精通MATLAB工具箱中的另一个函数是mmzap,在二维图形那一章里已作过介绍。
如下M文件中所示,它使用mmgcf作错误检查,与findobj和get一起删除一个指定的图形。
function mmzap(arg)%MMZAP Delete graphics object using mouse.% MMZAP waits for a mouse click on an object in a figure window and deletes the object.% MMZAP or MMZAP text erases text objects.% MMZAP axes erases axes objects.% MMZAP line erases line objects.% MMZAP surf erases surface objects.% MMZAP patch erases patch objects.%% Clicking on an object other than the selected type or striking a key on the keyboard aborts % the command.% Copyright (c) 1996 by Prentice-Hall,Inc.if nargin<1,arg= ‘text’ ;endHf=mmgcf;if isempty(Hf),error( ‘No Figure Available.’ ),endif length(findobj(0, ‘Type’ , ‘figure’ ))==1figure(Hf) % bring only figure forwordendkey=waitforbuttonpress; % pause untill user takes some actionif key % key on keyboard pressedreturn % take no actionelse % object selectedobject=gco % get object selected by buttonpresstype=get(object, ‘Type’ );if all(type(1:4)==arg(1:4)) % delete only if ‘Type’is correctdelete(object)endend在编写句柄图形函数的M文件时,函数mmzap描述了一种很有用的技术。
它利用函数waitforbuttonpress和gco的结合用鼠标来获取所选定对象的句柄。
waifortbuttonpress是一个MATLAB内置函数,它的功能是等待鼠标点击或按键。
它的帮助文本如下:» help waitforbuttonpressWAITFOR BUTTONPRESS Wait for key/buttonpress over figure.T= WAITFOR BUTTONPRESS stops program execution untill a key or mouse button is pressed over a figure window.Returns 0 when terminated by a mouse buttonpress,or 1when terminated by a keypress.Additional information about the terminating event isavailable from the current figure.See also GINPUT,GCF.帮助信息:WAITFORBUTTONPRESS等待一个鼠标/按钮对图形按下。
T=WAITFORBUTTONPRESS停止程序的执行,直到鼠标按钮或键在一个图形窗口按下。
当鼠标按钮按下时返回0;当键按下时返回1。
其它的结束事件的信息可从当前的图形中窗口获取。
参阅GINPUT和GCF。
鼠标按钮在鼠标指针指的图形上按下后,函数gco返回所点中对象的句柄。
然后,该句柄可用来操作选中的对象。
在精通MATLAB工具箱中,用这种简单的选择技术的函数还有mmline 和mmaxes。
其中,mmline的M文件描述如下:function mmline(arg1,arg2, arg3, arg4, arg5, arg6)%MMLINE Set Line Properties Using Mouse% MMLINE waites for a mouse click on a line then applies the desired properties to the% selected line.% Properties are given in parts,e.g.,MMLINE Name value...% Properties:% NAME VALUE{default}% color [Y m c r g b w k] or an RGB in quotes: ‘[r g b]’% style [- -- ; -.]% mark [o + . * X]% width points for linewidth {0.5}% size points for marker size {6}% zap (n.a.) delete selected line% Examples:% MMLINE color r width 2 sets color to red and width to 2 points% MMLINE mark + size 8 sets marker type to + and size to 8 points%% Clicking on an object other than a line,or striking a key on the keyboard aborts the % command.% Copyright (c) 1996 by Prentice-Hall,Inc.Hf=mmgcf;if isempty(Hf),error( ‘No Figure Avaiable.’ ),endif length(get(0, ‘Children’ ))==1figure(Hf) % bring only figure forwordendkey=waitforbuttonpress;if key % key on keyboard pressedreturnelse % object selectedHl=gcoif strcmp(get(Hl, ‘Type’ ), ‘line’ ) % line object selectedfor i=1:2:max(nargin-1,1)Name=eval(sprintf( ‘arg%.0f ‘ ,i),[]); get Name argumentif strcmp(Name, ‘zap’ )delete(Hl),returnendvalue=eval(sprintf( ‘arg%.0f ‘ ,i+1),[]); % get valueif strcmp(Name, ‘color’ )set(Hl, ‘Color’ ,value)elseif strcmp(Name, ‘style’ )set(Hl, ‘Linestyle’ ,value)elseif strcmp(Name, ‘mark’ )set(Hl, ‘Linestyle’ ,value)elseif strcmp(Name, ‘width’ )value=abs(eval(value))set(Hl, ‘LineWidth’ ,value)elseif strcmp(Name, ‘size’ )value=abs(eval(value))set(Hl, ‘MarkerSize’ ,value)elsedisp([ ‘Unknown Property Name: ‘ Name’])endendendend精通MATLAB工具箱中的函数mmpaper以简单的方式阐述了对纸张属性的使用。