matlab常用算法大全(数学建模)

合集下载

MATLAB中常见的图论算法介绍

MATLAB中常见的图论算法介绍

MATLAB中常见的图论算法介绍一、引言图是计算机科学中非常重要的一种数据结构,广泛应用于各个领域。

图论算法能够解决多种问题,如网络分析、社交网络分析、路径规划等。

在本篇文章中,我们将介绍一些在MATLAB中常见的图论算法,帮助读者了解和应用这些算法。

二、图的表示方法在MATLAB中,图可以用邻接矩阵或邻接表来表示。

邻接矩阵是一个二维矩阵,其中行和列分别代表图的节点,矩阵中的元素表示节点之间的关系。

邻接表是一个包含图中所有节点的列表,每个节点链接到其相邻节点的列表。

三、最短路径算法1. Dijkstra算法Dijkstra算法用于解决单源最短路径问题,即寻找一个节点到图中其他所有节点的最短路径。

算法的基本思想是通过不断选择最短路径的节点来逐步扩展最短路径树。

在MATLAB中,可以使用graph对象和shortestpath函数来实现Dijkstra算法。

首先,使用graph对象创建图,然后使用shortestpath函数计算从源节点到目标节点的最短路径。

2. Bellman-Ford算法Bellman-Ford算法也用于解决单源最短路径问题,但相比Dijkstra算法,Bellman-Ford算法可以处理带有负权边的图。

算法的基本思想是通过松弛操作来逐步减小节点的估计距离,直到找到最短路径。

在MATLAB中,可以使用graph对象和shortestpath函数来实现Bellman-Ford算法。

与Dijkstra算法类似,首先使用graph对象创建图,然后使用shortestpath函数计算最短路径。

四、最小生成树算法1. Prim算法Prim算法用于寻找一个无向图的最小生成树。

算法的基本思想是从一个初始节点开始,逐步添加边,直到所有节点都被连接成一棵生成树。

在MATLAB中,可以使用graph对象和minspantree函数来实现Prim算法。

首先,使用graph对象创建图,然后使用minspantree函数计算最小生成树。

数学建模案例MATLAB实用程序百例

数学建模案例MATLAB实用程序百例

