数学建模社区-数学中国

标题: 程序设计入门简介 [打印本页]

作者: 森之张卫东    时间: 2015-7-13 22:18
标题: 程序设计入门简介
1.3        程序设计入门
1.3.1        变量
1.3.1.1        命名规则
给变量(包括函数)命名时应该遵循一下规则:
(1)        必须以字母开头
(2)        可由字母、数字、下划线混合
(3)        变量名和函数名字符长度不超过31个字符,如果变量前31个字符相等而后面字符不同,则作为同一变量处理
1.3.1.2        变量定义:局部变量和全局变量
变量并不都需要显示的申明
局部变量        在程序中可以定义变量。每个函数体内部也可以定义自己的变量,这些变量如果不用global声明,则不能从其他函数和MATLAB工作空间中访问这些变量,这样的变量就是局部变量。
全局变量        如果要使得其他函数和MATLAB工作空间使用这些变量,则定义为全局变量,用“global”声明。
全局变量需要在函数体对变量的赋值语句前说明,整个函数以及所有对函数的递归调用都可以利用全局变量。
变量命名建议:
变量名尽量反映其含义,如汽车数量用numcar,捕鱼收入用incomefish。
局部变量名尽量采用小写,全局变量名尽量大写
1.3.2        基本语句
赋值语句是Matlab中的基本语句。其结构为:
(1)变量名列表=表达式
例子:
        a=rand(2,5);
a(1,2)=10*rand
(2)另外一个语句可以只有表达式,而没有变量名列表和等号,这样改语句的结果将自动赋值给MATLAB内部变量“ans”。
例子:
        rand(1,5)
size(a)
1.3.3        分支判断语句
1.3.3.1        if分支判断语句
其通用格式:
       IF expression
         statements
       ELSEIF expression
         statements
       ELSE
         statements
       END
比较操作符
相等        小于        大于        小于等于        大于等于        不等于
==        <        >        <=        >=        ~=.
逻辑操作符
名称        表示符号
与(and)        &
或(or)        |
非(not)        ~
例子:
grade=yesinput('情输入你的成绩',0,[0 100]);
if grade>=90
   sprintf('成绩优异')
elseif grade>=80 & grade<90
   sprintf('成绩优秀')
elseif grade>=60 & grade<80
   sprintf('成绩中等')
else
   sprintf('居然还没有及格')
end
1.3.3.2        Switch分支判断语句

