MATLAB语言编程 介绍
MATLAB中各种 命令可以完成许多单一的任务,对于某些较为复杂的问题,仅靠现有的命令或函数来解决,往往是难以达到目的 。为此,要运用 MATLAB编程语言编制程序,形成 M-文件。
程序是使计算机完成各项运算的命令集,运行一个编制好的程序,计算机会从第一条命令行开始,一行接一行地执行相应的命令,直到终止。
程序一般包含:数据输入,数据处理和结果输出三部分,
其中数据处理是核心。程序编写调试完成后,需要存盘,
形成永久性文件,可以随时对它进行调用或修改。文件名以字母开头,但不能用专用变量名,如 pi等。
MATLAB中每一个 命令都是一个 M-文件。
M-文件中输入、输出 命令
直接赋值输入,提示对话输入 (input命令 )
x=2; x=input('请输入参数 x=');
a=[1,2;3,4]; a=input('请输入矩阵 a=');
s= 'any string!'; s=input('Please input s=');
直接输出,格式控制输出 (fprintf命令 )
x fprintf('x=%.0f,y=%.5f\n',pi,pi);
disp([a,b]); fprintf('x=%5g,y=%10.5g\n',N,pi);
M-文件中循环控制 命令 (for命令 )
格式,for i=n1:(step):n2
commands;
end
作用:重复执行命令集 commands.
例 2:求奇数和,s=1+3+5+… +(2k-1)
n=input('请输入 n=');
s=0;
for i=1:2:n
s=s+i;
fprintf('i=%.0f,s=%.0f\n',i,s);
end
例 1:求和,s=1+2+… +n
n=input('请输入 n=');
s=0;
for i=1:n
s=s+i;
fprintf('i=%.0f,s=%.0f\n',i,s);
end
例 3:求阶乘,p=1× 2 × 3 × … × n=n!
n=input('请输入 n= ');
p=1;
for i=1:n
p=p*i;
fprintf(' i=%.0f,p=%.0f\n ',i,p);
end
例 4:求 e,e=1+1+1/2!+1/3!+… +1/n!
n=input('请输入 n= ');
p=1;e=1;
for i=1:n
p=p*i;
p1=1/p;
e=e+p1;
fprintf(' i=%.0f,p=%.0f,e=%.8f \n ',i,p,e);
end
例 5:求 pi,pi/4=1-1/3+1/5-1/7+1/9-1/11+……
n=input('请输入 n= ');
pi=0;k=-1;
for i=1:2:n
k=(-1)*k;
pi=pi+k*1/i;
fprintf(' i=%.0f,pi=%.8f \n ',i,4*pi);
end
M-文件中条件循环 命令 (while命令 )
格式,while (condition is true)
commands;
end
作用:重复执行命令集 commands.
例 6:求和,s=1+2+… +n<3000
s=0;k=1;
while s<3000
s=s+k;
fprintf(' k=%.0f,s=%.0f\n ',k,s);
k=k+1;
end
例 7:求 e,e=1+1+1/2!+1/3!+… (1/n!<1.0e-8)
p=1;e=1;r=1;i=1;
while r>=1.0e-8
p=p*i;
r=1/p;
e=e+r;
fprintf(' i=%.0f,r=%.9f,e=%.9f \n ',i,r,e);
i=i+1;
end
M-文件中选择控制 命令 (if命令 )
单项选择控制
格式,if (condition is true)
commands;
end
作用:若条件成立,则执行命令集
commands,否则,不执行。
例 8:求 n个实数中最大的数 M.
a=input('请输入数组 a[n]= ');
[m,n]=size(a);
M=a(1);
for i=2:n
if M<a(i)
M=a(i);
end
fprintf(' M=%.5f,a(%.0f)=%.5f \n ',M,i,a(i));
end
M-文件中选择控制 命令 (if命令 )
多项选择控制
格式,if (condition is true)
commands;
elseif (condition is true)
commands;
else
commands;
end
作用:若条件成立,则执行命令集
commands,否则,不执行。
例 9:建立符号函数 sign(x)
x=input('x=');
if x>0
sn=1;
elseif x==0
sn=0;
else
sn=-1;
end
fprintf('x=%.5f,sn=%.0f\n',x,sn);
数值计算问题
问题 1,求无理数的近似值先求 的近似值,再设计通用程序,
问题 2,用两种方法求 Pi的近似值
)2,1( nAAn
2
例 10:用二分法求函数 x^2-2=0的正实根,
0)()(],2,1[],[,2)( 2 bfafbaxxf
,2/)()1 bac; ),|)((|0)( if cgrcfcf
);()(,
0)()( e ls e if
cfbfcb
afcf

);()(,e ls e cfafca
1 ),g o t oo r ;s t o p,,|)(| if)2 cgrcf
输入初值,Kerbaxf,],,[ ),(
2/)( bac
cr?
0)(?rf
0)()(?rfaf
2/)( bac
|| ercr
rb?ra?
输出结果,STOP
No
No
No
Yes
Yes
Yes
例 11:用切线法求函数 x^2-2=0的正实根,
0)( ],2,1[],[,2)( 2 xfbaxxf
,...2,1,0,
)(
)(
2)
2,)1
1
0

k
xf
xf
xx
x
k
k
kk
2 ),g o t oo r ;s t o p,,|)(| if)3 kk xgrxf
例 12:用泰勒公式求 pi的近似值。
)(
)12(
)1(...
753
a r c t a n)(
12
12
1
753


k
k
k xo
k
xxxx
x
xxf
)12(
1)1(...
7
1
5
1
3
11
4
1

k
k?
特点:收敛速度慢,循环次数多,
例 13:用梯形求积公式求 pi的近似值。
1010 2 |a r c t a n41 4)1 xdxx
nkkhax
n
ab
h
xfxfxf
h
Tdxxf
k
n
n
k
kn
b
a
,,1,0,,
))()(2)((
2
)(
1
1
0


2)梯形公式
nkkhax
n
ab
h
xx
fhT
xf
xx
fxfxf
h
Tdxxf
k
n
k
kk
n
n
n
k
kk
n
k
kn
b
a
,,1,0,,
).)
2
((
2
1
))()
2
(2)(2)((
4
)(
1
1
1
1
1
1
02




3)复化梯形公式
例 14:用 Simpson求积公式求 pi的近似值。
1) 辛普生公式
nkkhax
n
ab
h
xx
fxfxfxf
h
Sdxxf
k
n
k
kk
n
n
k
kn
b
a
,,1,0,,
))
2
(4)()(2)((
6
)(
1
1
1
1
0


)(
3
1
))
2
(4)()(2)((
6
22
1
1
1
1
0
nnn
n
k
kk
n
n
k
kn
TTT
xx
fxfxfxf
h
S


2)辛普生公式与梯形公式的关系
))2(2)()(2)((4
1
1
1
1
02
n
k
kk
n
n
k
kn
xxfxfxfxfhT