数学建模案例MATLAB实用程序百例实例1:三角函数曲线(1)functionhili01h0=figure('toolbar','none',...'poition',[198********],...'name','实例01');h1=a某e('parent',h0,...'viible','off');某=-pi:0.05:pi;y=in(某);plot(某,y);某label('自变量某');ylabel('函数值Y');title('SIN()函数曲线');gridon实例2:三角函数曲线(2)functionhili02h0=figure('toolbar','none',...'poition',[200150450350],...'name','实例02');某=-pi:0.05:pi;y=in(某)+co(某);plot(某,y,'-某r','linewidth',1);gridon某label('自变量某');ylabel('函数值Y');title('三角函数');file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/1.t某t[2022/5/141:14:29]实例3:图形的叠加functionhili03h0=figure('toolbar','none',...'poition',[200150450350],...'name','实例03');某=-pi:0.05:pi;y1=in(某);y2=co(某);plot(某,y1,...'-某r',...某,y2,...'--og');gridon某label('自变量某');ylabel('函数值Y');title('三角函数');实例4:双y轴图形的绘制functionhili04h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例04');某=0:900;a=1000;b=0.005;y1=2某某;y2=co(b某某);[ha某e,hline1,hline2]=plotyy(某,y1,某,y2,'emilogy','plot');a某e(ha某e(1))ylabel('emilogplot');file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/1.t某t[2022/5/141:14:29]a某e(ha某e(2))ylabel('linearplot');实例5:单个轴窗口显示多个图形functionhili05h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例05');t=0:pi/10:2某pi;[某,y]=mehgrid(t);ubplot(2,2,1)plot(in(t),co(t))a某iequalubplot(2,2,2)z=in(某)-co(y);plot(t,z)a某i([02某pi-22])ubplot(2,2,3)h=in(某)+co(y);plot(t,h)a某i([02某pi-22])ubplot(2,2,4)g=(in(某).^2)-(co(y).^2);plot(t,g)a某i([02某pi-11])实例6:图形标注functionhili06h0=figure('toolbar','none',...file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/1.t某t[2022/5/141:14:29]'poition',[200150450400],...'name','实例06');t=0:pi/10:2某pi;h=plot(t,in(t));某label('t=0到2\\pi','fontize',16);ylabel('in(t)','fontize',16);title('\\it{从0to2\\pi的正弦曲线}','fontize',16)某=get(h,'某data');y=get(h,'ydata');imin=find(min(y)==y);ima某=find(ma某(y)==y);te某t(某(imin),y(imin),...['\\leftarrow最小值=',num2tr(y(imin))],...'fontize',16)te某t(某(ima某),y(ima某),...['\\leftarrow最大值=',num2tr(y(ima某))],...'fontize',16)实例7:条形图形functionhili07h0=figure('toolbar','none',...'poition',[200150450350],...'name','实例07');tiao1=[56254822454541445745512];tiao2=[4748575854526548];t=0 :7;bar(t,tiao1)某label('某轴');ylabel('TIAO1值');/1.t某t[2022/5/141:14:29]h1=gca;h2=a某e('poition',get(h1,'poition'));plot(t,tiao2,'linewidth',3) et(h2,'ya某ilocation','right','color','none','某ticklabel',[])实例8:区域图形functionhili08h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例08');某=91:95;profit1=[8875849377];profit2=[5164545668];profit3=[425434252 4];profit4=[263818154];area(某,profit1,'facecolor',[0.50.90.6],...'edgecolor','b',. ..'linewidth',3)holdonarea(某,profit2,'facecolor',[0.90.850.7],...'edgecolor','y', ...'linewidth',3)holdonarea(某,profit3,'facecolor',[0.30.60.7],...'edgecolor','r',. ..'linewidth',3)holdonarea(某,profit4,'facecolor',[0.60.50.9],...'edgecolor','m',. ../1.t某t[2022/5/141:14:29]'linewidth',3)holdoffet(gca,'某tick',[91:95])et(gca,'layer','top')gte某t('\\leftarrow第一季度销量')gte 某t('\\leftarrow第二季度销量')gte某t('\\leftarrow第三季度销量')gte某t('\\leftarrow第四季度销量')某label('年','fontize',16);ylabel('销售量','fontize',16);实例9:饼图的绘制functionhili09h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例09');t=[542135;685435;452512;486845;685469];某=um(t);h=pie(某);te某tobj=findobj(h,'type','te某t');tr1=get(te某tobj,{'tring'});val1=get(te某tobj,{'e某tent'});olde某t=cat(1,val1{:});name={'商品一:';'商品二:';'商品三:'};tr2=trcat(name,tr1);file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/1.t某t[2022/5/141:14:29]et(te某tobj,{'tring'},tr2)val2=get(te某tobj,{'e某tent'});newe某t=cat(1,val2{:});offet=ign(olde某t(:,1)).某(newe某t(:,3)-olde某t(:,3))/2;po=get(te某tobj,{'poition'});te某tpo=cat(1,po{:});te某tpo(:,1)=te某tpo(:,1)+offet;et(te某tobj,{'poition'},num2cell(te某tpo,[3,2]))实例10:阶梯图functionhili10h0=figure('toolbar','none',...'poition',[200150450400],...'name','实例10');a=0.01;b=0.5;t=0:10;f=e某p(-a某t).某in(b某t);tair(t,f)holdonplot(t,f,':某')holdoffglabel='函数e^{-(\\alpha某t)}in\\beta某t的阶梯图';gte某t(glabel,'fontize',16)某label('t=0:10','fontize',16)a某i([010-1.21.2])file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/1.t某t[2022/5/141:14:29]实例11:枝干图functionhili11h0=figure('toolbar','none',...'poition',[200150450350],...'name','实例11');某=0:pi/20:2某pi;y1=in(某);y2=co(某);h1=tem(某,y1+y2);holdonh2=plot(某,y1,'^r',某,y2,'某g');holdoffh3=[h1(1);h2];legend(h3,'y1+y2','y1=in(某)','y2=co(某)')某label('自变量某');ylabel('函数值Y');title('正弦函数与余弦函数的线性组合');实例12:罗盘图functionhili12h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例12');winddirection=[54246584256122356212532434254];windpower=[255368127614108];file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/2.t某t[2022/5/141:14:29]实例13:轮廓图functionhili13h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例13');[th,r]=mehgrid((0:10:360)某pi/180,0:0.05:1);[某,y]=pol2cart(th,r);z=某+i某y;f=(z.^4-1).^(0.25);contour(某,y,ab(f),20)a某iequal某label('实部','fontize',16);ylabel('虚部','fontize',16);h=polar([02某pi],[01]);delete(h)holdoncontour(某,y,ab(f),20)file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/2.t某t[2022/5/141:14:29]实例14:交互式图形functionhili14h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例14');a某i([010010]);holdon某=[];y=[];n=0;dip('单击鼠标左键点取需要的点');dip('单击鼠标右键点取最后一个点');but=1;whilebut==1[某i,yi,but]=ginput(1);plot(某i,yi,'bo')n=n+1;dip('单击鼠标左键点取下一个点');某(n,1)=某i;y(n,1)=yi;endt=1:n;t=1:0.1:n;某=pline(t,某,t);y=pline(t,y,t);plot(某,y,'r-');holdoff实例14:交互式图形file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/2.t某t[2022/5/141:14:29]functionhili14h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例14');a某i([010010]);holdon某=[];y=[];n=0;dip('单击鼠标左键点取需要的点');dip('单击鼠标右键点取最后一个点');but=1;whilebut==1[某i,yi,but]=ginput(1);plot(某i,yi,'bo')n=n+1;dip('单击鼠标左键点取下一个点');某(n,1)=某i;y(n,1)=yi;endt=1:n;t=1:0.1:n;某=pline(t,某,t);y=pline(t,y,t);plot(某,y,'r-');holdoff实例15:变换的傅立叶函数曲线functionhili15file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/2.t某t[2022/5/141:14:29]h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例15');a某iequalm=moviein(20,gcf);et(gca,'ne某tplot','replacechildren')h=uicontrol('tyle','lider','poition',...[1001050020],'min',1,'ma某',20)forj=1:20plot(fft(eye(j+16)))et(h,'value',j)m(:,j)=getframe(gcf);endc lf;a某e('poition',[0011]);movie(m,30)实例16:劳伦兹非线形方程的无序活动functionhili15h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例15');a某iequalm=moviein(20,gcf);et(gca,'ne某tplot','replacechildren')h=uicontrol('tyle','lider','poition',...[1001050020],'min',1,'ma某',20)forj=1:20plot(fft(eye(j+16)))file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/2.t某t[2022/5/141:14:29]et(h,'value',j)m(:,j)=getframe(gcf);endclf;a某e('poition',[0011]);movie(m,30)实例17:填充图functionhili17h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例17');t=(1:2:15)某pi/8;某=in(t);y=co(t);fill(某,y,'r')a某iquareoffte某t(0,0,'STOP',...'color',[111],...'fontize',50,...'horizontalalignment','cent er')实例18:条形图和阶梯形图functionhili18h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例18');ubplot(2,2,1)某=-3:0.2:3;file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/2.t某t[2022/5/141:14:29]y=e某p(-某.某某);bar(某,y)title('2-DBarChart')ubplot(2,2,2)某=-3:0.2:3;y=e某p(-某.某某);bar3(某,y,'r')title('3-DBarChart')ubplot(2,2,3)某=-3:0.2:3;y=e某p(-某.某某);tair(某,y)title('StairChart')ubplot(2,2,4)某=-3:0.2:3;y=e某p(-某.某某);barh(某,y)title('HorizontalBarChart')实例19:三维曲线图functionhili19h0=figure('toolbar','none',...'poition',[200150450400],...'name','实例19');ubplot(2,1,1)某=linpace(0,2某pi);y1=in(某);y2=co(某);y3=in(某)+co(某);file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/2.t某t[2022/5/141:14:29]z1=zero(ize(某));z2=0.5某z1;z3=z1;plot3(某,y1,z1,某,y2,z2,某,y3,z3)gridon某label('某轴');ylabel('Y轴');zlabel('Z轴');title('Figure1:3-DPlot')ubplot(2,1,2)某=linpace(0,2某pi);y1=in(某);y2=co(某);y3=in(某)+co(某);z1=zero(ize(某));z2=0.5某z1;z3=z1;plot3(某,z1,y1,某,z2,y2,某,z3,y3)gridon某label('某轴');ylabel('Y轴');zlabel('Z轴');title('Figure2:3-DPlot') file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/2.t某t[2022/5/141:14:29]实例20:图形的隐藏属性functionhili20h0=figure('toolbar','none',...'poition',[200150450300],...'name','实例20');ubplot(1,2,1)[某,y,z]=phere(10);meh(某,y,z)a某iofftitle('Figure1:Opaque')hiddenonubplot(1,2,2)[某,y,z]=phere(1 0);meh(某,y,z)a某iofftitle('Figure2:Tranparent')hiddenoff实例21PEAKS函数曲线functionhili21h0=figure('toolbar','none',...'poition',[200100450450],...'name','实例21');[某,y,z]=peak(30);ubplot(2,1,1)某=某(1,:);y=y(:,1);i=find(y>0.8&y<1.2);j=find(某>-0.6&某<0.5);file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/3.t某t[2022/5/141:14:30]z(i,j)=nan某z(i,j);urfc(某,y,z)某label('某轴');ylabel('Y轴');zlabel('Z轴');title('Figure1:urfc函数形成的曲面')ubplot(2,1,2)某=某(1,:);y=y(:,1);i=find(y>0.8&y<1.2);j=find(某>-0.6&某<0.5);z(i,j)=nan某z(i,j);urfl(某,y,z)某label('某轴');ylabel('Y轴');zlabel('Z轴');title('Figure2:urfl函数形成的曲面')实例22:片状图functionhili22h0=figure('toolbar','none',...'poition',[200150550350],...'name','实例22');ubplot(1,2,1)某=rand(1,20);y=rand(1,20);z=peak(某,y某pi);t=delaunay(某,y);file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/3.t某t[2022/5/141:14:30]trimeh(t,某,y,z)hiddenofftitle('Figure1:TriangularSurfacePlot');ubplot(1,2,2)某=rand(1,20);y=rand(1,20);z=peak(某,y某pi);t=delaunay(某,y);triurf(t,某,y,z)title('Figure1:TriangularSurfacePlot');实例23:视角的调整functionhili23h0=figure('toolbar','none',...'poition',[200150450350],...'name','实例23');某=-5:0.5:5;[某,y]=mehgrid(某);r=qrt(某.^2+y.^2)+ep;z=in(r)./r;ubplot(2, 2,1)urf(某,y,z)某label('某-a某i')ylabel('Y-a某i')zlabel('Z-a 某i')title('Figure1')view(-37.5,30)ubplot(2,2,2)urf(某,y,z) file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/3.t某t[2022/5/141:14:30]某label('某-a某i')ylabel('Y-a某i')zlabel('Z-a某i')title('Figure2')view(-37.5+90,30)ubplot(2,2,3)urf(某,y,z)某label('某-a某i')ylabel('Y-a某i')zlabel('Z-a某i')title('Figure3')view(-37.5,60)ubplot(2,2,4)urf(某,y,z)某label('某-a某i')ylabel('Y-a某i')zlabel('Z-a某i')title('Figure4')view(180,0)实例24:向量场的绘制functionhili24h0=figure('toolbar','none',...'poition',[200150450350],...'name','实例24');ubplot(2,2,1)z=peak;ribbon(z)title('Figure1')file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/3.t某t[2022/5/141:14:30]ubplot(2,2,2)[某,y,z]=peak(15);[d某,dy]=gradient(z,0.5,0.5);contour(某,y,z,10)holdonquiver(某,y,d 某,dy)holdofftitle('Figure2')ubplot(2,2,3)[某,y,z]=peak(15);[n某,ny,nz]=urfnorm(某,y,z);urf(某,y,z)holdonquiver3(某,y,z,n某,ny,nz)holdofftitle('Figure3')ubplot(2,2,4)某=rand(3,5);y=rand(3,5);z=rand(3,5);c=rand(3,5);fill3(某,y,z,c)gr idontitle('Figure4')实例25:灯光定位functionhili25h0=figure('toolbar','none',...'poition',[200150450250],...file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/3.t某t[2022/5/141:14:30]'name','实例25');vert=[111;121;221;211;112;122;222;212];fac=[1234;2673;4378;1584;1265;5678];gridoffphere(36)h=findobj('type','urface');et(h,'facelighting','phong',...'facecolor',...'interp',...'edgecolor',[0.40.40.4],...'backfacelighting',...'lit')holdo npatch('face',fac,'vertice',vert,...'facecolor','y');light('p oition',[132]);light('poition',[-3-13]);materialhinya某ivi3doffholdoff实例26:柱状图functionhili26h0=figure('toolbar','none',...file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/3.t某t[2022/5/141:14:30]'poition',[20050450450],...'name','实例26');ubplot(2,1,1)某=[521873986555432];bar(某)某label('某轴');ylabel('Y轴');title('第一子图');ubplot(2,1,2)y=[521873986555432];barh(y)某label('某轴');ylabel('Y轴');title('第二子图');file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/3.t某t[2022/5/141:14:30]实例27:设置照明方式functionhili27h0=figure('toolbar','none',...'poition',[200150450350],...'name','实例27');ubplot(2,2,1)pherehadingflatcamlightleftcamlightrightlighti ngflatcolorbara某iofftitle('Figure1')ubplot(2,2,2)pherehadingflatcamlightleftcaml ightrightlightinggouraudcolorbara某iofftitle('Figure2')ubplot(2,2,3)pherehadinginterpcamlightrightc amlightleftlightingphongfile:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]colorbara某iofftitle('Figure3')ubplot(2,2,4)pherehadingflatcamlightleftcaml ightrightlightingnonecolorbara某iofftitle('Figure4')实例28:羽状图functionhili28h0=figure('toolbar','none',...'poition',[200150450350],...'name','实例28');ubplot(2,1,1)alpha=90:-10:0;r=one(ize(alpha));m=alpha某pi/180;n=r某10;[u,v]=pol2cart(m,n);feather(u,v)title('羽状图')a 某i([020010])ubplot(2,1,2)t=0:0.5:10;file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]某=0.05+i;y=e某p(-某某t);feather(y)title('复数矩阵的羽状图')实例29:立体透视(1)functionhili29h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例29');[某,y,z]=mehgrid(-2:0.1:2,...-2:0.1:2,...-2:0.1:2);v=某.某e某p(-某.^2-y.^2-z.^2);gridonfori=-2:0.5:2;h1=urf(linpace(-2,2,20),...linpace(-2,2,20),...zero(20)+i);rotate(h1,[1-11],30)d某=get(h1,'某data');dy=get(h1,'ydata');dz=get(h1,'zdata');delete(h1) lice(某,y,z,v,[-22],2,-2)holdonlice(某,y,z,v,d某,dy,dz)holdoffa某itightfile:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]view(-5,10)drawnowend实例30:立体透视(2)functionhili30h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例30');[某,y,z]=mehgrid(-2:0.1:2,...-2:0.1:2,...-2:0.1:2);v=某.某e某p(-某.^2-y.^2-z.^2);[d某,dy,dz]=cylinder;lice(某,y,z,v,[-22],2,-2)fori=-2:0.2:2 h=urface(d某+i,dy,dz);rotate(h,[100],90)某p=get(h,'某data');yp=get(h,'ydata');zp=get(h,'zdata');delete(h)holdonh=lice (某,y,z,v,某p,yp,zp);a某itight某lim([-33])view(-10,35)drawnowdelete(h)file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]holdoffend实例31:表面图形functionhili31h0=figure('toolbar','none',...'poition',[200150550250],...'name','实例31');ubplot(1,2,1)某=rand(100,1)某16-8;y=rand(100,1)某16-8;r=qrt(某.^2+y.^2)+ep;z=in(r)./r;某lin=linpace(min(某),ma某(某),33);ylin=linpace(min(y),ma 某(y),33);[某,Y]=mehgrid(某lin,ylin);Z=griddata(某,y,z,某,Y,'cubic');meh(某,Y,Z)a某itightholdonplot3(某,y,z,'.','Markerize',20)ubplot(1,2,2)k=5;n=2^k-1;theta=pi某(-n:2:n)/n;phi=(pi/2)某(-n:2:n)'/n;某=co(phi)某co(theta);Y=co(phi)某in(theta);Z=in(phi)某one(ize(theta));file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]colormap([000;111])C=hadamard(2^k);urf(某,Y,Z,C)a某iquare 实例32:沿曲线移动的小球h0=figure('toolbar','none',...'poition',[198********],...'name','实例32');h1=a某e('parent',h0,...'poition',[0.150.450.70.5],...'viible','on');t= 0:pi/24:4某pi;y=in(t);plot(t,y,'b')n=length(t);h=line('color',[00.50.5],...'linetyle','.',...'markerize',25,...'eraemode','某or');k1=uicontrol('parent',h0,...'tyle','puhbutton',...'poition',[801005030],...'tring','开始',...'callback',[...'i=1;',...'k=1;,',...'m=0;,',...'while1,',...file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]'ifk==0,',...'break,',...'end,',...'ifk~=0,',...'et(h,''某data'',t(i),''ydata'',y(i)),',...'drawnow;,',...'i=i+1;,', (i)i>n,',...'m=m+1;,',...'i=1;,',...'end,',...'end,',...'end']);k2= uicontrol('parent',h0,...'tyle','puhbutton',...'poition',[1801005030],...'tring','停止',...'callback',[...'k=0;,',...'et(e1,''tring'',m),',...'p=get(h,''某data'');,',...'q=get(h,''ydata'');,',...'et(e2,''tring'',p);,',. ..'et(e3,''tring'',q)']);k3=uicontrol('parent',h0,...'tyle','puhbutton',...'poition',[2801005030],...'tring','关闭',...'callback','cloe');file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]e1=uicontrol('parent',h0,...'tyle','edit',...'poition',[60306020]);t1=uicontrol('parent',h0,...'tyle','te某t',...'tring','循环次数',...'poition',[60506020]);e2=uicontrol('parent',h0,...'tyle','edit',...'poition',[180305020]);t2=uicontrol('parent ',h0,...'tyle','te某t',...'tring','终点的某坐标值',...'poition',[1555010020]);e3=uicontrol('parent',h0,...'tyle', 'edit',...'poition',[300305020]);t3=uicontrol('parent',h0,...'ty le','te某t',...'tring','终点的Y坐标值',...'poition',[2755010020]);实例33:曲线转换按钮h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例33');某=0:0.5:2某pi;y=in(某);h=plot(某,y);file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]gridonhuidiao=[...'ifi==1,',...'i=0;,',...'y=co(某);,',...'delete(h),',...'et(hm,''tring'',''正弦函数''),',...'h=plot(某,y);,',...'gridon,',...'eleifi==0,',...'i=1;, ',...'y=in(某);,',...'et(hm,''tring'',''余弦函数''),',...'delete(h),',...'h=plot(某,y);,',...'gridon,',...'end,' ,...'end'];hm=uicontrol(gcf,'tyle','puhbutton',...'tring','余弦函数',...'callback',huidiao);i=1;et(hm,'poition',[250206020]);et(gca,'poition',[0.20.20.60.6] )title('按钮的使用')holdon实例34:栅格控制按钮h0=figure('toolbar','none',...file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]'poition',[200150450250],...'name','实例34');某=0:0.5:2某pi;y=in(某);plot(某,y)huidiao1=[...'et(h_toggle2,''value'',0),',...'gridon,',...];huidiao2=[...'et(h_toggle1,''value'',0),',...'gridoff,',...];h_toggle1=uicontrol(gcf,'tyle','togglebutton',...'tring','gr idon',...'value',0,...'poition',[20455020],...'callback',huidiao1);h_toggle2=uicontrol(gcf,'tyle','togglebutton',...'tring','gr idoff',...'value',0,...'poition',[20205020],...'callback',huidiao2);et(gca,'poition',[0.20.20.60.6])title('开关按钮的使用')实例35:编辑框的使用h0=figure('toolbar','none',...'poition',[200150350250],...file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]'name','实例35');f='Pleaeinputtheletter';huidiao1=[...'g=upper(f);,',...'et(h2_edit,''tring'',g),',...];huidiao2=[ ...'g=lower(f);,',...'et(h2_edit,''tring'',g),',...];h1_edit=uicontrol(gcf,'tyle','edit',...'poition',[1002001005 0],...'HorizontalAlignment','left',...'tring','Pleaeinputtheletter',...'callback','f=get(h1_edit,''tring'');',...'background','w ',...'ma某',5,...'min',1);h2_edit=uicontrol(gcf,'tyle','edit',...'HorizontalAlignment','left',...'poition',[10010010050],...' background','w',...'ma某',5,...'min',1);h1_button=uicontrol(gcf,'tyle','puhbutton',...'tring','小写变大写',...'poition',[1004510020],...'callback',huidiao1);h2_button=ui control(gcf,'tyle','puhbutton',...file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]'tring','大写变小写',...'poition',[1002010020],...'callback',huidiao2);实例36:弹出式菜单h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例36');某=0:0.5:2某pi;y=in(某);h=plot(某,y);gridonhm=uicontrol(gcf,'tyle','popupmenu',...'tring',...'in(某)|co(某)|in(某)+co(某)|e某p(-in(某))',...'poition',[250205020]);et(hm,'value',1)huidiao=[...'v=get(hm,''value'');,',...'witchv,',...'cae1,',...'delete(h ),',...'y=in(某);,',...'h=plot(某,y);,',...'gridon,',...'cae2,', ...'delete(h),',...'y=co(某);,',...'h=plot(某,y);,',...file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]'gridon,',...'cae3,',...'delete(h),',...'y=in(某)+co(某);,', ...'h=plot(某,y);,',...'gridon,',...'cae4,',...'delete(h),',...' y=e某p(-in(某));,',...'h=plot(某,y);,',...'gridon,',...'end'];et(hm,'callback',huidiao)et(gca,'poition',[0.20.20.60.6])tit le('弹出式菜单的使用')holdonfile:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/4.t某t[2022/5/141:14:30]实例37:滑标的使用h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例37');[某,y]=mehgrid(-8:0.5:8);r=qrt(某.^2+y.^2)+ep;z=in(r)./r;h0=meh(某,y,z);h1=a某e('poition',...[0.20.20.50.5],...'viible','off');hte某t=uicontrol(gcf,...'unit','point',...'poition',[20304515],...'tring','brightne' ,...'tyle','te某t');hlider=uicontrol(gcf,...'unit','point',...'poition',[101030015],...'min',-1,...'ma某',1,...'tyle','lider',...'callback',...'brighten(get(hlider,''value''))');实例38:多选菜单h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例38');file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/5.t某t[2022/5/141:14:31][某,y]=mehgrid(-8:0.5:8);r=qrt(某.^2+y.^2)+ep;z=in(r)./r;h0=meh(某,y,z);hlit=uic ontrol(gcf,'tyle','litbo某',...'tring','default|pring|ummer|autumn|winter',...'ma某',5,...'min',1,...'poition',[202080100],...'callback',[...'k=get(hlit,''value' ');,',...'witchk,',...'cae1,',...'colormapdefault,',...'cae2,',...'colormappring,',...'cae3,',...'colormapummer,',...'cae4,',...'colormapautumn,',...'cae5,',...'colormapwinter,',...'end']);实例39:菜单控制的使用h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例39');某=0:0.5:2某pi;file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/5.t某t[2022/5/141:14:31]y=co(某);h=plot(某,y);gridonet(gcf,'toolbar','none')hm=uimenu('label','e某ample');huidiao1=[...'et(hm_gridon,''checked'',''on''),',...'et(hm_gridoff,''chec ked'',''off''),',...'gridon'];huidiao2=[...'et(hm_gridoff,''checked'',''on''),',...'et(hm_gridon,''chec ked'',''off''),',...'gridoff'];hm_gridon=uimenu(hm,'label','gridon',...'checked','on',...'c allback',huidiao1);hm_gridoff=uimenu(hm,'label','gridoff',...'checked','off',.. .'callback',huidiao2);实例40:UIMENU菜单的应用h0=figure('toolbar','none',...'poition',[200150450250],...'name','实例40');h1=uimenu(gcf,'label','函数');h11=uimenu(h1,'label','轮廓图',...'callback',[...'et(h31,''checked'',''on''),',...'et(h32,''checked'',''off'' ),',...file:///E|/Document/发展篇/M&M/竞赛篇/常用算法/matlab实例/5.t某t[2022/5/141:14:31]'[某,y,z]=peak;,',...'contour3(某,y,z,30)']);。

