《matlab程序设计》课程体系Word格式.docx
《《matlab程序设计》课程体系Word格式.docx》由会员分享,可在线阅读,更多相关《《matlab程序设计》课程体系Word格式.docx(36页珍藏版)》请在冰豆网上搜索。
![《matlab程序设计》课程体系Word格式.docx](https://file1.bdocx.com/fileroot1/2022-12/11/e3f736be-7c3c-4a6b-9094-055294ac7224/e3f736be-7c3c-4a6b-9094-055294ac72241.gif)
④命令查询系统
help函数名;
demos->
search+函数名。
第二讲:
Matlab基本运算
一、数值类型
(1)变量
①命名规则
(a):
变量名以英文字母开始,由字母、数字、下划线组成,不能有空格和标点符号;
(b):
区分大小写;
(c):
变量名长度不能超过31位,超过部分将被忽略;
(d):
某些常量也可作变量名,如虚数单位i。
②变量的显示
format:
短格式(5位定点数);
formatlong:
长格式(15位定点数);
formate:
短格式e方式;
formatlonge:
长格式e方式;
formatbank:
2位十进制格式;
③变量存取
save:
存储
load:
读取
(2)常量
matlab中常见常量:
pi:
圆周率
i(j):
虚数单位
inf:
无穷大
nan:
“notanumber”即不定值
自然对数的底e:
[exp(x):
计算e的x次方],故e=exp
(1).
二、关系运算与逻辑运算
(1)关系运算符:
大于:
>
大于等于:
=
小于:
<
小于等于:
等于:
==不等于:
~=
(2)逻辑运算符:
逻辑与:
&
逻辑或:
|逻辑非:
~
三、数学运算符和基本数学函数
(1)数学运算符
加:
+减:
-乘:
*
右除:
/左除:
\乘方:
^
(2)常用数学函数
abs(x):
sqrt(x):
exp(x):
log(x):
log2(x):
log10(x):
sin(x):
cos(x):
tan(x):
cot(x):
sec(x):
csc(x):
asin(x):
acos(x):
atan(x):
acot(x):
real(z):
imag(z):
conj(z):
取整函数:
round(x):
4舍5入
fix(x):
向零取整
floor(x):
向小取整
ceil(x):
向大取整
rem(x,y):
x除以y的余数
gcd(x,y):
求整数x与y的最大公因子
lcm(x,y):
求正整数的最小公倍数
四、矩阵及其运算
(1)矩阵的创建
向量(横向量、列向量),矩阵
例如:
a=[1234]%建立一个4维行向量
b=[2;
4;
6;
8]%建立一个4维列向量
c=[1011;
0011;
0101;
1110]%建立4行4列的矩阵
d=[1234;
4356;
2213]%建立3行4列矩阵
(2)矩阵的访问
向量单个元素访问:
a(i)
矩阵单个元素访问:
c(i,j)
访问矩阵某一行:
d(i,:
)
访问矩阵某一列:
d(:
j)
访问矩阵某一块:
d(1:
2,2:
4)
(3)矩阵的基本运算
加(+)、减(-)、乘(*)、左除(/)、右除(\)、幂(^)、转置(‘)、求逆(inv())
(4)常用矩阵函数
方阵的行列式:
det(A)
矩阵的秩:
rank(A)
矩阵的特征值和特征向量:
eig(A)
计算矩阵特征方程的根:
poly(A)(参考帮助系统)
diag(A):
生成由矩阵A的主对角元素组成的列向量;
diag(X):
生成由向量X的元素为主对角元素,其余元素为零的方阵;
triu(A):
生成上三角矩阵;
tril(A):
生成下三角矩阵;
(5)常见特殊矩阵
zeros():
产生元素全为0的矩阵
ones():
产生元素全为1的矩阵
eye():
产生单位矩阵
rand():
产生均匀分布的随机矩阵
randn():
产生正态分布的随机矩阵
五、符号运算
(1)创建符号对象
①sym函数:
一次定义一个符号;
格式:
符号变量=sym(‘符号字符串’)
②syms函数:
一次定义多个符号;
格式:
symsx1x2x3......
u=sym('
3*x^2+5*y^2+2*x*y+6'
symsxy
v=x^2-2*y^2+x*y
2*u-v+2
(2)符号表达式的四则运算
symsxy;
s1=2*x^2-x+5;
s2=x^2+3*x-2;
s1+s2
s1-s2
s1*s2
s1/s2
①因式分解:
s=sym('
x^2-2*x-3'
);
factor(s)
又如
s=sym('
6*x^4+5*x^3+5*x-6'
factor(s)
再如
f=factor(123)
②多项式展开
(2*x+3)*(3*x-2)*(x^2+1)'
expand(s)
(3)符号微积分运算
①极限
命令:
limit(F,x,a)%计算函数F当x趋向于a时的极限;
例1:
求
symsx;
limit((x^2-1)/(x-1),x,1)
例2:
limit((cos(x)-cos(3*x))/(x^2),x,0)
例3求
limit((x+sin(x))/x,x,inf)
②导数
一阶导数
diff(F)%计算函数F的导数
例1求
的导数
diff(3*x^2+2*x+1)
diff(F,x)%计算函数F关于x的导数
例2求
symsax;
diff(cos(a*x^2-1),x)
例3求
关于a的导数
diff(cos(a*x^2-1),a)
高阶导数:
diff(F,x,n)
例4:
的二阶导数
diff(3*x^2+2*x+1,2)
例5:
关于x的二阶导数
diff(cos(a*x^2-1),x,2)
例6:
的二阶混合导数
dx=diff(cos(a*x^2-1),x);
dxa=diff(dx,a)
③积分
不定积分
int(F)%求F的不定积分
int(cos(2*x-1))
例2:
int(x/sqrt(x+1))
定积分
int(F,a,b)%求F在[a,b]上的定积分
例3:
int(x^3*atan(x),0,1)
例4:
计算广义积分
int(1/(1+9*x^2),-inf,inf)
二重积分:
计算二重积分
,D由
和
围成。
若先对y积分,则积分限为:
,
z=0.5*(2-x-y);
z_y=int(z,y,x^2,x);
z_y_x=int(z_y,x,0,1)
第三讲:
Matlab数值计算
一、解方程
(1)直接解法
①roots函数
roots(P)%计算多项式方程P=0的根
求方程
的根
P=[1-2-3];
%用向量表示多项式,即P是多项式的系数向量
roots(P)
P=[1-203-8];
X=roots(P)
②fsolve函数
fsolve(‘fun’,x0)%计算fun=0的根,x0为估计根的初始值
[x,fva]=fsolve(‘fun’,x0)%输出根x及x处的函数值
[x,fva,exi]=fsolve(‘fun’,x0)%输出根x及x处的函数值,exi为1表示正常退出
[x,fva]=fsolve('
x*3^x-1'
0.8)
[x,fva,exi]=fsolve('
x*exp(2*x)-8'
[x,fva,exi,out]=fsolve('
③fzero函数
fzero(‘fun’,x0)%计算fun=0的根,x0为估计根的初始值,可是是常数,也可以是区间,若是常数则计算x0附近的根,若是区间,则计算区间里的根,无根则输出错误信息。
[x,fva]=fszero(‘fun’,x0)%输出根x及x处的函数值
[x,fva,exi]=fzero(‘fun’,x0)%输出根x及x处的函数值,exi为1表示正常退出
x=fzero('
x^2+x-1'
0.5)
-2)
[12])
[02])
[x,fva,exi,out]=fzero('
(2)其它迭代解法
如二分法、牛顿切线法、不动点迭代法、弦截法等,这些算法的实现将在第五讲应用举例中讲述。
二、求解方程组
(1)线性方程组
①矩阵求逆法
求解线性方程组
A=[123;
-137;
903];
b=[1;
7];
x=A\b
或者
x=inv(A)*b
②矩阵分解法
LU分解
[L,U]=lu(A)%对AX=B的系数矩阵A进行lu分解,使A=LU,则原方程变为LUX=B,则X=U\(L\B)或X=inv(U)*inv(L)*B.
利用LU分解求解线性方程组
A=[1.53-0.84;
20910;
-74.8-0.61;
1412.3-45];
B=[4;
0;
1;
-2];
[L,U]=lu(A)
X=U\(L\B)%或X=inv(U)*inv(L)*B
QR分解
[Q,R]=qr(A)%对AX=B的系数矩阵A进行qr分解,使A=QR,则原方程变为QRX=B,则X=R\(Q\B)或X=inv(R)*inv(Q)*B.
利用QR分解求解线性方程组
A=[10.50.33330.25;
0.50.33330.250.2;
...
0.33330.250.20.1667;
0.250.20.16670.1429;
];
B=[1;
2;
1];
[Q,R]=qr(A)
x=R\(Q\B)或X=inv(R)*inv(Q)*B
Cholesky分解
[R,p]=chol(A)%对AX=B的系数矩阵A进行Cholesky分解,使A=R'
R,则原方程变为R'
RX=B,则X=R\(R'
\B)或X=inv(R)*inv(R'
)*B.若A正定对称,则p为0,否则p为一正整数。
A=[9-3630;
-36192-180;
30-180180];
[R,p]=chol(A)
x=R\(R'
\B)%或X=inv(R)*inv(R'
)*B
③迭代法
如Gauss-Seidel迭代法、Jacobi迭代法等,这些算法的实现将在第五讲应用举例中讲述。
④超定方程的近似解法
伪逆法:
X=pinv(A)*B
最小二乘法:
X=lsqnonneg(A,B)
利用伪逆法和最小二乘法求解超定方程组
A=[1-23;
410;
716;
958];
0];
X1=pinv(A)*B%利用伪逆法
X2=lsqnonneg(A,B)%利用最小二乘法
⑤欠定方程AX=B的通解
matlab在求解欠定方程组时,只给出其中一组解,不会给出方程组的通解,但是可以用rref命令<
化为行阶梯>
(查看增广矩阵的秩和系数矩阵的秩)来分析方程是否有通解。
求欠定方程的通解
A=[123-1;
321-1;
1-2-51];
B=[2;
X=A\B
X=
1.25
0
0.25
rref([AB])
ans=
1.000-1.0001.00
01.002.00-0.500.50
00000
显然有通解为:
当
就是系统给出的特解。
(2)非线性方程组
①直接解法
直接采用fsolve函数进行求解。
例7:
求方程组
的根,初始解为x=[2,2].
解:
首先建立函数的m文件,文件名为myfun.m:
functionF=myfun(x)
F=[x
(1)^2-x
(2)-2;
-2*x
(1)+x
(2)^2-4];
然后再命令窗口中输入:
x0=[22];
[r,val]=fsolve(@myfun,x0)
结果为:
r=
2.214319743378112.90321192591201
val=
1.0e-011*
0.20752288776293
0.152********251
也可以用fsolve函数求解矩阵方程;
例8:
求矩阵方程
的一个根,初始解为x0=[1,1;
1,1].
首先建立函数的m文件,文件名为matrixfun.m:
functionF=matrixfun(x)
F=[x*x-[-11,-8;
24,-3]];
x0=[1,1;
1,1];
[r,val]=fsolve(@matrixfun,x0)
0.99999999999957-1.99999999999959
6.000000000000102.99999999999989
0.140687461680500.27231550348006
-0.284217094304040.16089352072868
可以验证结果。
②迭代解法
非线性方程组的数值解法大多源于非线性方程的解法,区别是将数的计算换成了矩阵的计算。
常用的非线性方程组的迭代算法有不动点迭代法和牛顿迭代法等。
具体算法实现将在第5讲中讲述。
三、解微分方程
函数:
dsolve
(1)dsolve(‘equation’)%给出微分方程的解析解,表示为t的函数。
(2)dsolve(‘equation’,’v’)%给出微分方程的解析解,表示为v的函数。
(3)dsolve(‘equation’,’condition’)%给出微分方程初值问题的解,表示为t的函数。
(4)dsolve(‘equation’,’condition’,’v’)%给出微分方程初值问题的解,表示为v的函数。
计算
的通解。
dsolve('
Dy=x^2'
ans=
x^2*t+C1
由于系统默认的自变量是t,故在求解时将x看作了常数。
'
x'
1/3*x^3+C1
此解才是我们想要的解。
计算
的通解
Dy+3*x*y=x*exp(-x^2)'
exp(-x^2)+exp(-3/2*x^2)*C1
求微分方程
在初始条件
下的特解。
x*Dy+2*y-exp(x)=0'
y
(1)=2*exp
(1)'
(exp(x)*x-exp(x)+2*exp
(1))/x^2
求二阶微分方程
D2y+2*Dy+exp(x)=0'
-1/3*exp(x)-1/2*exp(-2*x)*C1+C2
(2)微分方程(组)数值解法
请在学了数值计算方法后自学这部分内容。
主要方法有欧拉法、龙格-库塔法、预估-校正法等。
四、数理统计
(1)数据排序、最值、均值、查找
①排序
sort(x)%向量x按曾序排列;
[y,ind]=sort(x)%向量x增序排列为y向量,并输出下表向量;
已知某5个同学的数学、外语、计算机成绩分别为math=[8678829185];
english=[6248716966];
computer=[8879769496],请将按各科分数增序排列,并分别找出各科的最差生和最优生。
②最大、小值
max(x)%求向量的x的最大元素值;
min(x)%求向量x的最小元素值;
max(A)%求矩阵A每一列中最大值组成的行向量;
min(A)%求矩阵A每一列中最小值组成的行向量;
max(A,B)%求矩阵A和B中对应元素最大值组成的矩阵;
找出数学最高分和英语最低分;
将各科成绩写成一个矩阵result=[math;
english;
computer],利用相应命令寻找各科的最高最低分和每个同学的最高最低分。
③均值(期望)
mean(x)%求向量x的平均值;
mean(A)%计算矩阵A每一列的均值
计算每门课程的平均成绩和每个同学的平均成绩;
④查找
find(express)
找出数学成绩最高的是第几个学生、高于平均成绩的是那几个学生;
find(math==max(math))
find(math>
=mean(math))
(2)和与积
①和、累计和
sum(x)%求向量x所有元素之和
sum(A)%求矩阵A的各列元素和;
cumsum(x)%求向量x的累计和向量
求1+3+5+…+99;
x=1:
2:
99;
sum(x)
求每个学生的总成绩;
cs1=[342563];
cs2=cumsum(cs1);
plot(cs1);
holdon;
plot(cs2);
cs3=ones(4);
cs4=cumsum(cs3);
②积、累计积
prod(x)%求向量x所有元素之积
prod(A)%求矩阵A的各列元素积;
cumprod(x)%求向量x的累计积向量
(3)方差、标准差
var()%方差
std()%标准差
a1=rand(1,200);
%在0到1之间产生200个均匀分的随机数
mean(a1)%计算其期望
var(a1)%计算其方差
std(a1)%计算其标准差
(4)协方差、相关系数
cov()%协方差
corrcoef()%相关系数
例9:
cov(a1)%计算a1的协方差(方差)
cov(a1,a2)%计算a1和a2的协方差
corrcoef(a1,a2)%计算a1和a2的相关系数
b1=[1234567];
b2=[24.15.87.910.212.515];
corrcoef(b1,b2)%计算>
corrcoef(a1,a2)%计算b1和b2的相关系数
(5)随机数的产生
random%参考help
例10:
y=random('
normal'
0,1,1,10000);
%产生0均值1方差1行10000列的正太分布随机数;
mean(y)%检验均值
var(y)%检验方差
y1=random('
poisson'
10,1,10000);
%产生均值为10的1行10000列的泊松分布随机数;
mean(y1)%检验均值
var(y1)%检验方差
y2=random('
exp'
2,1,10000);
%产生均值为2的1行10000列的指数分布随机数;
mean(y2)%检验均值
var(y2)%检验方差
综合例:
某校60名学生的一次考试成绩如下:
937583939185848277767795948991888683968179977875676968848381756685709484838280787473767086769089716686738094797877635355
1)计算均值、标准差、极差,画出直方图;
2)检验分布的正态性;
3)若检验符合正态分布,估计正态分布的参数并检验参数。
x=[93758393918584827776779594899188868396817997787567696884838175668570948483828078747376708676