Switch语句
通用格式:
SWITCH switch_expr
CASE case_expr,
statement, ..., statement
CASE {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement
...
OTHERWISE,
statement, ..., statement
END
例子:对输入的成绩进行判别
grade=yesinput('请输入成绩',0,[0 100]);
grade=fix(grade/10)
switch grade
case {9,10},
   sprintf('成绩优异')
case {8},
   sprintf('成绩优秀')
case {6,7},
   sprintf('成绩一般')
otherwise,
   sprintf('还没有及格')
end
1.3.4        循环语句
1.3.4.1        FOR语句
通用格式:
FOR variable = expr, statement, ..., statement END
例子:构造一个5行4列的矩阵,并赋值
for i=1:5
   for j=1:4
      m(i,j)=i*100+j;
   end
end
1.3.4.2        WHILE语句
通用格式:
       WHILE expression
         statements
       END
例子:将输入的字符串反序
str=input('请输入字符串: ','s')
tmpstr=str;
i=1;
len=length(str);
while i<=len
   str(len-i+1)=tmpstr(i);
   i=i+1;
end
1.3.5        Matlab程序M文件
Matlab程序一般保存为扩展名为m的文件,这类文件分为两类:(1)脚本(2)函数

脚本:
在Matlab中即不接受输入参数,也不返回参数的M文件称为脚本,这类文件中没有函数申明,它是一些MATLAB函数和命令的组合。
脚本可以直接在MATLAB环境下执行,它可以访问整个MATLAB工作空间种的变量,而脚本中的变量在脚本执行完后仍然保留在工作空间中,并能被其它脚本所引用,直到用clear命令清空。
比如建立脚本文件mypro1.m,其内容如下:
num=input('输入一个正整数:')
s=0;
for i=1:num,
    s=s+i;
end
s
本脚本功能是输入一个正整数,赋值给num,然后计算1到该正整数的所有整数的和,并将结果保存到变量s中。
注意:Matlab工作空间中的变量要被函数所引用,必须申明为全局变量
且全局必须在使用前就要申明,语法为:global varname1 varname2 …
例子:
文件:temp1.m
global t1
t1=[1 3 5 7]
文件:testfun.m
function r=testfun(num)
global t1
r=t1*num
运行:
clear all
temp1
t1 =
     1     3     5     7
testfun(2)
r =
     2     6    10    14
ans =
     2     6    10    14
1.3.6        函数与子函数
1.3.6.1        函数语法结构
        函数同其它高级语言一样,是MATLAB语言的重要组成部分,MATLAB除了内部函数外,还有各种工具箱中的函数,这些函数都以M文件给出,以便调用。
下面以一个例子来说明MATLAB函数的语法。下面是文件名为mean.m的内容。
function y = mean(x,dim)
%MEAN   Average or mean value.
%   For vectors, MEAN(X) is the mean value of the elements in X. For
%   matrices, MEAN(X) is a row vector containing the mean value of
%   each column.  For N-D arrays, MEAN(X) is the mean value of the
%   elements along the first non-singleton dimension of X.
%
%   MEAN(X,DIM) takes the mean along the dimension DIM of X.
%
%   Example: If X = [0 1 2
%                    3 4 5]
%   then mean(X,1) is [1.5 2.5 3.5] and mean(X,2) is [1
%                                                     4]
%   See also MEDIAN, STD, MIN, MAX, COV.

%   Copyright 1984-2001 The MathWorks, Inc.
%   $Revision: 5.16 $  $Date: 2001/04/15 12:01:26 $

if nargin==1,
  % Determine which dimension SUM will use
  dim = min(find(size(x)~=1));
  if isempty(dim), dim = 1; end
  y = sum(x)/size(x,dim);
else
  y = sum(x,dim)/size(x,dim);
end
mean是MATLAB用于统计的一个函数。第一行为函数的声明,
函数语法为:
function [返回参数列表]=函数名(输入参数列表)
mean的返回参数为y,y可以用中括号括起来。输入参数为x和dim,
nargin和nargout为MATLAB的内部变量,分别表示输入参数个数和输出参数个数,由于有些函数要进行参数个数检查或在一些函数实现时参数个数不确定,因此要借助这两个变量进行程序算法设计和控制。
百分号%用于注释,%后的字符串表示注释文本
1.3.6.2        函数编写示例
求任意两个自然数之间(包含两个自然数)所有自然数的和。
输入参数2各,输出参数1个,即返回和值。
函数名这里取为sum2,函数名要有一定意义,才便于记忆,而且不要于系统内部函数相同,可以通过“help 函数名”看一下改函数名是否为系统函数。
function r=sum2(n1,n2)
%sum2  求任意自然数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
1.3.6.3        函数的参数
参数的传递规则
每个函数有自己专用的工作空间,函数内部变量与MATLAB工作空间的联系只通过输入参数与输出参数来建立。参数的传递属于值传递,即输入参数变量的值在函数内部改变了,而在调用改函数时没有作为返回参数,那么这个输入参数变量的并没有改变。
例如:
function r=test1(a)
%改变输入参数a的值
r=[];
a=999;
r=a;
运行:
a=100;test1(a);a
输出:
a =
   100
说明a的值并没有改变,可以这样调用来改变a的值。
>> a=100;a=test1(a);a
输出:
a =
   999
1.3.6.4        子函数
        函数文件可以包含一个以上的函数,该文件中的第一个函数时主函数,后面定义的所有函数都是子函数,子函数只允许同一个文件中的函数及其它函数访问。函数文件名要与主函数名相同。
function s=mymainfun
num=input('输入一个正整数:')
sprintf('从1到整数%d的和为%d',num,mysum(num))
function s=mysum(num)
%求1到num所有整数相加之和
s=0;
for i=1:num,
    s=s+i;
end

私有函数
        私有函数指位于private目下的函数,它们只能被其上一层目录的函数访问,对于其它目录的函数是部可见的,这就允许私有函数可以与其它目录下的函数同名。
        MATLAB在执行某个程序或函数时,如果它有私有目录,则先查找私有目录,在根据MATLAB的PATH查找其它目录下的函数。
        如果建立了私有函数目录,则不要添加到MATLAB的查找路径当中。
技巧:
1.3.7        建立内部函数
命令:
inline
语法:
inline(expr)  根据expr建立内部函数,函数自变量根据表达式自动搜索;
inline(expr, arg1, arg2, ...)  指定参数,arg1等参数是字符串参数
inline(expr, N)   参数为x,P1,P2,…,PN为
例子:
g = inline('t^2')
f = inline('xyz','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







欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5