数
学
实
验
数学实验二
微积分的基本运算
MATLAB编程(三大基本结构)
有关定积分与函数最值函数
微分方程的数值解
基本绘图函数
数
学
实
验
一、顺序结构
二、选择结构
三、循环结构
Matlab语言编程的基本结构
数
学
实
验
关系运算、逻辑运算和相关函数
关系运算: < <= > >= == ~=
a>b 真(1) 假(0)
逻辑运算: &(与) |(或) ~(非)
相关 函数: all(vector| matrix) , any(A) ,
exist, find , finite , isempty
isinf , isnan , issparse , xor
数
学
实
验
All和any 函数
all(vector| matrix) (向量中所有元素非零,则
为真;否则为假)(
all([1 2 3]) 1 all([0 1 2]) 0
any(vector| matrix) (向量中只要有一个元素非
零,则为真;否则为假)
any([1 2 3]) 1
any([0 1 2]) 1
any([ 0 0 0])->0
数
学
实
验
EXIST 检查变量,函数或目录是否存在
EXIST(‘A’) 返回:
0 if A does not exist
1 if A is a variable in the workspace
2 if A is an M-file on MATLAB's search
path or a file of unknown type
3 if A is a MEX-file on MATLAB's search path
4 if A is a MDL-file on MATLAB's search path
5 if A is a built-in MATLAB function
6 if A is a P-file on MATLAB's search path
7 if A is a directory
数
学
实
验
EXIST(‘A’,‘var’)只检查是否为变量.
EXIST(‘A’,‘builtin’)只检查是否为内部函数.
EXIST(‘A’,‘file’)只检查A是否为文件和目录
EXIST(‘A’,‘dir’)只检查A是否 目录
数
学
实
验
Find(a) :寻找非零元素的下标
A=[1 2 3;0 2 3]
[i,j,k]=Find(a) k= a(i,j)(非零元)
[i,]=find(a~=0) k均返回1
[i,j,k]=find(a>1) k均返回1
数
学
实
验
finite(a):检查a中元素是否有限
如:finite([ 1 3 inf])[1 1 0]
isinf(a):检查a中元素是否无穷
如:isinf([ 1 3 inf])[0 0 1]
isnan(a):检查a中元素是否非数
isnan([pi NaN Inf -Inf]) is [0 1 0 0].
isnan([pi NaN Inf -Inf]) is [0 1 0 0].
Issparse(a):检查a矩阵是否稀疏(见sparse)
xor(s,t):异或
Isempty(a): 检查a 是否为空矩阵
数
学
实
验
循环结构:
for variable = expr,
statement,
...,
statement
end
例:
for I = 1:N,
for J = 1:N,
A(I,J) = 1/(I+J-1);
end
end
数
学
实
验
循环结构:
while expr,
statement,
...,
statement
end
例:
sum=0;I=0
while I<=20,
sum=sum+I^2;
I=I+1;
end
数
学
实
验
选择结构:
if expression
statements;
elseif expression
statements;
else
statements;
end
数
学
实
验
for i=1:5
for j=1:6
if i == j
A(i,j) = 2;
elseif abs(i-j) == 1
A(i,j) = -1;
else
A(i,j) = 0;
end
end
end
数
学
实
验
开关语句:
switch switch_expr
case case_expr,
statement, ..., statement
case {case_expr1, case_expr2,...}
statement, ..., statement
otherwise,
statement, ..., statement
end
数
学
实
验
function y=f(x)
switch lower(x)
case {'linear','bilinear'},
disp('Method is linear')
case 'cubic', disp('Method is cubic')
case 'nearest', disp('Method is earest')
otherwise, disp('Unknown method.')
end
数
学
实
验
function y=f(x)
switch x
case {1,2}, disp('Method is linear')
case 3, disp('Method is cubic')
case 4, disp('Method is nearest')
otherwise, disp('Unknown method.')
end
数
学
实
验
function y=f(x)
switch lower(x)
case {'linear','bilinear'}, disp('Method
is linear')
case 2, disp('Method is cubic')
case 3, disp('Method is nearest')
otherwise, disp('Unknown method.')
end
数
学
实
验
数值积分
•格式:quad(‘name’,a,b,tol,trace)…Simpson
求积
•For example:
• quad(‘Name’,0 ,2*pi, -5,1)
注: quad8 Newton-Cotes求积公式
数
学
实
验
求数值积分的Monte Carlo方法
原理:类似于用随机扔
石头来测量水塘的面积
方法,此方法可推广到
求定积分(使用函数
rand(m,n),
Scatter(x,y,M)
思考:在高维情况下怎
样使用该方法?
数
学
实
验
函数的最小值
求单变量函数最小值点函数
[x,op]=Fmin(‘name’,x1,x2,options,p1,…,p10)
其中:x1,x2限定自变量的取值范围
ʩoptions: 控制算法的参数向量,其中几个元素的意义是:
ʩoptions(2)……终止寻优的容差值
ʩoptions(3)……终止寻优的目标函数容差值
ʩoptions(14)……最大迭代次数
ʩop……实际迭代次数
ʩx……最小值点
ʩp1,p2,….,p10……传递参数
数
学
实
验
求多变量函数最小值点函数
[x,op]=Fmins(‘name’,x0,options,[],p1,…,p10)
ʩx0 ……迭代初值
ʩoptions: 控制算法的参数向量,其中几个
元素的意义是:
ʩoptions(2)……终止寻优的容差值
ʩoptions(3)……终止寻优的目标函数容差值
ʩoptions(14)……最大迭代次数
ʩop……实际迭代次数
ʩx……最小值点
数
学
实
验
常微分方程的数值解
格式:
[t,x]=ode23(‘fun’,t0,tf,x0,tol,tr
ace)
[t,x]=ode45(‘fun’,t0,tf,x0,tol,tr
ace)
其中:
fun: 描述微分方程的函数
t0,tf……变量t的始值和终值
x0……初始状态列向量
tol,trace……意义同前
数
学
实
验
例: 求解Van der Pol 方程
x(0)=0,dx/dt(0)=
令x1=dx/dt,x2=x,则方程化为
function yy=fun(x)
yy=[0 0]’;
yy(1)=(1-x(2)^2)*x(1)-x(2);
yy(2)=x(1)
数
学
实
验
t0=0;tf=20;
x0=[ ,0]’;
[t,x]=ode23(‘fun’,t0,tf,
x0)
其中:
x(1) dx/dt
x(2) x
数
学
实
验
基本绘图函数
二维图形函数
设x=[x1 x2 x3 ,…,xn], y=[y1,y2,…,yn]
plot(x,y,s)……线性X-Y坐标图
其中:s为绘图的方式
(type,symbol,color)
type: - | : | -.| ..|
Symbol: .| + |*|o|X|s|d|v|<|>|^|g|h|
color: y|m|c|r|g|b|w|k|
For example: plot(x,y,’c+-’)
数
学
实
验
也可以在一个图上绘制多幅曲线图
For example:
plot(x1,y1,s1,x2,y2,s2,…,xn,yn,sn)
数
学
实
验
loglog(x,y)……双对数坐标图
semilogx(x,y)……半(X)对数坐标图
semilogy(x,y)…...半(Y)对数坐标图
polar(theta, r)
stem(x,y)…….火柴图
stair(six,y)…….阶梯图
fplot(fun,limits)…….数值函数曲线图
数
学
实
验
例:fplot('sin(1 ./ x)', [ ],1e-3)
数
学
实
验
Plot3(x,y,z) …..三维曲线绘图
plot3(x,y,z,s)
plot3(x1,y1,z1,s1,…,xn,yn,zn,sn)
例:
t=0::20;
x=t; y=sin(x); z=sin(2*t);
plot3(x,y,z,’g-’)
数
学
实
验
数
学
实
验
与图形有关的函数:
grid……添加网格
title(‘the title of the graph’)…图题
legend(‘the legend of the graph)…图例
xlabel(‘x-axis’)
ylabel(‘y-axis’)
数
学
实
验