matlab追赶法求解方程组

matlab追赶法求解方程组

matlab追赶法求解方程组方程组是数学中常见的问题之一,解决方程组可以帮助我们理解和解决实际问题。

在数值计算中,matlab是一种常用的工具,它提供了许多求解方程组的方法。

其中,追赶法是一种常用的方法之一,它可以高效地求解三对角线方程组。

三对角线方程组是指方程组中只有主对角线和两个相邻的次对角线上有非零元素,其余元素均为零。

这种方程组在实际问题中经常出现,例如求解热传导方程、电路分析等。

追赶法是一种特殊的高斯消元法,它通过对方程组进行变换,将其转化为一个上三角形方程组和一个下三角形方程组,从而简化求解过程。

追赶法的基本思想是通过迭代的方式,逐步消去次对角线上的元素,最终得到方程组的解。

具体步骤如下:1. 将原方程组表示为矩阵形式,设为A*X=B,其中A是一个n×n的矩阵,X和B是n维列向量。

2. 对A进行LU分解,得到一个上三角矩阵U和一个下三角矩阵L,使得A=L*U。

3. 将方程组A*X=B转化为L*U*X=B。

4. 令Y=U*X,将方程组转化为L*Y=B。

5. 通过迭代的方式,逐步求解Y和X。

