常用算法的matlab的源程序.docx
《常用算法的matlab的源程序.docx》由会员分享,可在线阅读,更多相关《常用算法的matlab的源程序.docx(43页珍藏版)》请在冰点文库上搜索。
常用算法的matlab的源程序
参考目录:
微分方程的数值解见F盘微分方程的数值解.ppt
优化问题111优化问题matlab27.doc
优化工具箱简洁.ppt
辅助优化计算与设计.pdf
优化建模与LINDO/LINGO软件/谢金星,薛毅编著图书馆位置:
51.81/3486
01785758
2005-
南中文借书处
可借
在馆
检索文献:
题目---英语关键词和中文关键词----中文数据库---修正关键词----外文数据库
中文关键词----翻译英语关键词
外国网站搜索
######################################################
曲线拟合及拟合后相应点的值
clear
x=0:
0.1:
1;
y=[-.4471.9783.286.167.087.347.669.569.489.3011.2];
n=2;
p=polyfit(x,y,n);
xi=linspace(0,1,100);
z=polyval(p,xi);
plot(x,y,'-.ro',xi,z,':
')
xlabel('x');
ylabel('y=f(x)')
title('SecondOrderCurveFitting')
legend('points','line')%图例
######################################################
>>%plot画图的例子
>>x=0:
pi/20:
2*pi;
>>y1=x.*sin(x);
>>plot(x,y1,'-.r*')%显示每一点的用*,并用虚线连起来
>>holdon%还要在这个加其他的图
>>y2=exp(x/100).*sin(x-pi/2);
>>plot(x,y2,'g')%用实线条画图
>>plot(x,y2,'-mo')%用实线条画图
>>plot(x,y2,'-mo')
>>y3=sin(x-pi);
>>plot(x,y3,'gs')
>>title('y1=..;y2=.;y3=..;')%加标题
>>legend('y1','y2','y3')%加上图利
>>xlabel('xaxisbiaoshi....');ylabel('yaxisbiaoshi..')
>>axis([02*pi-52])%调整坐标轴
>>gridon%加上网格
%要想加上箭头可以手动
#####################################################################
1.三维立体网格图mesh
>>clear
>>x=-5:
0.01:
5;
>>y=-5:
0.01:
5;
>>z=x.^2+y.^2;
>>[X,Y]=meshgrid(x,y);
>>Z=X.^2+Y.^2;
>>figure,mesh(X,Y,Z)
>>title('sanweisurface')
>>xlabel('xaxis')
>>ylabel('yaxis')
>>zlabel('zaxis')
>>axis([-55-550100])
gridon%画坐标方格
colorbar%加上彩色比照图
%%%%%%%%%%%%
其中将mesh改为meshz(后加colormap([100])axistight)和waterfall(后家colormapaxistight)分别可以得到设立一个账莫平台
其中将mesh改为meshc画立体图提取登高线contour提取登高线contour3(Z)立体的登高线
#######################################################################################
2.三维线和点
clear
t=1:
0.01:
15;
x=2*(exp(-0.2.*t).*cos(8.*t));
y=2*(exp(-0.4.*t).*cos(8.*t));
plot3(t,x,y)
%标注
>>xlabel('xaxis')
>>ylabel('yaxis')
>>zlabel('zaxis')
>>axis([-55-550100])
######################################################%灰色预测的matlab程序
%x0为原始值(输入六个原始数据)
%f为预测值得到8个数据(后两个为预测数据)精确度很高
%e为残差
function[f,e]=GM(x0)
x1=cumsum(x0);
B=zeros(5,1);
fori=1:
5
B(i)=-(x1(i)+x1(i+1))/2;
end
fori=1:
5
y(i)=x0(i+1);
end
y=y';
B=[Bones(5,1)];
au=(inv(B'*B))*B'*y;
au=au';
a=au
(1);
u=au
(2);
k=x0
(1)-u/a;
t=1:
8;
t1=-a*(t-1);t2=-a*(t-2);
f=k*(exp(t1)-exp(t2));
fori=1:
6
e(i)=100*(x0(i)-f(i))/x0(i);
end
#######################################################################
插值问题预测温度
一维
>>hours=1:
1:
12;
>>tem=[589152529313022252724];
>>inh=1:
0.1:
12;
>>intem=interp1(hours,tem,inh,'spline');
>>plot(hours,tem,'-.ro',inh,intem,'-.g*')
二维
x=1:
5;
>>y=1:
3;
>>z=[8281808284;7963616581;8484828586];
>>mesh(x,y,z)
>>inx=1:
0.2:
5;
>>iny=1:
0.2:
3;
inz=interp2(x,y,z,inx',iny,'cubic');
mesh(inx,iny,inz)
散点插值
具体格式见插值.ppt
gtext('string')当光标位于一个图形窗口内时,等待用户单击鼠标或键盘。
若按下鼠标或键盘,则在光标的位置放置给定的文字“string”
legend在图形上添加图例。
该命令对有多种图形对象类型(线条图,条形图,饼形图等)的窗口中显示一个图例
############################
stem画二维离散数据的柄形图。
该图用线条显示数据点与x轴的距离
x=linspace(0,2,10);
stem(exp(-x.^2),'fill','-.')
stem3画三维离散数据的柄形图。
该图用一线段显示数据离开xy平面的高度
[X,Y,Z]=peaks(20);
stem3(X,Y,Z,’r*')
#################
直方图
>>x=-5:
0.1:
5;
>>y=randn(1000,1);
>>hist(y,x)
#######################333
feather羽毛图
t=0:
0.1:
2*pi;
x=sin(t).*t;
feather(t,x)
############################################
pie饼形图pie3为三维饼型图
x=[1234];
explode=[1110];
pie(x,explode)
legend('s','k','d','g')
title('')
##################################333
bar条形图
1、行向量
x=[1234];bar(x)
2、矩阵
y=[123;456];bar(y,1)
3、函数条形图
x=-2.9:
0.2:
2.9;
bar(x,exp(x.*sin(x)))
barh二维水平条形图。
可以加上一切修饰
##############################################################
fill
fill3用指定的颜色填充三维多边形。
x=0:
0.1:
5;
>>y=sin(x);
>>z=sin(x).^2;
>>c=1;
>>fill3(x,y,z,c)
神经网络预测
closeall
clear
echoon
clc
%BP建模
%原始数据归一化
%就业人口预测4年预测一年从94年开始
m_data=[1729.551709.261674.901679.911686.71;
1709.261674.901679.911686.711688.73;
1674.901679.911686.711688.731690.00;
1679.911686.711688.731690.001697.00;
1686.711688.731690.001697.001710.50;
1688.731690.001697.001710.501726.36;
1690.001697.001710.501726.361715.62;
1697.001710.501726.361715.621700.50];
%定义网络输入p和期望输出t
pause
clc
p1=m_data(:
1:
4);
t1=m_data(:
5);
p=p1';t=t1';
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t)
%设置网络隐单元的神经元数(5~30验证后5个最好)
n=5;
%建立相应的BP网络
pause
clc
net=newff(minmax(pn),[n,1],{'tansig','purelin'},'traingdm');
inputWeights=net.IW{1,1};
inputbias=net.b{1};
layerWeights=net.IW{1,1};
layerbias=net.b{2};
pause
clc
%训练网络
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=20000;
net.trainParam.goal=1e-3;
pause
clc
%调用TRAINGDM算法训练BP网络
net=train(net,pn,tn);
%对BP网络进行仿真
A=sim(net,pn);
E=A-tn;
M=sse(E)
N=mse(E)
pause
clc
p2=[1690.001697.001710.501726.36;
1697.001710.501726.361715.62;
1710.501726.361715.621700.50];
p2=p2';
p2n=tramnmx(p2,minp,maxp);
a2n=sim(net,p2n);
a2=postmnmx(a2n,mint,maxt)
随机数的产生;
R=rand(m,n)生成(0,1)上均匀分布的m行n列随机矩阵
P=randperm(n)生成1,2…,n的一个随机排列
normrnd(mu,sigma,m,n).产生m*n阶的正态分布随机数矩阵.
指数分布exprnd
泊松分布poissrnd
Matlab提供了两种除法运算:
左除(\)和右除(/)。
一般情况下,x=a\b是方程a*x=b的解,而x=b/a是方程x*a=b的解。
1]画图问题:
1对于正余玄等,其实离散的,若将t取得非常小,是连续的,如果t的间隔大,plot(t1,y1,'r.')则明显离散,plot(t1,y1,t1,y1,'r.')则就会有一条折线将离散的点连接起来了,
2、subplot(a,b,c),将图分为ab快;
gridon画坐标方格
title(‘加标题’)
xlabel('x'),ylabel('y')
axis([0,pi,-1,1])%控制轴的范围
axissquare%使坐标轴长度相同
legend('1','2','3')%图例
text(x,y,‘’)在图片上()
3、t=(0:
pi/50:
2*pi);k=0.4:
0.1:
1;y=cos(t)*k;plot(t,y)这是错误语句;
t=(0:
pi/50:
2*pi)'才对,另外关于幂的问题>Y=sin(th)*sqrt(25-a^2);
?
?
?
Errorusing==>mpowerMatrixmustbesquare.
>>Y=sin(th)*sqrt(25-a.^2);
4、对函数加包络线,如y=sin(x)[-1,1]
5]数据拟合经典
线形拟合的经典:
(详见拟合PPT)
x=0:
0.1:
1
y=[-.4471.9783.286.167.087.347.669.569.489.3011.2];
P=polyfit(x,y,2);
xi=linspace(0,1,100);
z=polyval(P,xi);
holdon
plot(x,y,'r.','MarkerSize',20);
plot(xi,z,'b','LineWidth',2),holdoff
legend('points','line')%图例
非线性拟合两例
1.
functionf=nonlinefit(x,t)
f=x
(1)+x
(2).*exp(0.02*x(3)*t);
t=100:
100:
1000;
y=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];
x0=[0.20.050.05];
x=lsqcurvefit('nonlinefit',x0,t,y)
f=nonlinefit(x,t)
2.
functionf=nonlinefit2(x,t)
f=300*exp(-x
(1)*t)./x
(2);
t=[0.250.511.523468];
c=[19.2118.1515.3614.1012.899.327.455.243.01];
x0=[0.010.02];
x=lsqcurvefit('nonlinefit2',x0,t,c)
f=nonlinefit2(x,t)
插值经典:
hours=1:
12;
temps=[589152529313022252724];
h=1:
0.1:
12;%(将时间细化,)
t=interp1(hours,temps,h,'spline');(每个细化后的时间通过插值得到的值,直接输出数据将是很多的)
plot(hours,temps,'+',h,t,hours,temps,'r:
')%作图依次将散点图,插值后的图,及散点的折线图画出
xlabel('Hour'),ylabel('DegreesCelsius’)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6、k=sym('k')%k是一个符号变量;
symsum(S)对通项S求和,其中k为变量且从0变到k-1.
symsum(S,v)对通项S求和,指定其中v为变量且v从0变到v-1.
symsum(S,a,b)对通项S求和,其中k为变量且从a变到b.
symsum(S,v,a,b)对通项S求和,指定其中v为变量且v从a变到b.
7、解微分方程:
解析解
dsolve('fangcheng1','fangcheng2'…..,'chushitiaojian','bianliang')
数值解
[自变量,函数]=ode45/ode23/ode15s(‘保存的函数名’,[自变量的范围],[函数的初始值])
高化底,
8、回归分析:
经典例制:
x=0.1:
0.01:
0.18;x=[x,0.2,0.21,0.23]';
y=[42,41.5,45,45.5,45,47.5,49,55,50,55,55.5,60.5]';
X=[ones(12,1),x];
>>polyfit(x,y,1)
[b,bint,r,rint,stats]=regress(y,X,0.05);
>>b,bint,stats,rcoplot(r,rint)
9、数组的输入:
x=linspace(a,b,n);
x=rand(1,n);//0-1之间的n的随即数
x=randperm(n);//1到n的随即整数
10、将硬盘的数据读入变量
读入txt:
a=load('shujulujing')
读入excel:
a=xlsread('shujulujing')
11、矩阵函数
eye(m,n);m*n的矩阵;
magic(n);n为方阵;
ones(m,n);
rand(m,n);是m*n的(0,1)分布随即数矩镇
randn(m,n);m*n矩阵,元素为正态分布的随即数珠;
zeros(m,n);
meshgrid(y,x)产生x-y平面的网格点数据x,y;
det计算矩镇的行列市,
eig特征值
inv逆
rank秩
trace迹
norm摸或范数
orth求出可将矩镇化为对角阵的正交化
poly矩镇的特征多项式
12、点乘与矩镇运算:
A.'A'
A.^n矩镇的每个元素自乘n方A^n矩镇自乘n方
A.^p矩镇的每个元素自求p次方A^p矩镇的p次幂
A.*BA*B
A./BA/B
B.\AB\A
13、(具体见统计工具)
统计工具箱有关命令:
1)数据的输入,保存,调用;data=[];savedata;loaddata;
2)基本统计量:
均值mean(x),
中位数median(x);
标准差std(x);
方差var(x);
偏度skewness(x);
峰度kurtosis(x);
偏度:
反映分布的对称性,〉0表示右偏态,此时数据位于均值得右边比位于左边的多,峰度:
如果
3,常见的分布函数:
常见的几种分布的命令字符为:
正态分布:
norm指数分布:
exp
帕松分布:
poiss
分布:
beta
威布尔分布:
weib
分布:
chi2
t分布:
tF分布:
F
Matlab工具箱对每一种分布都提供五类函数,其命令字符为:
概率密度:
pdf概率分布:
cdf
逆概率分布:
inv均值与方差:
stat
随机数生成:
rnd
(当需要一种分布的某一类函数时,将以上所列的分布命令字符与函数命令字符接起来,并输入自变量(可以是标量、数组或矩阵)和参数即可.)
4、
统计图形的作图
normplot()正态分布检验图;
hist(y,x)做直方图;
chi2rnd(5,1,100)产生自由度为5的1000个卡方随即数;
pie(X,explode)//X一为数组,作图时将元素求和,然后计算出每个元素的的比绿,explode:
数组X的同维数组,元素为1表示响应的突出
scatter(nd,pop,‘rs’);
scatter3(X,Y,Z)立体散点图
MATLAB中灰度直方图的显示
MATLAB图象处理工具箱提供了imhist函数来计算和显示图象的直方图,imhist函数的语法格式为:
imhist(I,n)
imhist(X,map)
其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256。
imhist(X,map)计算和显示索引色图象X的直方图,map为调色板。
例:
I = imread('rice.tif');
imshow(I)
figure, imhist(I)
5、参数估计:
1、正态总体的参数估计
设总体服从正态分布,则其点估计和区间估计可同时由以下命令获得:
[muhat,sigmahat,muci,sigmaci]=normfit(X,alpha)
此命令在显著性水平alpha下估计数据X的参数(alpha缺省时设定为0.05),返回值muhat是X的均值的点估计值,sigmahat是标准差的点估计值,muci是均值的区间估计,sigmaci是标准差的区间估计.
(1)[muhat,muci]=expfit(X,alpha)-----在显著性水平alpha下,求指数分布的数据X的均值的点估计及其区间估计.
(2)[lambdahat,lambdaci]=poissfit(X,alpha)-----在显著性水平alpha下,求泊松分布的数据X的参数的点估计及其区间估计.
(3)[phat,pci]=weibfit(X,alpha)-----在显著性水平alpha下,求Weibull分布的数据X的参数的点估计及其区间估计.
6、假设检验:
在总体服从正态分布的情况下,可用以下命令进行假设检验、
总体方差sigma2已知时,总体均值的检验使用z-检验
[h,sig,ci]=ztest(x,m,sigma,alpha,tail)
检验数据x的关于均值的某一假设是否成立,其中sigma为已知方差,alpha为显著性水平,究竟检验什么假设取决于tail的取值:
tail=0,检验假设“x的均值等于m”
tail=1,检验假设“x的均值大于m”
tail=-1,检验假设“x的均值小于m”
tail的缺省值为0,alpha的缺省值为0.05.
返回值h为一个布尔值,h=1表示可以拒绝假设,h=0表示不可以拒绝假设,sig为假设成立的概率,ci为均值的1-alpha置信区间.
总体方差sigma2未知时,总体均值的检验使用t-检验
两总体均值的假设检验使用t-检验
非参数检验:
总体分布的检验
7、Matlab工具箱提供了两个对总体分布进行检验的命令:
1)h=normplot(x)
此命令显示数据矩阵x的正态概率图.如果数据来自于正态分布,则图形显示出直线性形态.而其它概率分布函数显