matlab复习总结.docx
《matlab复习总结.docx》由会员分享,可在线阅读,更多相关《matlab复习总结.docx(14页珍藏版)》请在冰豆网上搜索。
matlab复习总结
Matlab复习
MATLAB表达式的基本运算符
指令行中的标点符号运用
几千年前的哲人柏拉图曾经说过,哲学源于惊奇,因为对于世界的认识和人生的追问总在惊奇与困惑之中产生。
惊奇仿佛一道光明,点亮了人类的智慧之光。
然而是激情为我们打开了思想与知识的大门,使我们在惊奇中审视到自身的无知,并为自己的无知感到震惊;我们不再掩饰无知,而是勇敢地置身于其中,在茫然无知之境中展开思考。
我相信,激情是一种思想性的力量,惟有充满激情的人才能深长地沉入思考之中。
——王佐才
掌握冒号‘:
’,‘[]’,‘find’,‘>’,‘<‘,’()’等的用法
Matlabsolution:
%%example1
x=rand(1,5)%生成1行5列的随机数
x(3)%找到x的第三个元素值
x([1,2,5])%找到x的第1,2,5元素值
x(1:
3)%找到x的第1到3号元素值
x(3:
end)%找到x的第3到最后一位元素值
x(3:
-1:
1)%找到x的第3到最第一位元素值,倒序
x(find(x>0.5))%找到x中大于0.5的元素值
x([1,2,3,4,4,3,2,1])
x(3)=0%对x中的第3号元素赋值为0
x([1,4])=[1,1]%对x中的第1,4号元素赋值为1
例8:
一个由若干行数字组成的数表,从第二行起每一行中的数字均等于其肩上的两个数之和,最后一行仅有一个数,第一行是前100个正整数从小到大排成行,则最后一行的数是多少。
a0=[1:
100];
forj=1:
99
fori=1:
length(a0)-1
a(i)=a0(i)+a0(i+1);
end
a0=[];
a0=a;
a=[];
end
a0
✓利用左除运算符的直接解法
例1:
解:
A=[1,2,3;-1,3,7;9,0,3]
b=[1,4,7]'
x=A\b
x1=inv(A)*b
x2=pinv(A)*b
例1:
(1)Tofindthezeroofcosinebetween1and2(求出cos(x)在区间[12]之间的零解)x=fzero(@cos,[12])
(2)Tofindazeroofthefunctionf(x) = x3 – 2x – 5
(求出方程f(x) = x3 – 2x – 5的零解)
Solution:
writeananonymousfunctionf:
f=@(x)x.^3-2*x-5;
Thenfindthezeronear2:
z=fzero(f,2)
先创建一个函数文件
functiony=fun(x)
y=[x
(1)-0.5*sin(x
(1))-0.3*cos(x
(2)),x
(2)-0.5*cos(x
(1))+0.3*sin(x
(2))];
然后求解
x0=[0.1,0.1];
fsolve(@fun,x0,optimset('fsolve'))
例4:
求f(x)=x3-2x-5在[0,5]内的最小值
f=@(x)x.^3-2*x-5;
x=fminunc(f,0)
x1=fminsearch(f,0)
例5:
求f(x,y,z)=x+y2/4x+z2/y+2/z在(0.5,0.5,0.5)附近的最小值
先定义函数
functionf=myfun5(p)
x=p
(1);
y=p
(2);
z=p(3);
f=x+y^2/4/x+z^2/y+2/z;
再求解
x=fminunc('myfun5',[0.5,0.5,0.5])
x1=fminsearch('myfun5',[0.5,0.5,0.5])
第三章数值积分与微分
例1:
计算下式在区间[0,2]之间的定积分
f=@(x)1./(x.^3-2*x-5);
Q=quad(f,0,2);
f=@(x)x.*sin(x)./(1+(cos(x)).^2);
Q=quad(f,0,2)
例3:
求
F=@(x,y)y*sin(x)+x*cos(y);
Q=dblquad(F,pi,2*pi,0,pi)
第三章数值积分与微分
例4:
设
(1)求f(x)的导数表达式
(2)画出f(x)在[-3,3]区间的图像。
(x=[-3:
0.1:
3])
(3)
在同一坐标系中画出f(x)在[-3,3]区间的导数值的理论值和数值计算值。
(x=[-3:
0.1:
3])
Matlab命令
x=[-3:
0.1:
3];
f=sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2;
subplot(2,2,1)
plot(x,f)
f_1exact=(3*x.^2+4*x-1)./2./sqrt(x.^3+2*x.^2-x+12)+1./6./(x+5).^(5/6)+5;
f_1diff=diff(f)./diff(x);
subplot(2,2,2)
plot(x,f_1exact,'k-',x(1:
end-1),f_1diff,'r--')
例1.X由下面的matlab命令流生成的矩阵:
X(:
1)=ones(10,1);
X(1,1)=100;
X(10,1)=0.01;
rand('state',1);
randn('state',1)
X(:
2)=rand(10,1);
X(:
3)=randn(10,1);
X(:
3)=2*abs(min(X(:
3)))+X(:
3);
求其平均值,中值,几何平均值,调和平均值,标准差,方差。
X_mean=mean(X)
X_mid=median(X)
X_gmean=geomean(X)
X_hmean=harmmean(X)
X_std=std(X)
X_var=var(X)
例2.x由下面的matlab命令流生成的矩阵:
randn('state',1)
rand('state',31)
x=randn(100,1);
y=rand(100,1);
subplot(2,2,1),hist(x,7)
subplot(2,2,2),histfit(x,20)
subplot(2,2,3),hist(y,7)
subplot(2,2,4),histfit(y,20)
例3.理解下面的MATLAB程序
mu=3;sigma=0.5;
x=mu+sigma*[-3:
-1,1:
3];
yf=normcdf(x,mu,sigma);
P=[yf(4)-yf(3),yf(5)-yf
(2),yf(6)-yf
(1)];
xd=1:
0.1:
5;
yd=normpdf(xd,mu,sigma);
%
fork=1:
3
xx{k}=x(4-k):
sigma/10:
x(3+k);
yy{k}=normpdf(xx{k},mu,sigma);
end
subplot(1,3,1),plot(xd,yd,'b');holdon
fill([x(3),xx{1},x(4)],[0,yy{1},0],'g')
text(mu-0.5*sigma,0.3,num2str(P
(1))),holdoff
subplot(1,3,2),plot(xd,yd,'b');holdon
fill([x
(2),xx{2},x(5)],[0,yy{2},0],'g')
text(mu-0.5*sigma,0.3,num2str(P
(2))),holdoff
subplot(1,3,3),plot(xd,yd,'b');holdon
fill([x
(1),xx{3},x(6)],[0,yy{3},0],'g')
text(mu-0.5*sigma,0.3,num2str(P(3))),holdoff
1伪线性最小二乘
借助fminsearch指令进行非线性最小二乘估计
第一步:
生成data函数
function[x,y,STDY]=xydata(k_noise)
%xydata.m
x=[0:
0.2:
4]';
yo=3*exp(-0.4*x)+12*exp(-3.2*x);
rand('seed',234)
y_noise=k_noise*(rand(size(x))-0.5);
y=yo+y_noise;
STDY=std(y_noise);
第二步生成目标函数
functionE=twoexps(a,x,y)
%twoexps.m
x=x(:
);y=y(:
);Y=a
(1)*exp(-a(3)*x)+a
(2)*exp(-a(4)*x);
E=sum((y-Y).^2);
第三步:
求解并画图
k_noise=0.3;
[x,y,STDY]=xydata(k_noise);
a0=[1111];
options=optimset('fminsearch');
options.TolX=0.01;
options.Display='off';
a=fminsearch(@twoexps,a0,options,x,y);
chi_est=twoexps(a,x,y)/STDY^2;
freedom=length(x)-length(a0);
Q=1-chi2cdf(chi_est,freedom);
%
y_est=a
(1)*exp(-a(3)*x)+a
(2)*exp(-a(4)*x);
ych='y_e_s_t=';
a1=num2str(a
(1));a2=num2str(a
(2));a3=num2str(a(3));a4=num2str(a(4));
char_y_est=[ych,a1,'*exp(-',a3,'*x)+',a2,'*exp(-',a4,'*x)'];
plot(x,y,'b+');holdon,plot(x,y_est,'r');holdoff,axis([0,4,0,16])
text(0.4,14,'y=3*exp(-0.4*x)+12*exp(-3.2*x)')
text(0.4,12,char_y_est),text(2.5,9,['chi2=',num2str(chi_est)])
text(2.5,7,['freedom=',num2str(freedom)])
text(2.5,5,['Q=',num2str(Q)])
1.M文件和函数文件概述
用MATLAB语言编写的程序成为M文件。
M文件是由若干MATLAB命令组合在一起构成的。
MATLAB中提供的内部函数以及各种工具箱都是M文件。
通常M文件分为两类:
命令文件(scriptfile)和函数文件(functionfile).它们的扩展名都是.m
主要的区别在于
(1)命令文件没有输入参数,也不返回输出参数,而函数文件可以带输入参数,也可以返回输出参数
(2)命令文件可以直接运行,函数文件需要以函数调用的方式运行。
.M文件的创建
建立新的M文件:
(1)从MATLAB主窗口的File菜单中选择New菜单项,再选择scriptfile
(2)单击MATLAB主窗口工具栏上的Newscript命令按钮,创建M文件
函数文件的基本结构
Function输出参数=函数名(输入参数)
注释说明部分
函数体语句
函数文件调用时的格式为:
函数名(输入参数)
1.顺序结构
顺序结构式按照程序语句的排列顺序依次执行。
例如求一元二次方程的根:
ax^2+bx+c=0
a=input(‘a=?
’)
b=input(‘b=?
’)
c=input(‘c=?
’)
d=b*b-4*a*c
X=[(-b+sqrt(d))/2/a,(-b-sqrt(d))/2/a]
2.选择结构
选择结构是根据给定的条件成立或不成立,分别执行不同的语句。
MATLAB中用于实现选择结构的语句有if语句,switch语句,和try语句。
(1)if语句
单分支if语句结构
If条件
语句组
End
例1计算分段函数值x=-5,x=3时的值
x=-5
ifx<=0
y=(x+sqrt(pi))/exp
(1)
else
y=log(x+sqrt(1+x*x))/2
end
y=-1.1873
x=3
ifx<=0
y=(x+sqrt(pi))/exp
(1)
else
y=log(x+sqrt(1+x*x))/2
end
y=0.9092
3.循环结构
循环是指按照给定的条件,重复执行指定的语句,这是一种十分重要的程序结构。
MATLAB提供两种实现循环结构的语句:
for语句和while语句
(1)for语句for语句的格式为:
for循环变量=表达式1:
表达式2:
表达式3
循环体语句
end
例2计算分段函数值x=[-3:
0.1:
3]时的值,并画出图形
x0=[-3:
0.1:
3];
fori=1:
1:
length(x0)
x=x0(i);
ifx<=0
y(i)=(x+sqrt(pi))/exp
(1)
else
y(i)=log(x+sqrt(1+x*x))/2;
end
end
subplot(2,2,1)
plot(x0,y,'r--*')
例3:
一个由若干行数字组成的数表,从第二行起每一行中的数字均等于其肩上的两个数之和,最后一行仅有一个数,第一行是前100个正整数从小到大排成行,则最后一行的数是多少。
a0=[1:
100];
forj=1:
99
fori=1:
length(a0)-1a(i)=a0(i)+a0(i+1);
end
a0=[];
a0=a;
a=[];
enda0
7-3求下列方差的根
(1)
在
。
(2)
在
。
(3)
(4)
7-4求非线性方程的数值解。
(1)
(2)
7-7求函数在指定区间的最大值
(1)
(2)
1求二重定积分
(1)
=
(2)
=
2分别用矩形、梯形(trapz)公式计算由表中数据给出的定积分I=
表被积函数f(x)数据表
k
1234567
0.30.50.70.91.11.31.5
0.38950.65980.91471.16111.39711.62121.8325
3设X由
区间内均匀分布的10个点组成,求向量sinX的1~3阶差分。
4设
用2种不同的方法求函数f(x)的数值导数,并在同一个坐标系中做出f(x)的图像。