首先求解L*Y=B,然后求解U*X=Y。

6. 求解L*Y=B时,从第一行开始,逐行求解Y的每个分量。

设第i 行的元素为y(i),则有y(i)=B(i)-L(i,i-1)*y(i-1),其中L(i,i-1)是L矩阵中第i行第i-1列的元素。

7. 求解U*X=Y时,从最后一行开始,逐行求解X的每个分量。

设第i行的元素为x(i),则有x(i)=(Y(i)-U(i,i+1)*x(i+1))/U(i,i),其中U(i,i+1)是U矩阵中第i行第i+1列的元素。

通过以上步骤,我们可以得到方程组的解X。

追赶法是一种高效的求解三对角线方程组的方法,它的时间复杂度为O(n),其中n是方程组的维数。

相比于其他求解方法,追赶法具有计算量小、速度快的优势。

在matlab中,我们可以使用tridiag函数来实现追赶法求解方程组。

matlab优化算法100例

matlab优化算法100例

matlab优化算法100例1. 线性规划问题的优化算法:线性规划问题是一类目标函数和约束条件都是线性的优化问题。

Matlab中有很多优化算法可以解决线性规划问题,如单纯形法、内点法等。

下面以单纯形法为例介绍线性规划问题的优化算法。

单纯形法是一种迭代算法,通过不断改变基础解来寻找问题的最优解。

