1.edit命令创建脚本
edit filename;
2.顺序结构
数据输入:A = input('提示信息');
数据输出:disp(A);
程序暂停:pause(delay time); 注:时间为0,程序停止
ctrl+c 强行终止程序
例1 有一线段AB,A的坐标为(1,1),B的坐标为(4.5,4.5),求AB的长度,
以及黄金分割点C的坐标。
a=input('a=');
b=input('b=');
c=a+0.618*(b-a);
s=abs(a-b);
disp(s)
disp(c)
1.当条件语句为矩阵,矩阵非空且不包含非零元素时为真。
例1 输入一个整数,若为奇数则输出其平方根,否则输出其立方根。(双分支)
x=input('请输入x的值:');
if rem(x,2)==1 %等价if rem(x,2)
y=sqrt(x);
else
y=x^(1/3); %等价y=power(x,1/3);
end
y
例2 输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出
其对应的大写字母;若为数字字符则输出其对应数的平方,若为其他字符则原样输出。
c=input('请输入一个字符:','s');
if c>='A' && c<='Z' %多分支
disp(lower(c))
elseif c>='a' && c<='z'
disp(upper(c))
elseif c>='0' && c<='9'
disp(str2double(c)^2)
else
disp(c)
end
例1 输入一个英文单词,判断它是否以元音字母开头。
%%使用switch语句
c=input('请输入一个单词:','s');
switch c(1)
case {'A','E','I','O','U','a','e','i','o','u'}
disp([c,'以元音字母开头']);
otherwise
disp([c,'以辅音字母开头']);
end
%%使用if语句findstr函数
c=input('请输入一个单词:','s');
if findstr(c(1),'AEIOUaeiou')>0
disp([c,'以元音字母开头']);
else
disp([c,'以辅音字母开头']);
end
例2 PM2.5是指大气中直径小于或等于2.5微米的可入肺颗粒物,是衡量空气质量的重要标。
假定空气质量等级以PM2.5数值划分为6级。 PM2.5数值在[0,35)空气质量为优,[35,75)
为良,[75,115)为轻度污染,[115,150)为中度污染,[150,250)为重度污染,大于等
于250为严重污染。编写程序,输入PM2.5数值,输出空气质量等级。
g=input('请输入PM2.5值:');
switch fix(g)
case num2cell(0:34) % num2cell:将数值矩阵转换为单元矩阵
disp('空气质量优');
case num2cell(35:74)
disp('空气质量良好');
case num2cell(75:114)
disp('空气质量轻度污染');
case num2cell(115:149)
disp('空气质量中度污染');
case num2cell(150:249)
disp('空气质量重度污染');
otherwise
disp('空气质量严重污染');
end
1.说明
1)for语句针对向量的每一个元素执行一次循环体
2)退出循环后,循环变量的值就是向量中最后元素的值
3)向量为空循环体不执行
4)对于矩阵,循环变量=矩阵的每一列,此时循环变量为向量
(例:5行4列矩阵执行4次)
例:计算圆周率π。
(1)利用无穷级数展开式求π的近似值。
%%用if循环语句%
y=0;
g=-1;
n=input('n=?');
for i=1:n
g=-g;
y=y+g/(2*i-1);
end
pai=4*y
%%用向量求和的方法实现程序%
n=input('n=?');
x=1:2:(2*n-1);
y=(-1).^(2:n+1)./x;
pai=sum(y)*4
(2)利用定积分的近似值求π的近似值。
a=0;
b=1;
n=input('n=?');
h=(b-a)/n;
x=a:h:b;
f=sqrt(1-x.*x);
s=[];
for k=1:n
s1=(f(k)+f(k+1))*h/2;
s=[s,s1];
end
pai=4*sum(s)
(3)利用蒙特卡洛法求π的近似值。
s=0;
n=input('n=?');
for i=1:n
x=rand(1);
y=rand(1);
if x*x+y*y<=1
s=s+1;
end
end
pai=s/n*4
例1 从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
msum=0;
n=0;
x=input('Enter a number (end in 0):');
while x~=0
msum=msum+x;
n=n+1;
x=input('Enter a number (end in 0):');
end
if n>0
msum
mean=msum/n
end
例2 求[100,200]之间第一个能被21整除的整数。
for n=100:200
if rem(n,21)~=0
continue %continue跳出本次循环,继续执行下一次
end
n
break %break跳出循环
end
例3 用筛选法求某自然数范围内的全部素数。
m=input('m=');
p=1:m;
p(1)=0;
for i=2:sqrt(m)
for j=2*i:i:m
p(j)=0;
end
end
n=find(p~=0);
p(n)
1.定义、调用
return:表示结束函数的执行,可不使用,程序会自动返回
例1 编写函数文件,求半径为r的圆的面积和周长。
%%functoin 输出形参表=函数名(输入形参表)%
function [s,p]=fcircle(r)
s=pi*r*r;
p=2*pi*r;
2.匿名函数
基本格式:
函数句柄变量=@(匿名函数输入参数)匿名函数表达式 @:函数句柄运算名
函数句柄变量=@函数名
例2 已知=(40)/((30)+(20))
①当()=+10 ln(^2+5)时,的值是多少。
②当()=1×2+2×3+3×4+⋯+×(+1)时,的值是多少。
分别用匿名函数和函数文件定义函数。
%%第二问的函数文件f2.m。%
function f=f2(n)
f=0;
for k=1:n
f=f+k*(k+1);
end
%%第一问脚本文件mf.m。%
f1=@(n) n+10*log(n*n+5);
y1=f1(40)/(f1(30)+f1(20))
y2=f2(40)/(f2(30)+f2(20))
例1 利用函数的递归调用,求n!。
函数文件fact.m如下:
function f=fact (n)
if n<=1
f=1;
else
f=fact (n-1)*n; %递归调用求(n-1)!
end
在脚本文件a.m中调用函数文件fact.m,求n!。
n=input('Please input n=');
s=fact (n);
disp(s)
例2 Fibonacci数列定义如下:
f1=1
f2=1
fn=fn-1+fn-2 (n>2)
编写递归调用函数求Fibonacci数列的第n项,然后调用该函数验证Fibonacci数列
的如下性质:
f1^2+f2^2+f3^2+……+fn^2=fn×fn+1
首先建立函数文件ffib.m。
function f=ffib(n)
if n>2
f=ffib(n-1)+ffib(n-2);
else
f=1;
end
建立程序文件test.m。
F=[];
for k=1:20
F=[F,ffib(k)*ffib(k)];
end
sum(F)
ffib(20)*ffib(21)
1.函数参数的可调性
nargin: 记录输入实参的个数
nargout:记录输出实参的个数
例1 利用nargin和nargout建立函数文件test.m。
function fout=test(a,b,c)
if nargin==1 %输入参数为一个时
fout=a;
elseif nargin==2 %输入参数为两个时
fout=a+b;
elseif nargin==3
fout=(a*b*c)/2;
end
2.全局变量与局部变量
全局变量定义格式:global 变量名
例2 利用全局变量建立函数文件wad.m。
function f=wad(x,y)
global ALPHA BETA
f=ALPHA*x+BETA*y;
%%在工作区使用全局变量
>>global ALPHA BETA
>>ALPHA=1
>>BETA=2
>>s=wad(2)
s =
5
【Study from MOOC】