它的基本思想是从一个可行解出发,通过改变基本变量和非基本变量的取值来逐步逼近最优解。

2. 非线性规划问题的优化算法:非线性规划问题是一类目标函数和约束条件至少有一个是非线性的优化问题。

Matlab中有很多优化算法可以解决非线性规划问题,如拟牛顿法、共轭梯度法等。

下面以拟牛顿法为例介绍非线性规划问题的优化算法。

拟牛顿法是一种逐步逼近最优解的算法,通过近似目标函数的二阶导数信息来构造一个二次模型,然后通过求解该二次模型的最优解来更新当前解。

3. 全局优化问题的优化算法:全局优化问题是一类目标函数存在多个局部最优解的优化问题。

Matlab中有很多优化算法可以解决全局优化问题,如遗传算法、模拟退火算法等。

下面以遗传算法为例介绍全局优化问题的优化算法。

遗传算法是一种模拟生物进化过程的优化算法,通过基因编码、选择、交叉和变异等操作来不断迭代演化一组个体,最终找到全局最优解。

4. 多目标优化问题的优化算法:多目标优化问题是一类存在多个目标函数并且目标函数之间存在冲突的优化问题。

Matlab中有很多优化算法可以解决多目标优化问题,如多目标粒子群优化算法、多目标遗传算法等。

下面以多目标粒子群优化算法为例介绍多目标优化问题的优化算法。

多目标粒子群优化算法是一种基于粒子群优化算法的多目标优化算法,通过在粒子的速度更新过程中考虑多个目标函数来实现多目标优化。

5. 其他优化算法:除了上述提到的优化算法,Matlab还提供了很多其他的优化算法,如模拟退火算法、蚁群算法等。

这些算法可以根据具体的问题选择合适的算法进行求解。

综上所述,Matlab提供了丰富的优化算法,可以解决不同类型的优化问题。

数学建模常用方法

数学建模常用方法

数学建模常用方法建模常用算法,仅供参考:1、蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法)2、数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用M a t l a b作为工具)3、线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用L i n d o、L i n g o软件实现)4、图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备)5、动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中)6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用)7、网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具)8、一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的)9、数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用)10、图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用M a t l a b进行处理)一、在数学建模中常用的方法:1.类比法2.二分法3.量纲分析法4.差分法5.变分法6.图论法7.层次分析法8.数据拟合法9.回归分析法10.数学规划(线性规划、非线性规划、整数规划、动态规划、目标规划)11.机理分析12.排队方法13.对策方法14.决策方法15.模糊评判方法、16.时间序列方法17.灰色理论方法18.现代优化算法(禁忌搜索算法、模拟退火算法、遗传算法、神经网络)二、用这些方法可以解下列一些模型:优化模型、微分方程模型、统计模型、概率模型、图论模型、决策模型。

数学建模10种常用算法

数学建模10种常用算法

数学建模10种常用算法1、蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法)2、数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具)3、线性规划、整数规划、多元规划、二次规划等规划类问 题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现)4、图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备)5、动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中)6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用)7、网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具)8、一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的)9、数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用)10、图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用Matlab进行处参数估计C.F.20世纪60年代,随着电子计算机的。

参数估计有多种方法,有最小二乘法、极大似然法、极大验后法、最小风险法和极小化极大熵法等。

数学建模常用的30个常用算法(python代码)

数学建模常用的30个常用算法(python代码)

数学建模常用的30个常用算法(python代码) 数学建模中使用的算法涉及多个领域,包括优化、统计、机器学习等。

以下是一些在数学建模中常用的30个算法的简要说明和Python代码示例。

请注意,这只是一小部分,具体应用场景和需求可能需要使用其他算法。

1.线性规划(Linear Programming):from scipy.optimize import linprog2.整数规划(Integer Programming):from scipy.optimize import linprog3.非线性规划(Nonlinear Programming):from scipy.optimize import minimize4.蒙特卡洛模拟(Monte Carlo Simulation):import numpy as np5.差分方程(Difference Equations):import numpy as np6.梯度下降法(Gradient Descent):import numpy as np7.贪心算法(Greedy Algorithm):def greedy_algorithm(values, weights, capacity):n = len(values)ratio = [(values[i] / weights[i], i) for i in range(n)]ratio.sort(reverse=True)result = [0] * ntotal_value = 0current_weight = 0for _, i in ratio:if weights[i] + current_weight <= capacity: result[i] = 1current_weight += weights[i]total_value += values[i]return result, total_value8.动态规划(Dynamic Programming):def dynamic_programming(weights, values, capacity): n = len(values)dp = [[0] * (capacity + 1) for _ in range(n + 1)]for i in range(1, n + 1):for w in range(capacity + 1):if weights[i - 1] <= w:dp[i][w] = max(dp[i - 1][w], values[i - 1] + dp[i - 1][w - weights[i - 1]])else:dp[i][w] = dp[i - 1][w]return dp[n][capacity]9.遗传算法(Genetic Algorithm):import numpy as np10.模拟退火算法(Simulated Annealing):import numpy as np11.马尔可夫链(Markov Chains):import numpy as np12.蒙特卡洛树搜索(Monte Carlo Tree Search):import numpy as np13.K均值聚类(K-means Clustering):from sklearn.cluster import KMeans14.主成分分析(Principal Component Analysis):from sklearn.decomposition import PCA15.支持向量机(Support Vector Machine):from sklearn.svm import SVC16.朴素贝叶斯分类器(Naive Bayes Classifier):from sklearn.naive_bayes import GaussianNB17.决策树(Decision Tree):from sklearn.tree import DecisionTreeClassifier18.随机森林(Random Forest):from sklearn.ensemble import RandomForestClassifier19.K最近邻算法(K-Nearest Neighbors):from sklearn.neighbors import KNeighborsClassifier20.多层感知器(Multilayer Perceptron):from sklearn.neural_network import MLPClassifier21.梯度提升机(Gradient Boosting):from sklearn.ensemble import GradientBoostingClassifier22.高斯混合模型(Gaussian Mixture Model):from sklearn.mixture import GaussianMixture23.时间序列分析(Time Series Analysis):import statsmodels.api as sm24.马尔科夫链蒙特卡洛(Markov Chain Monte Carlo):import pymc3 as pm25.局部最小二乘回归(Local Polynomial Regression):from statsmodels.nonparametric.kernel_regression import KernelReg26.逻辑回归(Logistic Regression):from sklearn.linear_model import LogisticRegression27.拉格朗日插值法(Lagrange Interpolation):from scipy.interpolate import lagrange28.最小二乘法(Least Squares Method):import numpy as np29.牛顿法(Newton's Method):def newton_method(f, df, x0, tol=1e-6, max_iter=100):x = x0for i in range(max_iter):x = x - f(x) / df(x)if abs(f(x)) < tol:breakreturn x30.梯度下降法(Gradient Descent):def gradient_descent(f, df, x0, learning_rate=0.01, tol=1e-6, max_iter=100):x = x0for i in range(max_iter):x = x - learning_rate * df(x)if abs(df(x)) < tol:breakreturn x以上代码只是简单示例,实际应用中可能需要根据具体问题进行调整和扩展。

Matlab中常用的数学函数介绍与应用

Matlab中常用的数学函数介绍与应用

Matlab中常用的数学函数介绍与应用引言:Matlab是一种强大的数学计算工具,它提供了丰富的函数库,可以方便地进行各种数学运算和数据分析。

本文将介绍一些常用的Matlab数学函数,并讨论它们的具体应用场景和用法。

一、线性代数函数1.1 dot函数dot函数用于计算两个向量的点积。

在向量计算中,点积可以帮助我们判断两个向量之间的夹角以及它们的相似程度。

例如,我们可以使用dot函数来计算两个特征向量之间的相似性,从而实现图像分类或者特征匹配。

具体用法:C = dot(A,B),其中A和B是两个向量。

计算结果将存储在变量C 中。

1.2 inv函数inv函数用于计算一个矩阵的逆矩阵。

在线性代数中,逆矩阵对于求解线性方程组、求解最小二乘问题以及确定矩阵的特征值等具有重要作用。

通过使用inv函数,我们可以方便地求解这些问题。

具体用法:B = inv(A),其中A是输入的矩阵,B是其逆矩阵。

1.3 eig函数eig函数用于计算一个矩阵的特征值和特征向量。

在许多数学和物理问题中,特征值和特征向量都具有重要的意义。

例如,在图像压缩和图像处理中,特征值分解可以帮助我们找到最佳的基向量,从而实现更好的图像压缩效果。

具体用法:[V,D] = eig(A),其中A是输入的矩阵,V是特征向量矩阵,D是特征值对角矩阵。

二、微积分函数2.1 diff函数diff函数用于计算一个函数的导数。

在微积分中,导数表示函数在某一点的变化率,具有重要的应用价值。

通过使用diff函数,我们可以方便地计算函数的导数,从而求解一些最优化问题、优化算法以及信号处理等领域的相关问题。

具体用法:Y = diff(X),其中X是输入的函数,Y是其导数。

2.2 int函数int函数用于计算一个函数的不定积分。

在微积分中,不定积分表示函数在某一区间上的面积或体积,对于求解曲线下面积、计算变量间的相关性以及估计概率密度分布等问题非常有用。

通过使用int函数,我们可以轻松地计算函数的不定积分。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文总结了matlab常用的几个算法,希望对数学建模有帮助。

利用matlab编程FFD算法完成装箱问题:设有6种物品,它们的体积分别为:60、45、35、20、20和20单位体积,箱子的容积为100个单位体积。

建立box_main.mfunction[box_count,b]=box_main(v) vmax=100;sort(v,'descend');n=length(v);b=zeros(1,n);for i=1:nb(i)=vmax;endbox_count=1;for i=1:nfor j=1:box_countif v(i)<=b(j) %可以放入 b(j)=b(j)-v(i);break;else%不可放入时continue;endendif j==box_countbox_count=box_count+1;endendbox_count=box_count-1;end主程序为:v=[60 45 35 20 20 20];[box_count,b]=box_main(v)结果:box_count =3 b =5 15 80 100 100 100所以,使用的箱子数为3, 使用的箱子的剩余空间为5,15 ,80。

“超市大赢家”提供了50种商品作为奖品供中奖顾客选择,车的容量为1000dm3 , 奖品i 占用的空间为wi dm3 ,价值为vi 元, 具体的数据如下:vi = { 220, 208, 198, 192, 180, 180, 165, 162, 160, 158,155, 130, 125, 122, 120, 118, 115, 110, 105, 101, 100, 100, 98,96, 95, 90, 88, 82, 80, 77, 75, 73, 72, 70, 69, 66, 65, 63, 60, 58,56, 50, 30, 20, 15, 10, 8, 5, 3, 1}wi = {80, 82, 85, 70, 72, 70, 66, 50, 55, 25, 50, 55, 40, 48,50, 32, 22, 60, 30, 32, 40, 38, 35, 32, 25, 28, 30, 22, 50, 30, 45,30, 60, 50, 20, 65, 20, 25, 30, 10, 20, 25, 15, 10, 10, 10, 4, 4, 2,1}。

解:模型建立:用价值密度贪婪准则的方法设x=v/w,对x做正向排序,依次选取商品。

建立chaoshi.mfunction[item_count,y]=chaoshi(v,w,car) n=length(v);x=zeros(n,3);x(:,1)=v';x(:,2)=w';x(:,3)=v'./v';x=sortrows(x,-3);item_count=0;for i=1:nif car>=x(i,2)car=car-x(i,2);item_count=item_count+1;elsebreak;endendy=zeros(item_count,2); for i=1:item_county(i,1)=x(i,1);y(i,2)=x(i,2);endend主程序为:v= [220, 208, 198, 192, 180, 180, 165, 162, 160, 158,155, 130, 125, 122, 120, 118, 115, 110, 105, 101, 100, 100, 98,96, 95, 90, 88, 82, 80, 77, 75, 73, 72, 70, 69, 66, 65, 63, 60, 58,56, 50, 30, 20, 15, 10, 8, 5, 3, 1];w= [80, 82, 85, 70, 72, 70, 66, 50, 55, 25, 50, 55, 40, 48,50, 32, 22, 60, 30, 32, 40, 38, 35, 32, 25, 28, 30, 22, 50, 30, 45,30, 60, 50, 20, 65, 20, 25, 30, 10, 20, 25, 15, 10, 10, 10, 4, 4, 2,1];car=1000;[item_count,y]=chaoshi(v,w,car);y’;结果为:ans =Columns 1 through 11158 58 115 95 82 118 105 69 65 162 9025 10 22 25 22 32 30 20 20 50 28Columns 12 through 22101 125 155 96 88 160 98 56 220 192 10032 40 50 32 30 55 35 20 80 70 38Columns 23 through 26180 77 122 20870 30 48 82最大总价值为3095元,可装入体积为996贪婪算法练习练习题1:考虑1、8、9、11这四种面值的硬币,要找出币值24的零钱,怎么找能使硬币数最少?利用matlab编程求解。

解:设xj为二进制变量,如果硬币j被选中,则,xj=1,否则xj=0,则找硬币问题的数学模型如下:minnjj1;mnjjjxv 1;用贪婪算法求解,其MATLAB程序如下: function [n,x]=payback(v,y,m) [m,n]=size(y); for i=1:n for j=1:n练习题2:利用matlab编程FFD算法完成下题:设有6种物品,它们的体积分别为:60、45、35、20、20和20单位体积,箱子的容积为100个单位体积。

function [nbox,p]=sjy(n,v,limitv) [m,n]=size(v);w=limitv*ones(m,n); p=zeros(n); nbox=0; for i=1:n for j=1:iif v(i)<w(j) w(j)=w(j)-v(i);p(i,j)=1;break; elsecontinue; endw(j+1)=w(j+1)-v(i);p(i,j+1)=1; nbox=nbox+1; end end运行结果:p =1 0 0 0 0 0 0 1 0 0 0 01 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0练习题3:如果把选择策略从“选出一个下标最小的箱子并把物品ai放入该箱子中”(FF算法)改为选择最佳的箱子(已装载物品大小和最大的-这个称为best fit-BF最佳适应算法),再计算一次上题。

比较两次求解的结果。

练习题4:背包问题:c=[10,5,15,7,6,18,3];w=[2,3,5,7,1,4,1];limitw=15;n=7;求最优解。

“超市大赢家”提供了50种商品作为奖品供中奖顾客选择,车的容量为1000dm3 , 奖练习题5:品i占用的空间为wi dm3 ,价值为vi 元, 具体的数据如下:vi = { 220, 208, 198, 192, 180, 180, 165, 162, 160, 158,155, 130, 125, 122, 120, 118, 115, 110, 10 5, 101, 100, 100, 98,96, 95, 90, 88, 82, 80, 77, 75, 73, 72, 70, 69, 66, 65, 63, 60, 58,56, 50, 30, 20, 15, 10, 8, 5, 3, 1}wi = {80, 82, 85, 70, 72, 70, 66, 50, 55, 25, 50, 55, 40, 48,50, 32, 22, 60, 30, 32, 40, 38, 35, 32, 25, 28, 30, 22, 50, 30, 45,30, 60, 50, 20, 65, 20, 25, 30, 10, 20, 25, 15, 10, 10, 10, 4, 4, 2,1}。

模型的建立:设xj为二进制变量,如果物品j被选中,则j=1,否则,xj=0,如此可将本题转化为如下优化模型:maxnjjjxv1;s.t.njWxxwjnjjj,,2,1},1,0{;1模型的解决:对此优化问题,我们可以选用价值密度贪婪准则,从剩下的物品中选择可装入购物车的单位价值wvjj,最大的物品,即按wvjj非递增的次序装入物品,只要正被考虑的物品装的进就装入小车。

其MA TLAB编程代码如下:function [a1,b1]=sort1(n,a,b)%按单位价值排序 [m,n]=size(a); d=zeros(m,n); for k=1:nd(k)=a(k)/b(k); end%单位价值 for h=1:n-1for j=1:n-h%向后排序if d(j)<d(j+1)t1=a(j);a(j)=a(j+1);a(j+1)=t1; t2=b(j);b(j)=b(j+1);b(j+1)=t2; t3=d(j);d(j)=d(j+1);d(j+1)=t3;% end end end a1=a; b1=b;function [p,c,w]=goodsinknapsack(n,limitw,v,w,x)%计算背包中物品数 cl=limitw;%cl为背包剩余可装载重量 p=0;[m,z]=size(c); x=zeros(m,z);[v,t]=sort1(n,c,w);%物品按单位价值排序 c=v;w=t; for i=1:nif w(i)>cl break%待放入包的物品重量大于包的重量,跳出循环 elsex(i)=1;%x(i)为1时,物品i在包中 cl=cl-w(i);p=p+1;%p记录放入背包物品的个数 end endfunction knapsack(n,limitw,w,v) totalc=0;totalw=0;[m,n]=size(w); %m 是w 的行数n 是w 的列数 x=zeros(m,n);t=w;%记录原数组 k=c; y=x;[p,c,w]=goodsinknapsack(n,limitw,v,w,x);%排序及计算装箱物品数 for j=1:p%装包的p件物品 for i=1:n%原n件物品if (w(j)==t(i))&&(c(j)==k(i))%被选择的物品装箱 y(i)=1; end end end yfor i=1:ntotalc=totalc+k(i)*y(i);%背包的总价值 if y(i)==1totalw=totalw+t(i);%背包所装载总体积 end end totalw totalcv=[220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,100 ,98,96,95,90,88,82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1];w=[80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,50,30, 45,30,60,50,20,65,20,25,30,10,20,25,15,10,10,10,4,4,2,1]; limitw=1000;n=50;knapsack(n,limitw,w,v);运行结果为:y =Columns 1 through 161 1 0 1 0 1 0 1 1 1 1 0 1 1 0 1 Columns 17 through 321 0 1 1 0 1 1 1 1 1 1 1 0 1 0 0 Columns 33 through 480 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 Columns 49 through 500 0层次分析法matlab源程序disp('请输入判断矩阵A(n阶)');A=input('A=');[n,n]=size(A);x=ones(n,100);y=ones(n,100);m=zeros(1,100);m(1)=max(x(:,1));y(:,1)=x(:,1);x(:,2)=A*y(:,1);m(2)=max(x(:,2));y(:,2)=x(:,2)/m(2);p=0.0001;i=2;k=abs(m(2)-m(1));while k>pi=i+1;x(:,i)=A*y(:,i-1);m(i)=max(x(:,i));y(:,i)=x(:,i)/m(i);k=abs(m(i)-m(i-1));enda=sum(y(:,i));w=y(:,i)/a;t=m(i);disp(w);disp(t);%以下是一致性检验CI=(t-n)/(n-1);RI=[0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];CR=CI/RI(n);if CR<0.10disp('此矩阵的一致性可以接受!');disp('CI=');disp(CI);disp('CR=');disp(CR);endfunction AHPInit1(x,y)%层次分析的初始化%默认只有两层x为准则数,y为方案数%CToT为准则对目标生成的比较阵%EigOfCri为准则层的特征向量%EigOfOpt为选项层的特征向量EigOfCri=zeros(x,1);%准则层的特征向量EigOfOpt=zeros(y,x);dim=x;%维度RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];%RI标准%生成成对比较阵for i=1:dimCToT(i,:)=input('请输入数据:');endCToT %输出pause,tempmatrix=zeros(x+1);tempmatrix=AHP1(dim,CToT);EigOfCri=tempmatrix(1:x);ci1=tempmatrix(1+x);EigOfCrici1pause,matrix=cell(x);%元胞数组ci=zeros(1,x);dim=y;for k=1:xmatrix{k}=zeros(dim,dim);%生成成对比较阵for i=1:dimmatrix{k}(i,:)=input('请输入数据:');end%判断该比较阵是不是一致阵tempmatrix=zeros(y+1);tempmatrix=AHP1(dim,matrix{k});EigOfOpt(:,k)=tempmatrix(1:y);ci(k)=tempmatrix(y+1);EigOfOpt(:,k)ci(k)pause,end%下面进行组合一致性检查RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51]; CR=ci1/RI(x)+ci*EigOfCri/RI(y);CRif CR>0.1disp('组合一致性不通过,请重新评分')returnend%下面根据比较阵的结果进行组合result=EigOfOpt*EigOfCri;resultfunction f=AHP1(dim,CmpMatrix)RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51]; %判断该比较阵是不是一致阵%判断该比较阵是不是一致阵[V,D]=eig(CmpMatrix);%求得特征向量和特征值%求出最大特征值和它所对应的特征向量tempNum=D(1,1);pos=1;for h=1:dimif D(h,h)>tempNumtempNum=D(h,h);pos=h;endendeigVector=V(:,pos);maxeig=D(pos,pos);maxeigdimCI=(maxeig-dim)/(dim-1);CR=CI/RI(dim);if CR>0.1disp('准则对目标影响度评分生成的矩阵不是一致阵,请重新评分') returnendCI%归一化sum=0;for h=1:dimsum=sum+eigVector(h);endsumpause,for h=1:dimeigVector(h)=eigVector(h)/sum;endf=[eigVector;CI];多目标线性规划的若干解法及MATLAB实现摘要:求解多目标线性规划的基本思想大都是将多目标问题转化为单目标规划,本文介绍了理想点法、线性加权和法、最大最小法、目标规划法[1],然后给出多目标线性规划的模糊数学解法[2],最后对每种解法给出例子,并用Matlab软件加以实现。

相关文档
最新文档