第三章 遍历算法matlab源码

合集下载

matlab图论程序算法大全

matlab图论程序算法大全

图论算法m a t l a b实现求最小费用最大流算法的 MATLAB 程序代码如下:n=5;C=[0 15 16 0 00 0 0 13 140 11 0 17 00 0 0 0 80 0 0 0 0]; %弧容量b=[0 4 1 0 00 0 0 6 10 2 0 3 00 0 0 0 20 0 0 0 0]; %弧上单位流量的费用wf=0;wf0=Inf; %wf 表示最大流量, wf0 表示预定的流量值for(i=1:n)for(j=1:n)f(i,j)=0;end;end %取初始可行流f 为零流while(1)for(i=1:n)for(j=1:n)if(j~=i)a(i,j)=Inf;end;end;end%构造有向赋权图for(i=1:n)for(j=1:n)if(C(i,j)>0&f(i,j)==0)a(i,j)=b(i,j);elseif(C(i,j)>0&f(i,j)==C(i,j))a(j,i)=-b(i,j);elseif(C(i,j)>0)a(i,j)=b(i,j);a(j,i)=-b(i,j);end;end;endfor(i=2:n)p(i)=Inf;s(i)=i;end %用Ford 算法求最短路, 赋初值for(k=1:n)pd=1; %求有向赋权图中vs 到vt 的最短路for(i=2:n)for(j=1:n)if(p(i)>p(j)+a(j,i))p(i)=p(j)+a(j,i);s(i)=j;pd=0;end;end;e ndif(pd)break;end;end %求最短路的Ford 算法结束if(p(n)==Inf)break;end %不存在vs 到vt 的最短路, 算法终止. 注意在求最小费用最大流时构造有向赋权图中不会含负权回路, 所以不会出现k=ndvt=Inf;t=n; %进入调整过程, dvt 表示调整量while(1) %计算调整量if(a(s(t),t)>0)dvtt=C(s(t),t)-f(s(t),t); %前向弧调整量elseif(a(s(t),t)<0)dvtt=f(t,s(t));end %后向弧调整量if(dvt>dvtt)dvt=dvtt;endif(s(t)==1)break;end %当t 的标号为vs 时, 终止计算调整量t=s(t);end %继续调整前一段弧上的流fpd=0;if(wf+dvt>=wf0)dvt=wf0-wf;pd=1;end%如果最大流量大于或等于预定的流量值t=n;while(1) %调整过程if(a(s(t),t)>0)f(s(t),t)=f(s(t),t)+dvt; %前向弧调整elseif(a(s(t),t)<0)f(t,s(t))=f(t,s(t))-dvt;end %后向弧调整if(s(t)==1)break;end %当t 的标号为vs 时, 终止调整过程t=s(t);endif(pd)break;end%如果最大流量达到预定的流量值wf=0; for(j=1:n)wf=wf+f(1,j);end;end %计算最大流量zwf=0;for(i=1:n)for(j=1:n)zwf=zwf+b(i,j)*f(i,j);end;end%计算最小费用f %显示最小费用最大流图 6-22wf %显示最小费用最大流量zwf %显示最小费用, 程序结束__Kruskal 避圈法:Kruskal 避圈法的MATLAB 程序代码如下:n=8;A=[0 2 8 1 0 0 0 02 0 6 0 1 0 0 08 6 0 7 5 1 2 01 0 7 0 0 0 9 00 1 5 0 0 3 0 80 0 1 0 3 0 4 60 0 2 9 0 4 0 30 0 0 0 8 6 3 0];k=1; %记录A中不同正数的个数for(i=1:n-1)for(j=i+1:n) %此循环是查找A中所有不同的正数if(A(i,j)>0)x(k)=A(i,j); %数组x 记录A中不同的正数kk=1; %临时变量for(s=1:k-1)if(x(k)==x(s))kk=0;break;end;end %排除相同的正数k=k+kk;end;end;endk=k-1 %显示A中所有不同正数的个数for(i=1:k-1)for(j=i+1:k) %将x 中不同的正数从小到大排序if(x(j)<x(i))xx=x(j);x(j)=x(i);x(i)=xx;end;end;endT(n,n)=0; %将矩阵T 中所有的元素赋值为0q=0; %记录加入到树T 中的边数for(s=1:k)if(q==n)break;end %获得最小生成树T, 算法终止for(i=1:n-1)for(j=i+1:n)if (A(i,j)==x(s))T(i,j)=x(s);T(j,i)=x(s); %加入边到树T 中TT=T; %临时记录Twhile(1)pd=1; %砍掉TT 中所有的树枝for(y=1:n)kk=0;for(z=1:n)if(TT(y,z)>0)kk=kk+1;zz=z;end;end %寻找TT 中的树枝if(kk==1)TT(y,zz)=0;TT(zz,y)=0;pd=0;end;end %砍掉TT 中的树枝if(pd)break;end;end %已砍掉了TT 中所有的树枝pd=0; %判断TT 中是否有圈for(y=1:n-1)for(z=y+1:n)if(TT(y,z)>0)pd=1;break;end;end;endif(pd)T(i,j)=0;T(j,i)=0; %假如TT 中有圈else q=q+1;end;end;end;end;endT %显示近似最小生成树T, 程序结束用Warshall-Floyd 算法求任意两点间的最短路.n=8;A=[0 2 8 1 Inf Inf Inf Inf2 0 6 Inf 1 Inf Inf Inf8 6 0 7 5 1 2 Inf1 Inf 7 0 Inf Inf 9 InfInf 1 5 Inf 0 3 Inf 8Inf Inf 1 Inf 3 0 4 6Inf Inf 2 9 Inf 4 0 3Inf Inf Inf Inf 8 6 3 0]; % MATLAB 中, Inf 表示∞D=A; %赋初值for(i=1:n)for(j=1:n)R(i,j)=j;end;end %赋路径初值for(k=1:n)for(i=1:n)for(j=1:n)if(D(i,k)+D(k,j)<D(i,j))D(i,j)=D(i,k)+D(k,j); %更新dijR(i,j)=k;end;end;end %更新rijk %显示迭代步数D %显示每步迭代后的路长R %显示每步迭代后的路径pd=0;for i=1:n %含有负权时if(D(i,i)<0)pd=1;break;end;end %存在一条含有顶点vi 的负回路if(pd)break;end %存在一条负回路, 终止程序end %程序结束利用 Ford--Fulkerson 标号法求最大流算法的MATLAB 程序代码如下:n=8;C=[0 5 4 3 0 0 0 00 0 0 0 5 3 0 00 0 0 0 0 3 2 00 0 0 0 0 0 2 00 0 0 0 0 0 0 40 0 0 0 0 0 0 30 0 0 0 0 0 0 50 0 0 0 0 0 0 0]; %弧容量for(i=1:n)for(j=1:n)f(i,j)=0;end;end %取初始可行流f 为零流for(i=1:n)No(i)=0;d(i)=0;end %No,d 记录标号图 6-19while(1)No(1)=n+1;d(1)=Inf; %给发点vs 标号while(1)pd=1; %标号过程for(i=1:n)if(No(i)) %选择一个已标号的点vifor(j=1:n)if(No(j)==0&f(i,j)<C(i,j)) %对于未给标号的点vj, 当vivj 为非饱和弧时No(j)=i;d(j)=C(i,j)-f(i,j);pd=0;if(d(j)>d(i))d(j)=d(i);endelseif(No(j)==0&f(j,i)>0) %对于未给标号的点vj, 当vjvi 为非零流弧时No(j)=-i;d(j)=f(j,i);pd=0;if(d(j)>d(i))d(j)=d(i);end;end;end;end;endif(No(n)|pd)break;end;end%若收点vt 得到标号或者无法标号, 终止标号过程if(pd)break;end %vt 未得到标号, f 已是最大流, 算法终止dvt=d(n);t=n; %进入调整过程, dvt 表示调整量while(1)if(No(t)>0)f(No(t),t)=f(No(t),t)+dvt; %前向弧调整elseif(No(t)<0)f(No(t),t)=f(No(t),t)-dvt;end %后向弧调整if(No(t)==1)for(i=1:n)No(i)=0;d(i)=0; end;break;end %当t 的标号为vs 时, 终止调整过程t=No(t);end;end; %继续调整前一段弧上的流fwf=0;for(j=1:n)wf=wf+f(1,j);end %计算最大流量f %显示最大流wf %显示最大流量No %显示标号, 由此可得最小割, 程序结束图论程序大全程序一:关联矩阵和邻接矩阵互换算法function W=incandadf(F,f)if f==0m=sum(sum(F))/2;n=size(F,1);W=zeros(n,m);k=1;for i=1:nfor j=i:nif F(i,j)~=0W(i,k)=1; W(j,k)=1; k=k+1;endendendelseif f==1m=size(F,2);n=size(F,1);W=zeros(n,n);for i=1:ma=find(F(:,i)~=0);W(a(1),a(2))=1;W(a(2),a(1))=1;endelsefprint('Please imput the right value of f'); endW;程序二:可达矩阵算法function P=dgraf(A)n=size(A,1);P=A;for i=2:nP=P+A^i;endP(P~=0)=1;P;程序三:有向图关联矩阵和邻接矩阵互换算法function W=mattransf(F,f)if f==0m=sum(sum(F));n=size(F,1);W=zeros(n,m);k=1;for i=1:nfor j=i:nif F(i,j)~=0W(i,k)=1;W(j,k)=-1;k=k+1;endendendelseif f==1m=size(F,2);n=size(F,1);W=zeros(n,n);for i=1:ma=find(F(:,i)~=0);if F(a(1),i)==1W(a(1),a(2))=1;elseW(a(2),a(1))=1;endendelsefprint('Please imput the right value of f');endW;第二讲:最短路问题程序一:Dijkstra算法(计算两点间的最短路)function [l,z]=Dijkstra(W)n = size (W,1);for i = 1 :nl(i)=W(1,i);z(i)=0;endi=1;while i<=nfor j =1 :nif l(i)>l(j)+W(j,i)l(i)=l(j)+W(j,i);z(i)=j-1;i=j-1;endendendi=i+1;end程序二:floyd算法(计算任意两点间的最短距离)function [d,r]=floyd(a)n=size(a,1);d=a;for i=1:nfor j=1:nr(i,j)=j;endendfor k=1:nfor i=1:nfor j=1:nif d(i,k)+d(k,j)<d(i,j) d(i,j)=d(i,k)+d(k,j); r(i,j)=r(i,k);endendendend程序三:n2short.m 计算指定两点间的最短距离function [P u]=n2short(W,k1,k2)n=length(W);U=W;m=1;for i=1:nfor j=1:nif U(i,j)>U(i,m)+U(m,j) U(i,j)=U(i,m)+U(m,j);endendendm=m+1;endu=U(k1,k2);P1=zeros(1,n);k=1;P1(k)=k2;V=ones(1,n)*inf;kk=k2;for i=1:nV(1,i)=U(k1,kk)-W(i,kk);if V(1,i)==U(k1,i)P1(k+1)=i;kk=i;k=k+1;endendendk=1;wrow=find(P1~=0);for j=length(wrow):-1:1P(k)=P1(wrow(j));k=k+1;endP;程序四、n1short.m(计算某点到其它所有点的最短距离) function[Pm D]=n1short(W,k)n=size(W,1);D=zeros(1,n);for i=1:n[P d]=n2short(W,k,i);Pm{i}=P;D(i)=d;end程序五:pass2short.m(计算经过某两点的最短距离) function [P d]=pass2short(W,k1,k2,t1,t2)[p1 d1]=n2short(W,k1,t1);[p2 d2]=n2short(W,t1,t2);[p3 d3]=n2short(W,t2,k2);dt1=d1+d2+d3;[p4 d4]=n2short(W,k1,t2);[p5 d5]=n2short(W,t2,t1);[p6 d6]=n2short(W,t1,k2);dt2=d4+d5+d6;if dt1<dt2d=dt1;P=[p1 p2(2:length(p2)) p3(2:length(p3))]; elsed=dt1;p=[p4 p5(2:length(p5)) p6(2:length(p6))]; endP;d;第三讲:最小生成树程序一:最小生成树的Kruskal算法function [T c]=krusf(d,flag)if nargin==1n=size(d,2);m=sum(sum(d~=0))/2;b=zeros(3,m);k=1;for i=1:nfor j=(i+1):nif d(i,j)~=0b(1,k)=i;b(2,k)=j; b(3,k)=d(i,j);k=k+1;endendendelseb=d;endn=max(max(b(1:2,:)));m=size(b,2);[B,i]=sortrows(b',3);B=B';c=0;T=[];k=1;t=1:n;for i=1:mif t(B(1,i))~=t(B(2,i))T(1:2,k)=B(1:2,i);c=c+B(3,i);k=k+1;tmin=min(t(B(1,i)),t(B(2,i))); tmax=max(t(B(1,i)),t(B(2,i)));for j=1:nif t(j)==tmaxt(j)=tmin;endendendif k==nbreak;endendT;c;程序二:最小生成树的Prim算法function [T c]=Primf(a)l=length(a);a(a==0)=inf;k=1:l;listV(k)=0;listV(1)=1;e=1;while (e<l)min=inf;for i=1:lif listV(i)==1for j=1:lif listV(j)==0 & min>a(i,j) min=a(i,j);b=a(i,j);s=i;d=j;endendendendlistV(d)=1;distance(e)=b;source(e)=s;destination(e)=d;e=e+1;endT=[source;destination];for g=1:e-1c(g)=a(T(1,g),T(2,g));endc;另外两种程序最小生成树程序1(prim 算法构造最小生成树)a=[inf 50 60 inf inf inf inf;50 inf inf 65 40 inf inf;60 inf inf 52 inf inf 45;... inf 65 52 inf 50 30 42;inf 40 inf 50 inf 70 inf;inf inf inf 30 70 inf inf;... inf inf 45 42 inf inf inf];result=[];p=1;tb=2:length(a);while length(result)~=length(a)-1temp=a(p,tb);temp=temp(:);d=min(temp);[jb,kb]=find(a(p,tb)==d);j=p(jb(1));k=tb(kb(1));result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];endresult最小生成树程序2(Kruskal 算法构造最小生成树)clc;clear;a(1,2)=50; a(1,3)=60; a(2,4)=65; a(2,5)=40;a(3,4)=52;a(3,7)=45; a(4,5)=50; a(4,6)=30;a(4,7)=42; a(5,6)=70;[i,j,b]=find(a);data=[i';j';b'];index=data(1:2,:);loop=max(size(a))-1;result=[];while length(result)<looptemp=min(data(3,:));flag=find(data(3,:)==temp);flag=flag(1);v1=data(1,flag);v2=data(2,flag);if index(1,flag)~=index(2,flag)result=[result,data(:,flag)];endindex(find(index==v2))=v1;data(:,flag)=[];index(:,flag)=[];endresult第四讲:Euler图和Hamilton图程序一:Fleury算法(在一个Euler图中找出Euler环游)注:包括三个文件;fleuf1.m, edf.m, flecvexf.mfunction [T c]=fleuf1(d)%注:必须保证是Euler环游,否则输出T=0,c=0 n=length(d);b=d;b(b==inf)=0;b(b~=0)=1;m=0;a=sum(b);eds=sum(a)/2;ed=zeros(2,eds);vexs=zeros(1,eds+1);matr=b;for i=1:nif mod(a(i),2)==1m=m+1;endendif m~=0fprintf('there is not exit Euler path.\n')T=0;c=0;endif m==0vet=1;flag=0;t1=find(matr(vet,:)==1);for ii=1:length(t1)ed(:,1)=[vet,t1(ii)];vexs(1,1)=vet;vexs(1,2)=t1(ii);matr(vexs(1,2),vexs(1,1))=0;flagg=1;tem=1;while flagg[flagg ed]=edf(matr,eds,vexs,ed,tem);tem=tem+1;if ed(1,eds)~=0 & ed(2,eds)~=0 T=ed;T(2,eds)=1;c=0;for g=1:edsc=c+d(T(1,g),T(2,g));endflagg=0;break;endendendendfunction[flag ed]=edf(matr,eds,vexs,ed,tem) flag=1;for i=2:eds[dvex f]=flecvexf(matr,i,vexs,eds,ed,tem);if f==1flag=0;break;endif dvex~=0ed(:,i)=[vexs(1,i) dvex];vexs(1,i+1)=dvex;matr(vexs(1,i+1),vexs(1,i))=0;elsebreak;endendfunction [dvex f]=flecvexf(matr,i,vexs,eds,ed,temp) f=0;edd=find(matr(vexs(1,i),:)==1); dvex=0;dvex1=[];ded=[];if length(edd)==1dvex=edd;elsedd=1;dd1=0;kkk=0;for kk=1:length(edd)m1=find(vexs==edd(kk));if sum(m1)==0dvex1(dd)=edd(kk); dd=dd+1;dd1=1;elsekkk=kkk+1;endif kkk==length(edd)tem=vexs(1,i)*ones(1,kkk);edd1=[tem;edd];for l1=1:kkklt=0;ddd=1;for l2=1:edsif edd1(1:2,l1)==ed(1:2,l2) lt=lt+1;endendif lt==0ded(ddd)=edd(l1);ddd=ddd+1;endendif temp<=length(dvex1)dvex=dvex1(temp);elseif temp>length(dvex1) & temp<=length(ded)dvex=ded(temp);elsef=1;endend程序二:Hamilton改良圈算法(找出比较好的Hamilton路)function [C d1]= hamiltonglf(v)%d表示权值矩阵%C表示算法最终找到的Hamilton圈。

matlab遍历算法

matlab遍历算法

matlab遍历算法【最新版】目录1.MATLAB 简介2.遍历算法的概念3.MATLAB 中的遍历算法实现4.遍历算法的实际应用5.总结正文1.MATLAB 简介MATLAB 是一种广泛应用于科学计算、数据分析、可视化等领域的编程语言。

它具有强大的矩阵计算能力,丰富的函数库和简洁的语法结构,使得用户可以更加高效地完成各种计算任务。

2.遍历算法的概念遍历算法是一种用于访问或处理数据集合的算法。

它通常用于遍历数据集合中的所有元素,以便对这些元素进行特定的操作。

遍历算法可以分为不同类型,例如顺序遍历、随机遍历和二进制遍历等。

3.MATLAB 中的遍历算法实现在 MATLAB 中,遍历算法可以通过循环结构(如 for 循环、while 循环等)来实现。

此外,MATLAB 还提供了一些内置函数,如 ismember、isequal 和 find 等,这些函数可以方便地用于遍历数据集合。

下面是一个简单的示例,展示了如何在 MATLAB 中使用 for 循环实现遍历算法:```matlab% 创建一个数组arr = [1, 2, 3, 4, 5];% 使用 for 循环遍历数组for i = 1:length(arr)disp(arr(i));end```4.遍历算法的实际应用遍历算法在实际应用中有很多用途,例如数据分析、图像处理和网络爬虫等。

在 MATLAB 中,遍历算法可以用于处理大量的数据,以完成各种复杂的计算任务。

例如,在图像处理中,遍历算法可以用于遍历图像中的所有像素,以便对每个像素进行特定的操作,如调整亮度、对比度等。

5.总结MATLAB 是一种强大的编程语言,可以方便地实现遍历算法。

通过使用循环结构和内置函数,用户可以高效地遍历数据集合,完成各种复杂的计算任务。

Matlab源程序代码

Matlab源程序代码

Matlab源程序代码正弦波的源程序:(一),用到的函数1,f2t函数function x=f2t(X)global dt df t f T N%x=f2t(X)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同并为2的整幂%本函数需要一个全局变量dt(时域取样间隔) X=[X(N/2+1:N),X(1:N/2)];x=ifft(X)/dt;end2,t2f函数。

function X=t2f(x)global dt df N t f T%X=t2f(x)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同,并为2的整幂。

%本函数需要一个全局变量dt(时域取样间隔) H=fft(x);X=[H(N/2+1:N),H(1:N/2)]*dt;end(二),主程序。

1,%(1)绘出正弦信号波形及频谱global dt df t f Nclose allk=input('取样点数=2^k, k取10左右');if isempty(k), k=10; endf0=input('f0=取1(kz)左右');if isempty(f0), f0=1; endN=2^k;dt=0.01; %msdf=1/(N*dt); %KHzT=N*dt; %截短时间Bs=N*df/2; %系统带宽f=[-Bs+df/2:df:Bs]; %频域横坐标t=[-T/2+dt/2:dt:T/2]; %时域横坐标s=sin(2*pi*f0*t); %输入的正弦信号S=t2f(s); %S是s的傅氏变换a=f2t(S); %a是S的傅氏反变换a=real(a);as=abs(S);subplot(2,1,1) %输出的频谱plot(f,as,'b');gridaxis([-2*f0,+2*f0,min(as),max(as)]) xlabel('f (KHz)') ylabel('|S(f)| (V/KHz)') %figure(2) subplot(2,1,2) plot(t,a,'black') %输出信号波形画图gridaxis([-2/f0,+2/f0,-1.5,1.5])xlabel('t(ms)')ylabel('a(t)(V)')gtext('频谱图')最佳基带系统的源程序:(一),用到的函数f2t函数和t2f函数。

完整word版,matlab代码大全,推荐文档

完整word版,matlab代码大全,推荐文档

MATLAB主要命令汇总MATLAB函数参考附录1.1 管理用命令函数名功能描述函数名功能描述addpath 增加一条搜索路径 rmpath 删除一条搜索路径demo 运行Matlab演示程序 type 列出.M文件doc 装入超文本文档 version 显示Matlab的版本号help 启动联机帮助 what 列出当前目录下的有关文件lasterr 显示最后一条信息 whatsnew 显示Matlab的新特性lookfor 搜索关键词的帮助 which 造出函数与文件所在的目录path 设置或查询Matlab路径附录1.2管理变量与工作空间用命令函数名功能描述函数名功能描述clear 删除内存中的变量与函数 pack 整理工作空间内存disp 显示矩阵与文本 save 将工作空间中的变量存盘length 查询向量的维数 size 查询矩阵的维数load 从文件中装入数据 who,whos 列出工作空间中的变量名附录1.3文件与操作系统处理命令函数名功能描述函数名功能描述cd 改变当前工作目录 edit 编辑.M文件delete 删除文件 matlabroot 获得Matlab的安装根目录diary 将Matlab运行命令存盘 tempdir 获得系统的缓存目录dir 列出当前目录的内容 tempname 获得一个缓存(temp)文件! 执行操作系统命令附录1.4窗口控制命令函数名功能描述函数名功能描述echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面format 设置输出格式附录1.5启动与退出命令函数名功能描述函数名功能描述matlabrc 启动主程序 quit 退出Matlab环境startup Matlab自启动程序附录2 运算符号与特殊字符附录2.1运算符号与特殊字符函数名功能描述函数名功能描述+ 加 ... 续行标志- 减 , 分行符(该行结果不显示)* 矩阵乘 ; 分行符(该行结果显示).* 向量乘 % 注释标志^ 矩阵乘方 ! 操作系统命令提示符.^ 向量乘方矩阵转置kron 矩阵kron积 . 向量转置\ 矩阵左除 = 赋值运算/ 矩阵右除 == 关系运算之相等.\ 向量左除 ~= 关系运算之不等./ 向量右除 < 关系运算之小于: 向量生成或子阵提取 <= 关系运算之小于等于() 下标运算或参数定义 > 关系运算之大于[] 矩阵生成 >= 关系运算之大于等于{} & 逻辑运算之与. 结构字段获取符 | 逻辑运算之或. 点乘运算,常与其他运算符联合使用(如.\) ~ 逻辑运算之非xor 逻辑运算之异成附录2.2逻辑函数函数名功能描述函数名功能描述all 测试向量中所用元素是否为真 is*(一类函数) 检测向量状态.其中*表示一个确定的函数(isinf)any 测试向量中是否有真元素 *isa 检测对象是否为某一个类的对象exist 检验变量或文件是否定义 logical 将数字量转化为逻辑量find 查找非零元素的下标附录3 语言结构与调试附录3.1编程语言函数名功能描述函数名功能描述builtin 执行Matlab内建的函数 global 定义全局变量eval 执行Matlab语句构成的字符串 nargchk 函数输入输出参数个数检验feval 执行字符串指定的文件 script Matlab语句及文件信息function Matlab函数定义关键词附录3.2控制流程函数名功能描述函数名功能描述break 中断循环执行的语句 if 条件转移语句case 与switch结合实现多路转移 otherwise 多路转移中的缺省执行部分else 与if一起使用的转移语句 return 返回调用函数elseif 与if一起使用的转移语句 switch 与case结合实现多路转移end 结束控制语句块 warning 显示警告信息error 显示错误信息 while 循环语句for 循环语句附录3.3交互输入函数名功能描述函数名功能描述input 请求输入 menu 菜单生成keyboard 启动键盘管理 pause 暂停执行附录3.4面向对象编程函数名功能描述函数名功能描述class 生成对象 isa 判断对象是否属于某一类double 转换成双精度型 superiorto 建立类的层次关系inferiorto 建立类的层次关系 unit8 转换成8字节的无符号整数inline 建立一个内嵌对象附录3.5调试函数名功能描述函数名功能描述dbclear 清除调试断点 dbstatus 列出所有断点情况dbcont 调试继续执行 dbstep 单步执行dbdown 改变局部工作空间内存 dbstop 设置调试断点dbmex 启动对Mex文件的调试 sbtype 列出带命令行标号的.M文件dbquit 退出调试模式 dbup 改变局部工作空间内容dbstack 列出函数调用关系附录4 基本矩阵与矩阵处理附录4.1基本矩阵函数名功能描述函数名功能描述eye 产生单位阵 rand 产生随机分布矩阵linspace 构造线性分布的向量 randn 产生正态分布矩阵logspace 构造等对数分布的向量 zeros 产生零矩阵ones 产生元素全部为1的矩阵 : 产生向量附录4.2特殊向量与常量函数名功能描述函数名功能描述ans 缺省的计算结果变量 non 非数值常量常由0/0或Inf/Inf获得computer 运行Matlab的机器类型 nargin 函数中参数输入个数eps 精度容许误差(无穷小) nargout 函数中输出变量个数flops 浮点运算计数 pi 圆周率i 复数单元 realmax 最大浮点数值inf 无穷大 realmin 最小浮点数值inputname 输入参数名 varargin 函数中输入的可选参数j 复数单元 varargout 函数中输出的可选参数附录4.3时间与日期函数名功能描述函数名功能描述calender 日历 eomday 计算月末clock 时钟 etime 所用时间函数cputime 所用的CPU时间 now 当前日期与时间date 日期 tic 启动秒表计时器datenum 日期(数字串格式) toc 读取秒表计时器datestr 日期(字符串格式) weekday 星期函数datevoc 日期(年月日分立格式)附录4.4矩阵处理函数名功能描述函数名功能描述cat 向量连接 reshape 改变矩阵行列个数diag 建立对角矩阵或获取对角向量 rot90 将矩阵旋转90度fliplr 按左右方向翻转矩阵元素 tril 取矩阵的下三角部分flipud 按上下方向翻转矩阵元素 triu 取矩阵的上三角部分repmat 复制并排列矩阵函数附录5 特殊矩阵函数名功能描述函数名功能描述compan 生成伴随矩阵 invhilb 生成逆hilbert矩阵gallery 生成一些小的测试矩阵 magic 生成magic矩阵hadamard 生成hadamard矩阵 pascal 生成pascal矩阵hankel 生成hankel矩阵 toeplitz 生成toeplitz矩阵hilb 生成hilbert矩阵 wilkinson 生成wilkinson特征值测试矩阵附录6 数学函数附录6.1三角函数函数名功能描述函数名功能描述sin/asin 正弦/反正弦函数 sec/asec 正割/反正割函数sinh/asinh 双曲正弦/反双曲正弦函数 sech/asech 双曲正割/反双曲正割函数cos/acos 余弦/反余弦函数 csc/acsc 余割/反余割函数cosh/acosh 双曲余弦/反双曲余弦函数 csch/acsch 双曲余割/反双曲余割函数tan/atan 正切/反正切函数 cot/acot 余切/反余切函数tanh/atanh 双曲正切/反双曲正切函数 coth/acoth 双曲余切/反双曲余切函数atan2 四个象限内反正切函数附录6.2指数函数函数名功能描述函数名功能描述exp 指数函数 log10 常用对数函数log 自然对数函数 sqrt 平方根函数附录6.3复数函数函数名功能描述函数名功能描述abs 绝对值函数 imag 求虚部函数angle 角相位函数 real 求实部函数conj 共轭复数函数附录6.4数值处理函数名功能描述函数名功能描述fix 沿零方向取整 round 舍入取整floor 沿-∞方向取整 rem 求除法的余数ceil 沿+∞方向取整 sign 符号函数附录6.5其他特殊数学函数函数名功能描述函数名功能描述airy airy函数 erfcx 比例互补误差函数besselh bessel函数(hankel函数) erfinv 逆误差函数bessili 改进的第一类bessel函数 expint 指数积分函数besselk 改进的第二类bessel函数 gamma gamma函数besselj 第一类bessel函数 gammainc 非完全gamma函数bessely 第二类bessel函数 gammaln gamma对数函数beta beta函数 gcd 最大公约数betainc 非完全的beta函数 lcm 最小公倍数betaln beta对数函数 log2 分割浮点数elipj Jacobi椭圆函数 legendre legendre伴随函数ellipke 完全椭圆积分 pow2 基2标量浮点数erf 误差函数 rat 有理逼近erfc 互补误差函数 rats 有理输出附录7 坐标转换函数名功能描述函数名功能描述cart2pol 笛卡儿坐标到极坐标转换 pol2cart 极坐标到笛卡儿坐标转换cart2sph 笛卡儿坐标到球面坐标转换 sph2cart 球面坐标到笛卡儿坐标转换附录8 矩阵函数附录8.1矩阵分析函数名功能描述函数名功能描述cond 求矩阵的条件数 rcond LINPACK倒数条件估计det 求矩阵的行列式 rref 矩阵的行阶梯型实现norm 求矩阵的范数 rrefmovie 消元法解方程演示null 右零空间 subspace 子空间orth 正交空间 trace 矩阵的迹rank 求矩阵的秩附录8.2线性方程函数名功能描述函数名功能描述/,\ 线性方程求解 nnls 非零最小二乘chol Cholesky分解 pinv 求伪逆矩阵inv 矩阵求逆 qr 矩阵的QR分解lscov 最小二乘方差 qrdelete QR分解中删除一行lu 矩阵的LU三角分解 qrinsert QR分解中插入一行附录8.3特征值与奇异值函数名功能描述函数名功能描述banlance 改进特征值精度的均衡变换 qz QZ算法求矩阵特征值cdf2rdf 复块对角阵到实块对角阵转换 rdf2cdf 实块对角阵到复块对角阵转换eig 求矩阵的特征值和特征向量 schur Schur分解hess 求Hessenberg矩阵 svd 奇异值分解poly 求矩阵的特征多项式附录8.4矩阵函数函数名功能描述函数名功能描述expm 矩阵指数函数 logm 矩阵对数函数funm 矩阵任意函数 sqrtm 矩阵平方根附录9 数据分析与Fourier变换函数附录9.1基本运算函数名功能描述函数名功能描述cumprod 向量累积 prod 对向量中各元素求积cumsum 向量累加 sort 对向量中各元素排序max 求向量中最大元素 sortrows 对矩阵中各行排序min 求向量中最小元素 std 求向量中各元素标准差mean 求向量中各元素均值 sum 对向量中各元素求和median 求向量中中间元素 trapz 梯形法求数值积分附录9.2微分计算函数名功能描述函数名功能描述del2 离散Laplace变换 gradient 梯度计算diff 差分于近视微分附录9.3滤波与卷积函数名功能描述函数名功能描述Conv 卷给与多项式乘法 filter 一维数字滤波conv2 二维卷积 filter2 二维数字滤波Deconv 因式分解与多项式乘法附录9.4方差处理函数名功能描述函数名功能描述corrcoef 相关系数计算 cov 协方差计算附录9.5Fourier变换函数名功能描述函数名功能描述abs 绝对值函数 fftshift fft与fft2输出重排angle 相角函数 ifft 离散Fourier逆变换cplxpair 依共轭复数对重新排序 ifft2 二维离散Fourier逆变换fft 离散Fourier变换 unwrap 相角矫正fft2 二维离散Fourier变换附录10 多项式处理函数附录10.1多项式处理函数名功能描述函数名功能描述conv 卷机与多项式乘法 polyfit 数据的多项式拟合deconv 因式分解与多项式乘法 polyval 多项式求值poly 求矩阵的特征多项式 polyvalm 多项式矩阵求值polyder 多项式求导 residue 部分分式展开polyeig 多项式特征值 roots 求多项式的根附录10.2数据插值函数名功能描述函数名功能描述griddata 数据网络的插值生成 interpft 一维插值(FFT方法)interp1 一维插值(查表) interpn 多维插值(查表)interp2 二维插值(查表) meshgrid 构造三维图形用x,y阵列interp3 三维插值(查表) spline 三次样条插值附录11 非线性数值方法函数名功能描述函数名功能描述dblquad 双重积分 odeget 获得微分方程求解的可选参数fmin 单变量最优化函数 odeset 设置微分方程求解的可选参数fmins 多变量最优化函数 quad 低阶数值积分方法ode45,ode23,ode113,ode15s,ode23s 微分方程数值解法 quad8 高阶数值积分方法odefile 对文件定义的微分方程求解附录12 稀疏矩阵函数附录12.1基本稀疏矩阵函数名功能描述函数名功能描述spdiags 稀疏对角矩阵 sprandn 稀疏正态分布随机矩阵speye 稀疏单位矩阵 sprandsym 稀疏对称随机矩阵sprand 稀疏均匀分布随机矩阵附录12.2稀疏矩阵转换函数名功能描述函数名功能描述find 查找非零元素下标 sparse 常规矩阵转换为稀疏矩阵full 稀疏矩阵转换为常规矩阵 spconvert 由外部格式引入稀疏矩阵附录12.3处理非零元素函数名功能描述函数名功能描述issparse 判断元素是否为稀疏矩阵 nzmax 允许的非零元素空间mmz 稀疏矩阵的非零元素个数 spalloc 为非零元素定位存储空间nonzeros 稀疏矩阵的非零元素 spfun 为非零元素定义处理函数附录12.4稀疏矩阵可视化函数名功能描述函数名功能描述gplot 绘制图论图形 spy 绘制稀疏矩阵结构附录12.5排序算法函数名功能描述函数名功能描述colmmd 列最小度排序 randperm 产生随机置换向量colperm 由非零元素的个数排序各列 symmd 对称最小度排序dmperm Dulmage-Mendelsohn分解 symrcm 反向Cuthill-McKee排序附录12.6范数、条件数函数名功能描述函数名功能描述condest 估算||*||1范数 normest 估算||*||2范数sprank 计算结构秩附录12.7特征值与奇异值函数名功能描述函数名功能描述eigs 求稀疏矩阵特征值和特征向量 svds 稀疏矩阵奇异值分解附录12.8其他函数名功能描述函数名功能描述spaugment 最小二乘算法形成 symbact 符号因子分解spparms 设置稀疏矩阵参数附录13 图形绘制附录13.1基本二维图形函数名功能描述函数名功能描述fill 填充二维多边形 polar 极坐标图形绘制loglog 全对数二维坐标绘制 semilogx x轴半对数坐标图形绘制plot 线性坐标图形绘制 semilogy y轴半对数坐标图形绘制附录13.2基本三维图形函数名功能描述函数名功能描述fill3 三维多边形填充 plot3 三维线或点型图绘制mesh 三维网格图形绘制 surf 三维表面图形绘制附录13.3三维颜色控制函数名功能描述函数名功能描述brighten 图形亮度调整 hidden 网格图的网格线开关设置caxis 坐标轴伪彩色设置 shading 设置渲染模式colormap 调色板设置附录13.4三维光照模型函数名功能描述函数名功能描述diffuse 图象漫射处理 surf1 带光照的三维表面绘制lighting 光照模式设置 surfnorm 曲面法线specular 设置镜面反射附录13.5标准调色板设置函数名功能描述函数名功能描述bone 带有蓝色调的灰色的调色板 hot 以黑红黄白为基色的调色板cool 以天蓝粉色为基色的调色板 hsv 色度饱和度亮度调色板copper 线性铜色调的调色板 pink 粉色色调的调色板flag 以红白蓝黑为基色的调色板 prism 光谱颜色表gray 线性灰度调色板附录13.6三维视点控制函数名功能描述函数名功能描述rotate3d 设置三维旋转开关 viewmtx 求视转换矩阵view 设置视点附录13.7坐标轴控制函数名功能描述函数名功能描述axis 坐标轴标度设置 hold 设置当前图形保护模式axes 坐标轴位置设置 subplot 将图形窗口分成几个区域box 坐标轴盒状显示 zoom 二维图形缩放grid 坐标网格线开关设置附录13.8图形注解函数名功能描述函数名功能描述colorbar 颜色条设置 xlabel 给图形的x轴加文字说明gtext 在鼠标位置加文字说明 ylabel 给图形的y轴加文字说明text 在图形上加文字说明 zlabel 给图形的z轴加文字说明title 给图形加标题附录13.9拷贝与打印函数名功能描述函数名功能描述print 打印图形或将图形存盘 orient 设置纸的方向orintopt 设置打印机为默认值附录14 特殊图形附录14.1特殊二维图形函数名功能描述函数名功能描述area 区域填充 feather 羽状条形图绘制bar 条形图绘制 fplot 给定函数绘制barh 水平条形图绘制 hist 直方图绘制bar3 3维条形图绘制 pareto pareto图绘制bar3h 3维水平条形图绘制 pie 饼状图绘制comet 彗星状轨迹绘制 stem 离散序列图形绘制errorbar 误差条形图绘制 stairs 梯形图绘制附录14.2等高线及其他二维图形函数名功能描述函数名功能描述contour 等高线绘制 pcolor 伪色绘制contourf 等高线填充绘制 quiver 有向图(箭头)绘制contour3 三维等高线绘制 voronoil voronoi图绘制clabel 等高线高程标志附录14.3特殊三维图形函数名功能描述函数名功能描述comet3 三维彗星状轨迹绘制 slice 切片图meshc 带等高线的三维网格绘制 surfc 带等高线的三维表面绘制meshz 带零平面的三维网格绘制 trisurf 表面图形的三角绘制stem2 杆图绘制 trimesh 网格图形的三角绘制quiver3 三维箭头(有向图)绘制 waterfall 瀑布型图形的绘制附录14.4图象显示与文件I/O函数名功能描述函数名功能描述brighten 图形色调亮化 image 图像显示colorbar 颜色条设置 imfinfo 图形文件信息colormap 调色板设置 imread 从文件读取图形contrast 灰度对比度设置 imwrite 保存图像附录14.5动画处理函数名功能描述函数名功能描述capture 屏幕抓取 movie 播放动画帧getframe 获取动画帧附录14.6实体模型函数名功能描述函数名功能描述cylinder 圆柱体生成 sphere 球体生成附录15 图形处理附录15.1图形窗口生成与控制函数名功能描述函数名功能描述clf 清除当前图形窗口 gcf 获取当前图形的窗口句柄close 关闭图形窗口 refresh 图形窗口刷新figure 生成图形窗口 shg 显示图形窗口附录15.2坐标轴建立与控制函数名功能描述函数名功能描述axes 坐标轴标度设置 gca 获得当前坐标轴句柄axis 坐标轴位置设置 hold 设置当前图形保护模式box 坐标轴盒状显示 ishold 返回hold的状态caxis 为彩色坐标轴刻度 subplot 将图形窗口分为几个区域cla 清除当前坐标轴附录15.3处理图形对象函数名功能描述函数名功能描述axes 坐标轴生成 surface 表面生成figure 图形窗口生成 text 文本生成image 图像生成 unicontrol 生成一个用户接口控制light 光源生成 uimenu 菜单生成line 线生成附录15.4图形函数名功能描述函数名功能描述copyobj 图像对象拷贝 gcbo 获得当前回调对象的句柄delete 对象删除 gco 获得当前对象的句柄drawnow 消除未解决的图像对象事件 get 获得对象属性findobj 查找对象 reset 重新设置对象属性gebf 获得当前回调窗口的句柄 set 设置对象属性附录16 GUI(图形用户接口)附录16.1GUI函数函数名功能描述函数名功能描述ginput 获取鼠标输入 uiresume 继续执行selectmoveresize 对象的选择、移动、大小设置、拷贝 uiwait 中断执行uicontrol 生成图形用户接口对象 waitgorbutterpress 等待按钮输入uimenu 生成菜单对象 waitfor 中断执行附录16.2GUI设计工具函数名功能描述函数名功能描述align 坐标轴与用户接口控制的对齐工具 menuedit 菜单编辑器cbedit 回调函数编辑器 propedit 属性编辑器guide GUI设计工具附录16.3对话框函数名功能描述函数名功能描述dialog 对话框生成 printdlg 打印对话框axlimdig 坐标轴设限对话框 questdlg 请求对话框errordlg 错误对话框 uigetfile 标准的打开文件对话框helpdlg 帮助对话框 uiputfile 标准的保存文件对话框inputdlg 输入对话框 uisetcolor 颜色选择对话框listdlg 列表选择对话框 uisetfont 字体选择对话框msgdlg 消息对话框 waitbar 等待条显示pagedlg 页位置对话框 warndlg 警告对话框附录16.4菜单函数名功能描述函数名功能描述makemenu 生成菜单结构 umtoggle 菜单对象选中状态切换menubar 设置菜单条属性 wimenu 生成window菜单项的子菜单附录16.5组按钮函数名功能描述函数名功能描述btndown 组按钮中的按钮按下 btnstate 查询按钮中的按钮状态btngroup 组按钮生成 btnup 组按钮中的按钮弹起btnpress 组按钮中的按钮按下管理附录16.6自定义窗口属性函数名功能描述函数名功能描述clruprop 清除用户自定义属性 setuprop 设置用户自定义属性getuprop 获取用户自定义属性附录16.7其他应用函数名功能描述函数名功能描述allchild 获取所有子对象 popupstr 获取弹出式菜单选中项的字符串edtext 坐标轴文本对象编辑 remapfig 改变窗口中对象的位置findall 查找所有对象 setptr 设置窗口指针getptr 获得窗口指针 setstatus 设置窗口中文本传状态getstatus 获取窗口中文本状态附录17 声音处理函数名功能描述函数名功能描述soond 将向量转换成声音 wavread 读。

Matlab源程序代码

Matlab源程序代码

正弦波的源程序:(一),用到的函数1,f2t函数function x=f2t(X)global dt df t f T N%x=f2t(X)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同并为2的整幂%本函数需要一个全局变量dt(时域取样间隔) X=[X(N/2+1:N),X(1:N/2)];x=ifft(X)/dt;end2,t2f函数。

function X=t2f(x)global dt df N t f T%X=t2f(x)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同,并为2的整幂。

%本函数需要一个全局变量dt(时域取样间隔) H=fft(x);X=[H(N/2+1:N),H(1:N/2)]*dt;end(二),主程序。

1,%(1)绘出正弦信号波形及频谱global dt df t f Nclose allk=input('取样点数=2^k, k取10左右');if isempty(k), k=10; endf0=input('f0=取1(kz)左右');if isempty(f0), f0=1; endN=2^k;dt=0.01; %msdf=1/(N*dt); %KHzT=N*dt; %截短时间Bs=N*df/2; %系统带宽f=[-Bs+df/2:df:Bs]; %频域横坐标t=[-T/2+dt/2:dt:T/2]; %时域横坐标s=sin(2*pi*f0*t); %输入的正弦信号S=t2f(s); %S是s的傅氏变换a=f2t(S); %a是S的傅氏反变换a=real(a);as=abs(S);subplot(2,1,1) %输出的频谱plot(f,as,'b');gridaxis([-2*f0,+2*f0,min(as),max(as)])xlabel('f (KHz)')ylabel('|S(f)| (V/KHz)') %figure(2)subplot(2,1,2)plot(t,a,'black') %输出信号波形画图gridaxis([-2/f0,+2/f0,-1.5,1.5])xlabel('t(ms)')ylabel('a(t)(V)')gtext('频谱图')最佳基带系统的源程序:(一),用到的函数f2t函数和t2f函数。

图论算法及Matlab程序代码

图论算法及Matlab程序代码

图论算法及其MATLAB 程序代码求赋权图G = (V , E , F )中任意两点间的最短路的Warshall-Floyd 算法:设A = (a ij )n ×n 为赋权图G = (V , E , F )的矩阵, 当v i v j ∈E 时a ij = F (v i v j ), 否则取a ii =0, a ij = +∞(i ≠j ), d ij 表示从v i 到v j 点的距离, r ij 表示从v i 到v j 点的最短路中一个点的编号.① 赋初值. 对所有i , j , d ij = a ij , r ij = j . k = 1. 转向②② 更新d ij , r ij . 对所有i , j , 若d ik + d k j <d ij , 则令d ij = d ik + d k j , r ij = k , 转向③.③ 终止判断. 若d ii <0, 则存在一条含有顶点v i 的负回路, 终止; 或者k = n 终止; 否则令k = k + 1, 转向②.最短路线可由r ij 得到.例1 求图6-4中任意两点间的最短路.解:用Warshall-Floyd 算法, MATLAB 程序代码如下:n=8;A=[0 2 8 1 Inf Inf Inf Inf2 0 6 Inf 1 Inf Inf Inf8 6 0 7 5 1 2 Inf1 Inf 7 0 Inf Inf 9 InfInf 1 5 Inf 0 3 Inf 8Inf Inf 1 Inf 3 0 4 6Inf Inf 2 9 Inf 4 0 3Inf Inf Inf Inf 8 6 3 0]; % MATLAB 中, Inf 表示∞D=A; %赋初值for (i=1:n)for (j=1:n)R(i,j)=j;end ;end %赋路径初值for (k=1:n)for (i=1:n)for (j=1:n)if (D(i,k)+D(k,j)<D(i,j))D(i,j)=D(i,k)+D(k,j); %更新dijR(i,j)=k;end ;end ;end %更新rijk %显示迭代步数D %显示每步迭代后的路长R %显示每步迭代后的路径pd=0;for i=1:n %含有负权时if (D(i,i)<0)pd=1;break ;end ;end %存在一条含有顶点vi 的负回路if (pd)break ;end %存在一条负回路, 终止程序end %程序结束图6-4Kruskal避圈法:将图G中的边按权数从小到大逐条考察, 按不构成圈的原则加入到T 中(若有选择时, 不同的选择可能会导致最后生成树的权数不同), 直到q (T ) = p (G ) − 1为止, 即T的边数= G的顶点数− 1为止.Kruskal避圈法的MATLAB程序代码如下:n=8;A=[0 2 8 1 0 0 0 02 0 6 0 1 0 0 08 6 0 7 5 1 2 01 0 7 0 0 0 9 00 1 5 0 0 3 0 80 0 1 0 3 0 4 60 0 2 9 0 4 0 30 0 0 0 8 6 3 0];k=1; %记录A中不同正数的个数for(i=1:n-1)for(j=i+1:n) %此循环是查找A中所有不同的正数if(A(i,j)>0)x(k)=A(i,j); %数组x记录A中不同的正数kk=1; %临时变量for(s=1:k-1)if(x(k)==x(s))kk=0;break;end;end%排除相同的正数k=k+kk;end;end;endk=k-1 %显示A中所有不同正数的个数for(i=1:k-1)for(j=i+1:k) %将x中不同的正数从小到大排序if(x(j)<x(i))xx=x(j);x(j)=x(i);x(i)=xx;end;end;endT(n,n)=0; %将矩阵T中所有的元素赋值为0q=0; %记录加入到树T中的边数for(s=1:k)if(q==n)break;end%获得最小生成树T, 算法终止for(i=1:n-1)for(j=i+1:n)if (A(i,j)==x(s))T(i,j)=x(s);T(j,i)=x(s); %加入边到树T中TT=T; %临时记录Twhile(1)pd=1;%砍掉TT中所有的树枝for(y=1:n)kk=0;for(z=1:n)if(TT(y,z)>0)kk=kk+1;zz=z;end;end%寻找TT中的树枝if(kk==1)TT(y,zz)=0;TT(zz,y)=0;pd=0;end;end%砍掉TT中的树枝if(pd)break;end;end%已砍掉了TT中所有的树枝pd=0;%判断TT中是否有圈for(y=1:n-1)for(z=y+1:n)if(TT(y,z)>0)pd=1;break;end;end;endif(pd)T(i,j)=0;T(j,i)=0;%假如TT中有圈else q=q+1;end;end;end;end;endT %显示近似最小生成树T, 程序结束求二部图G的最大匹配的算法(匈牙利算法), 其基本思想是:从G的任意匹配M开始, 对X中所有M的非饱和点, 寻找M−增广路. 若不存在M−增广路, 则M为最大匹配; 若存在M−增广路P, 则将P中M与非M的边互换得到比M多一边的匹配M1 , 再对M1重复上述过程.设G = ( X, Y, E )为二部图, 其中X = {x1, x2, … , x n }, Y = { y1, y2, … , y n}. 任取G的一初始匹配M (如任取e∈E, 则M = {e}是一个匹配).①令S = φ , T = φ , 转向②.②若M饱和X \S的所有点, 则M是二部图G的最大匹配. 否则, 任取M的非饱和点u∈X \ S , 令S = S ∪{ u }, 转向③.③记N (S ) = {v | u∈S, uv∈E}. 若N (S ) = T, 转向②. 否则取y∈N (S ) \T. 若y是M 的饱和点, 转向④, 否则转向⑤.④设x y∈M, 则令S = S ∪{ x }, T = T ∪{ y }, 转向③.⑤u −y路是M−增广路, 设为P, 并令M = M⊕P, 转向①. 这里M⊕P = M∪P \M∩P, 是对称差.由于计算M−增广路P比较麻烦, 因此将迭代步骤改为:①将X中M的所有非饱和点(不是M中某条边的端点)都给以标号0和标记*, 转向②.②若X中所有有标号的点都已去掉了标记*, 则M是G的最大匹配. 否则任取X中一个既有标号又有标记*的点x i , 去掉x i的标记*, 转向③.③找出在G中所有与x i邻接的点y j (即x i y j∈E ), 若所有这样的y j都已有标号, 则转向②, 否则转向④.④对与x i邻接且尚未给标号的y j都给定标号i. 若所有的y j都是M的饱和点, 则转向⑤, 否则逆向返回. 即由其中M的任一个非饱和点y j的标号i找到x i, 再由x i的标号k找到y k , … , 最后由y t的标号s找到标号为0的x s时结束, 获得M−增广路x s y t…x i y j, 记P = {x s y t, …, x i y j }, 重新记M为M⊕P, 转向①.⑤将y j在M中与之邻接的点x k (即x k y j∈M), 给以标号j和标记*, 转向②.例1求图6-9中所示的二部图G的最大匹配.图6-9匈牙利算法的MATLAB程序代码如下:m=5;n=5;A=[0 1 1 0 01 1 0 1 10 1 1 0 00 1 1 0 00 0 0 1 1];M(m,n)=0;for(i=1:m)for(j=1:n)if(A(i,j))M(i,j)=1;break;end;end%求初始匹配Mif(M(i,j))break;end;end%获得仅含一条边的初始匹配Mwhile(1)for(i=1:m)x(i)=0;end%将记录X中点的标号和标记*for(i=1:n)y(i)=0;end%将记录Y中点的标号和标记*for(i=1:m)pd=1;%寻找X中M的所有非饱和点for(j=1:n)if(M(i,j))pd=0;end;endif(pd)x(i)=-n-1;end;end%将X中M的所有非饱和点都给以标号0和标记*, 程序中用n+1表示0标号, 标号为负数时表示标记*pd=0;while(1)xi=0;for(i=1:m)if(x(i)<0)xi=i;break;end;end%假如X中存在一个既有标号又有标记*的点, 则任取X中一个既有标号又有标记*的点xiif(xi==0)pd=1;break;end%假如X中所有有标号的点都已去掉了标记*, 算法终止x(xi)=x(xi)*(-1); %去掉xi的标记*k=1;for(j=1:n)if(A(xi,j)&y(j)==0)y(j)=xi;yy(k)=j;k=k+1;end;end%对与xi邻接且尚未给标号的yj都给以标号iif(k>1)k=k-1;for(j=1:k)pdd=1;for(i=1:m)if(M(i,yy(j)))x(i)=-yy(j);pdd=0;break;end;end%将yj在M中与之邻接的点xk (即xkyj∈M), 给以标号j和标记*if(pdd)break;end;endif(pdd)k=1;j=yy(j); %yj不是M的饱和点while(1)P(k,2)=j;P(k,1)=y(j);j=abs(x(y(j))); %任取M的一个非饱和点yj, 逆向返回if(j==n+1)break;end%找到X中标号为0的点时结束, 获得M-增广路Pk=k+1;endfor(i=1:k)if(M(P(i,1),P(i,2)))M(P(i,1),P(i,2))=0; %将匹配M在增广路P中出现的边去掉else M(P(i,1),P(i,2))=1;end;end%将增广路P中没有在匹配M中出现的边加入到匹配M中break;end;end;endif(pd)break;end;end%假如X中所有有标号的点都已去掉了标记*, 算法终止M %显示最大匹配M, 程序结束利用可行点标记求最佳匹配的算法步骤如下:设G = ( X , Y , E , F )为完备的二部赋权图, L 是其一个初始可行点标记, 通常取.,,0)(},|)(max{)(Y y X x y L Y y xy F x L ∈∈ =∈= M 是G L 的一个匹配. ① 若X 的每个点都是M 的饱和点, 则M 是最佳匹配. 否则取M 的非饱和点u ∈X , 令S = {u }, T = φ , 转向②.② 记N L (S ) = {v | u ∈S , uv ∈E L }. 若N L ( S ) = T , 则G L 没有完美匹配, 转向③. 否则转向④.③ 调整可行点标记, 计算a L = min { L ( x ) + L ( y ) − F (x y ) | x ∈S , y ∈Y \T }.由此得新的可行顶点标记H (v ) =,,),(,)(,)(T v S v v L a v L a v L L L ∈∈+−令L = H , G L = G H , 重新给出G L 的一个匹配M , 转向①.④ 取y ∈N L ( S ) \T , 若y 是M 的饱和点, 转向⑤. 否则, 转向⑥.⑤ 设x y ∈M , 则令S = S ∪{ x }, T = T ∪{ y }, 转向②.⑥ 在G L 中的u − y 路是M −增广路, 记为P , 并令 M = M ⊕P , 转向①.利用可行点标记求最佳匹配算法的MATLAB 程序代码如下:n=4;A=[4 5 5 12 2 4 64 2 3 35 0 2 1];for (i=1:n)L(i,1)=0;L(i,2)=0;endfor (i=1:n)for (j=1:n)if (L(i,1)<A(i,j))L(i,1)=A(i,j);end ; %初始可行点标记LM(i,j)=0;end ;endfor (i=1:n)for (j=1:n) %生成子图Glif (L(i,1)+L(j,2)==A(i,j))Gl(i,j)=1;else Gl(i,j)=0;end ;end ;endii=0;jj=0;for (i=1:n)for (j=1:n)if (Gl(i,j))ii=i;jj=j;break ;end ;endif (ii)break ;end ;end %获得仅含Gl 的一条边的初始匹配MM(ii,jj)=1;for (i=1:n)S(i)=0;T(i)=0;NlS(i)=0;endwhile (1)for (i=1:n)k=1;否则.for(j=1:n)if(M(i,j))k=0;break;end;endif(k)break;end;endif(k==0)break;end%获得最佳匹配M, 算法终止S(1)=i;jss=1;jst=0;%S={xi}, T=φwhile(1)jsn=0;for(i=1:jss)for(j=1:n)if(Gl(S(i),j))jsn=jsn+1;NlS(jsn)=j;%NL(S)={v|u∈S,uv∈EL}for(k=1:jsn-1)if(NlS(k)==j)jsn=jsn-1;end;end;end;end;endif(jsn==jst)pd=1; %判断NL(S)=T?for(j=1:jsn)if(NlS(j)~=T(j))pd=0;break;end;end;endif(jsn==jst&pd)al=Inf; %如果NL(S)=T, 计算al, Inf为∞for(i=1:jss)for(j=1:n)pd=1;for(k=1:jst)if(T(k)==j)pd=0;break;end;endif(pd&al>L(S(i),1)+L(j,2)-A(S(i),j))al=L(S(i),1)+L(j,2)-A(S(i),j);end;end;end for(i=1:jss)L(S(i),1)=L(S(i),1)-al;end%调整可行点标记for(j=1:jst)L(T(j),2)=L(T(j),2)+al;end%调整可行点标记for(i=1:n)for(j=1:n) %生成子图GLif(L(i,1)+L(j,2)==A(i,j))Gl(i,j)=1;else Gl(i,j)=0;endM(i,j)=0;k=0;end;endii=0;jj=0;for(i=1:n)for(j=1:n)if(Gl(i,j))ii=i;jj=j;break;end;endif(ii)break;end;end%获得仅含Gl的一条边的初始匹配MM(ii,jj)=1;breakelse%NL(S)≠Tfor(j=1:jsn)pd=1;%取y∈NL(S)\Tfor(k=1:jst)if(T(k)==NlS(j))pd=0;break;end;endif(pd)jj=j;break;end;endpd=0;%判断y是否为M的饱和点for(i=1:n)if(M(i,NlS(jj)))pd=1;ii=i;break;end;endif(pd)jss=jss+1;S(jss)=ii;jst=jst+1;T(jst)=NlS(jj); %S=S∪{x}, T=T∪{y}else%获得Gl的一条M-增广路, 调整匹配Mfor(k=1:jst)M(S(k),T(k))=1;M(S(k+1),T(k))=0;endif(jst==0)k=0;endM(S(k+1),NlS(jj))=1;break;end;end;end;endMaxZjpp=0;for(i=1:n)for(j=1:n)if(M(i,j))MaxZjpp=MaxZjpp+A(i,j);end;end;endM %显示最佳匹配MMaxZjpp %显示最佳匹配M的权, 程序结束从一个可行流f 开始, 求最大流的Ford--Fulkerson 标号算法的基本步骤:⑴ 标号过程① 给发点v s 以标号(+, +∞) , δ s = +∞.② 选择一个已标号的点x , 对于x 的所有未给标号的邻接点y , 按下列规则处理:当yx ∈E , 且f yx >0时, 令δ y = min { f yx , δ x }, 并给y 以标号 ( x − , δ y ).当xy ∈E , 且f xy <C xy 时, 令δ y = min {C xy − f xy , δ x }, 并给y 以标号 ( x + , δ y ). ③ 重复②直到收点v t 被标号或不再有点可标号时为止. 若v t 得到标号, 说明存在一条可增广链, 转⑵调整过程; 若v t 未得到标号, 标号过程已无法进行时, 说明f 已经是最大流.⑵ 调整过程④ 决定调整量δ =δ vt , 令u = v t .⑤ 若u 点标号为( v +, δ u ), 则以f vu + δ 代替f vu ; 若u 点标号为( v −, δ u ), 则以 f vu − δ 代替f vu .⑥ 若v = v s , 则去掉所有标号转⑴重新标号; 否则令u = v , 转⑤.算法终止后, 令已有标号的点集为S , 则割集(S , S c )为最小割, 从而W f = C (S , S c ). 例1 求图6-19所示网络的最大流.利用Ford--Fulkerson 标号法求最大流算法的MATLAB 程序代码如下:n=8;C=[0 5 4 3 0 0 0 00 0 0 0 5 3 0 00 0 0 0 0 3 2 00 0 0 0 0 0 2 00 0 0 0 0 0 0 40 0 0 0 0 0 0 30 0 0 0 0 0 0 50 0 0 0 0 0 0 0]; %弧容量for (i=1:n)for (j=1:n)f(i,j)=0;end ;end %取初始可行流f 为零流for (i=1:n)No(i)=0;d(i)=0;end %No,d 记录标号图6-19while(1)No(1)=n+1;d(1)=Inf; %给发点vs标号while(1)pd=1;%标号过程for(i=1:n)if(No(i)) %选择一个已标号的点vifor(j=1:n)if(No(j)==0&f(i,j)<C(i,j)) %对于未给标号的点vj, 当vivj为非饱和弧时No(j)=i;d(j)=C(i,j)-f(i,j);pd=0;if(d(j)>d(i))d(j)=d(i);endelseif(No(j)==0&f(j,i)>0) %对于未给标号的点vj, 当vjvi为非零流弧时No(j)=-i;d(j)=f(j,i);pd=0;if(d(j)>d(i))d(j)=d(i);end;end;end;end;endif(No(n)|pd)break;end;end%若收点vt得到标号或者无法标号, 终止标号过程if(pd)break;end%vt未得到标号, f已是最大流, 算法终止dvt=d(n);t=n; %进入调整过程, dvt表示调整量while(1)if(No(t)>0)f(No(t),t)=f(No(t),t)+dvt; %前向弧调整elseif(No(t)<0)f(No(t),t)=f(No(t),t)-dvt;end%后向弧调整if(No(t)==1)for(i=1:n)No(i)=0;d(i)=0; end;break;end%当t的标号为vs时, 终止调整过程t=No(t);end;end; %继续调整前一段弧上的流fwf=0;for(j=1:n)wf=wf+f(1,j);end%计算最大流量f %显示最大流wf %显示最大流量No %显示标号, 由此可得最小割, 程序结束设网络G = ( V , E , C ), 取初始可行流 f 为零流, 求解最小费用流问题的迭代步骤: ① 构造有向赋权图 G f = ( V , E f , F ), 对于任意的v i v j ∈E , E f , F 的定义如下:当f ij = 0时, v i v j ∈E f , F ( v i v j ) = b ij ;当f ij = C ij 时, v j v i ∈E f , F ( v j v i ) = −b ij ;当0< f ij <C ij 时, v i v j ∈E f , F ( v i v j ) = b ij , v j v i ∈E f , F ( v j v i ) = −b ij .转向②.② 求出有向赋权图G f = (V , E f , F )中发点v s 到收点v t 的最短路µ , 若最短路µ存在转向③; 否则f 是所求的最小费用最大流, 停止.③ 增流. 同求最大流的方法一样, 重述如下:令.,,,−+∈∈ −=µµδj i j i ij ij ij ij v v v v f f C δ = min {δ ij | v i v j ∈µ}, 重新定义流f = { f ij }为 f ij =,,,,−+∈∈ −+µµδδj i j i ijij ij v v v v f f f如果W f 大于或等于预定的流量值, 则适当减少δ 值, 使W f 等于预定的流量值, 那么 f 是所求的最小费用流, 停止; 否则转向①.求解含有负权的有向赋权图G = ( V , E , F )中某一点到其它各点最短路的Ford 算法. 当v i v j ∈E 时记w ij = F (v i v j ), 否则取w ii =0, w ij = +∞(i ≠j ). v 1到v i 的最短路长记为π ( i ), v 1到v i 的最短路中v i 的前一个点记为θ ( i ). Ford 算法的迭代步骤:① 赋初值π (1) = 0, π ( i ) = +∞, θ ( i ) = i , i = 2, 3, … , n .② 更新π ( i ), θ ( i ). 对于i = 2, 3, … , n 和j = 1, 2, … , n , 如果π ( i )<π ( j ) + w ji , 则令π ( i ) = π ( j ) , θ ( i ) = j . ③ 终止判断:若所有的π ( i )都无变化, 停止; 否则转向②. 在算法的每一步中, π ( i )都是从v 1到v i 的最短路长度的上界. 若不存在负长回路, 则从v 1到v i 的最短路长度是π ( i )的下界, 经过n −1次迭代后π ( i )将保持不变. 若在第n 次迭代后π ( i )仍在变化时, 说明存在负长回路.其它.例2 在图6-22所示运输网络上, 求s 到t 的最小费用最大流, 括号内为(C ij , b ij ).求最小费用最大流算法的MATLAB 程序代码如下:n=5;C=[0 15 16 0 00 0 0 13 140 11 0 17 00 0 0 0 80 0 0 0 0]; %弧容量b=[0 4 1 0 00 0 0 6 10 2 0 3 00 0 0 0 20 0 0 0 0]; %弧上单位流量的费用wf=0;wf0=Inf; %wf 表示最大流量, wf0表示预定的流量值for (i=1:n)for (j=1:n)f(i,j)=0;end ;end %取初始可行流f 为零流while (1)for (i=1:n)for (j=1:n)if (j~=i)a(i,j)=Inf;end ;end ;end %构造有向赋权图for (i=1:n)for (j=1:n)if (C(i,j)>0&f(i,j)==0)a(i,j)=b(i,j);elseif (C(i,j)>0&f(i,j)==C(i,j))a(j,i)=-b(i,j);elseif (C(i,j)>0)a(i,j)=b(i,j);a(j,i)=-b(i,j);end ;end ;endfor (i=2:n)p(i)=Inf;s(i)=i;end %用Ford 算法求最短路, 赋初值for (k=1:n)pd=1; %求有向赋权图中vs 到vt 的最短路for (i=2:n)for (j=1:n)if (p(i)>p(j)+a(j,i))p(i)=p(j)+a(j,i);s(i)=j;pd=0;end ;end ;endif (pd)break ;end ;end %求最短路的Ford 算法结束if (p(n)==Inf)break ;end %不存在vs 到vt 的最短路, 算法终止. 注意在求最小费用最大流时构造有向赋权图中不会含负权回路, 所以不会出现k=ndvt=Inf;t=n; %进入调整过程, dvt 表示调整量while (1) %计算调整量if (a(s(t),t)>0)dvtt=C(s(t),t)-f(s(t),t); %前向弧调整量elseif (a(s(t),t)<0)dvtt=f(t,s(t));end %后向弧调整量if (dvt>dvtt)dvt=dvtt;endif (s(t)==1)break ;end %当t 的标号为vs 时, 终止计算调整量t=s(t);end %继续调整前一段弧上的流fpd=0;if (wf+dvt>=wf0)dvt=wf0-wf;pd=1;end %如果最大流量大于或等于预定的流量值t=n;while (1) %调整过程if (a(s(t),t)>0)f(s(t),t)=f(s(t),t)+dvt; %前向弧调整elseif (a(s(t),t)<0)f(t,s(t))=f(t,s(t))-dvt;end %后向弧调整if (s(t)==1)break ;end %当t 的标号为vs 时, 终止调整过程t=s(t);endif (pd)break ;end %如果最大流量达到预定的流量值wf=0; for (j=1:n)wf=wf+f(1,j);end ;end %计算最大流量zwf=0;for (i=1:n)for (j=1:n)zwf=zwf+b(i,j)*f(i,j);end ;end %计算最小费用f %显示最小费用最大流图6-22wf %显示最小费用最大流量zwf %显示最小费用, 程序结束。

Matlab排序算法-遍历排序、冒泡排序

Matlab排序算法-遍历排序、冒泡排序

Matlab排序算法-遍历排序、冒泡排序排序是数据处理中⼗分常见的基本算法,本⽂介绍三种简单的排序算法:遍历排序、冒泡排序及优化后的冒泡排序。

1.1、遍历排序function y = easy_sort(x)% 遍历排序法% 1)从第⼀个数开始, 将其与剩下的数依次对⽐, 若⽐其⼩, 则两数交换位置,% 得到最⼩数保存到x(1)的位置% 2)再从第⼆个数开始, 将其与剩下的数依次对⽐, 若⽐其⼩, 则两数交换位置,% 得到次⼩数保存到x(2)的位置% 3)以此类推, 进⾏⽐较x_len = length(x);for i = 1:1:x_lenfor j = i:1:x_lenif (x(i) > x(j))[x(i), x(j)] = swap(x(i), x(j));endenddisp([num2str(i), '. Sort: x = ', num2str(x)]);endy = x;end1.2、冒泡排序function y = bubble_sort(x)% 冒泡排序法% 1)第⼀次循环, 确定第⼀个数: 从最后⼀个数开始, ⽐较相邻两数, 将较⼩者往前排,% 依次向前两两⽐较, 最后,第⼀个数为最⼩值% 2) 第⼆次循环, 确定第⼆个数: 再从最后⼀个数开始,依次向前两两⽐较,直到第⼆个数,% 则第⼆个数为次⼩值% 3)依次进⾏, 直到确定倒数第⼆个数x_len = length(x);for i = 1:1:(x_len-1)for j = x_len:-1:(i+1)if (x(j) < x(j-1))[x(j), x(j-1)] = swap(x(j), x(j-1));endenddisp([num2str(i), '. Sort: x = ', num2str(x)]);endy = x;end1.3、冒泡排序优化function y = bubble_sort_optim(x)% 优化后的冒泡排序法% 1)第⼀次循环, 确定第⼀个数: 从最后⼀个数开始, ⽐较相邻两数, 将较⼩者往前排,% 依次向前两两⽐较, 最后,第⼀个数为最⼩值% 2) 第⼆次循环, 确定第⼆个数: 再从最后⼀个数开始,依次向前两两⽐较,直到第⼆个数,% 则第⼆个数为次⼩值% 3)依次进⾏, 当某次循环不再冒泡, 即不再有交换时, 停⽌循环x_len = length(x);flag = 1;for i = 1:1:(x_len-1)if flagflag = 0; %若flag为0则代表已经排好序了, 不⽤继续循环for j = x_len:-1:(i+1)if (x(j) < x(j-1))[x(j), x(j-1)] = swap(x(j), x(j-1));flag = 1; %有交换, 说明还需要继续循环endenddisp([num2str(i), '. Sort: x = ', num2str(x)]);endendy = x;end1.4、两数交换function [a, b] = swap(x, y)% 两数交换a = y;b = x;end2、调⽤三种排序算法% main.mclc;clear;x = randperm(9); %随机排序1~9disp(['Before Sort: x = ', num2str(x)]);%% 1.遍历排序disp('------------------------------');y = easy_sort(x);disp(['Easy Sort: x = ', num2str(y)]);%% 2.冒泡排序disp('------------------------------');y = bubble_sort(x);disp(['Bubble Sort: x = ', num2str(y)]);%% 3.冒泡排序优化disp('------------------------------');y = bubble_sort_optim(x);disp(['Bubble Sort: x = ', num2str(y)]);3、排序结果对⽐Before Sort: x = 2 1 3 4 6 8 5 7 9------------------------------1. Sort: x = 1 2 3 4 6 8 5 7 92. Sort: x = 1 2 3 4 6 8 5 7 93. Sort: x = 1 2 3 4 6 8 5 7 94. Sort: x = 1 2 3 4 6 8 5 7 95. Sort: x = 1 2 3 4 5 8 6 7 96. Sort: x = 1 2 3 4 5 6 8 7 97. Sort: x = 1 2 3 4 5 6 7 8 98. Sort: x = 1 2 3 4 5 6 7 8 9Easy Sort: x = 1 2 3 4 5 6 7 8 9------------------------------1. Sort: x = 1 2 3 4 5 6 8 7 92. Sort: x = 1 2 3 4 5 6 7 8 93. Sort: x = 1 2 3 4 5 6 7 8 94. Sort: x = 1 2 3 4 5 6 7 8 95. Sort: x = 1 2 3 4 5 6 7 8 96. Sort: x = 1 2 3 4 5 6 7 8 97. Sort: x = 1 2 3 4 5 6 7 8 98. Sort: x = 1 2 3 4 5 6 7 8 9Bubble Sort: x = 1 2 3 4 5 6 7 8 9------------------------------1. Sort: x = 1 2 3 4 5 6 8 7 92. Sort: x = 1 2 3 4 5 6 7 8 93. Sort: x = 1 2 3 4 5 6 7 8 9Bubble Sort: x = 1 2 3 4 5 6 7 8 9如你有所收获,欢迎⽤微信扫⼀扫进⾏打赏,赏⾦随意。

matlab遍历算法

matlab遍历算法

matlab遍历算法摘要:一、引言二、MATLAB 简介三、MATLAB 中的遍历算法1.线性扫描2.树形搜索3.深度优先搜索4.广度优先搜索四、遍历算法的应用1.文件遍历2.图像处理3.网络爬虫五、MATLAB 遍历算法的优势与局限六、总结正文:一、引言MATLAB 是一种广泛应用于科学计算和工程设计的编程语言,具有丰富的函数库和强大的绘图功能。

在许多领域中,遍历算法是解决问题的重要方法。

本文将介绍MATLAB 中的遍历算法,并探讨其在不同领域的应用。

二、MATLAB 简介MATLAB 是一种基于矩阵计算的编程语言,由美国MathWorks 公司开发。

它具有丰富的函数库和强大的绘图功能,广泛应用于科学计算、数据分析、图像处理、控制系统等领域。

MATLAB 采用类似于C 语言的语法结构,易于学习和使用。

三、MATLAB 中的遍历算法遍历算法是解决问题的重要方法,MATLAB 提供了多种遍历算法。

以下将介绍四种常见的遍历算法:1.线性扫描线性扫描是一种简单的遍历方法,适用于一维数据结构的处理。

例如,我们可以使用for 循环来遍历一个一维数组。

2.树形搜索树形搜索是一种层次化的遍历方法,适用于处理具有层次结构的数据。

例如,我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来遍历一个树形结构。

3.深度优先搜索深度优先搜索(DFS)是一种沿着一条路径一直向下遍历的方法。

在MATLAB 中,我们可以使用递归函数来实现DFS。

例如,对于一个图形结构,我们可以使用DFS 来遍历所有节点。

4.广度优先搜索广度优先搜索(BFS)是一种逐层遍历的方法。

在MATLAB 中,我们可以使用队列数据结构来实现BFS。

例如,对于一个图形结构,我们可以使用BFS 来遍历所有节点。

四、遍历算法的应用1.文件遍历在计算机科学中,遍历文件系统中的文件是常见的需求。

MATLAB 可以很容易地实现文件遍历,以便对文件进行处理、分析和统计。

(完整word版)用MATLAB实现计算器程序源代码(word文档良心出品)

(完整word版)用MATLAB实现计算器程序源代码(word文档良心出品)

function varargout = caculator(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @caculator_OpeningFcn, ...'gui_OutputFcn', @caculator_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});endfunction caculator_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;set(handles.edit1,'string','0');set(handles.edit5,'string','0');guidata(hObject, handles);function varargout = caculator_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;function edit1_Callback(hObject, eventdata, handles)function edit1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction edit2_Callback(hObject, eventdata, handles)function edit2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction edit3_Callback(hObject, eventdata, handles)function edit3_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction pushbutton1_Callback(hObject, eventdata, handles)handles.num1=strcat(get(handles.edit1,'string'),'+');set(handles.edit1,'string',handles.num1);guidata(hObject,handles);function pushbutton2_Callback(hObject, eventdata, handles) handles.num2=strcat(get(handles.edit1,'string'),'-');set(handles.edit1,'string',handles.num2);guidata(hObject,handles);function pushbutton3_Callback(hObject, eventdata, handles) handles.num3=strcat(get(handles.edit1,'string'),'*');set(handles.edit1,'string',handles.num3);guidata(hObject,handles);function pushbutton4_Callback(hObject, eventdata, handles) handles.num4=strcat(get(handles.edit1,'string'),'/');set(handles.edit1,'string',handles.num4);guidata(hObject,handles);function pushbutton_1_Callback(hObject, eventdata, handles) handles.shu1=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu1=strcat(handles.yuanshu,handles.shu1);if length(handles.shu1)<2;elseif (length(handles.shu1)>=2)&&(handles.shu1(end-1)==')')&& (handles.shu1(1)=='l')temp=handles.shu1(end);handles.shu1(end)=handles.shu1(end-1);handles.shu1(end-1)=temp;endset(handles.edit1,'string',handles.shu1);guidata(hObject, handles);function pushbutton_2_Callback(hObject, eventdata, handles) handles.shu2=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu2=strcat(handles.yuanshu,handles.shu2);if length(handles.shu2)<2;elseif (length(handles.shu2)>=2)&&(handles.shu2(end-1)==')')&& (handles.shu2(1)=='l')temp=handles.shu2(end);handles.shu2(end)=handles.shu2(end-1);handles.shu2(end-1)=temp;endset(handles.edit1,'string',handles.shu2);guidata(hObject, handles);function pushbutton_4_Callback(hObject, eventdata, handles) handles.shu4=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu4=strcat(handles.yuanshu,handles.shu4);if length(handles.shu4)<2;elseif (length(handles.shu4)>=2)&&(handles.shu4(end-1)==')')&& (handles.shu4(1)=='l')temp=handles.shu4(end);handles.shu4(end)=handles.shu4(end-1);handles.shu4(end-1)=temp;endset(handles.edit1,'string',handles.shu4);guidata(hObject, handles);function pushbutton_3_Callback(hObject, eventdata, handles) handles.shu3=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu3=strcat(handles.yuanshu,handles.shu3);if length(handles.shu3)<2;elseif (length(handles.shu3)>=2)&&(handles.shu3(end-1)==')')&& (handles.shu3(1)=='l')temp=handles.shu3(end);handles.shu3(end)=handles.shu3(end-1);handles.shu3(end-1)=temp;endset(handles.edit1,'string',handles.shu3);guidata(hObject, handles);function pushbutton_5_Callback(hObject, eventdata, handles) handles.shu5=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu5=strcat(handles.yuanshu,handles.shu5);if length(handles.shu5)<2;elseif (length(handles.shu5)>=2)&&(handles.shu5(end-1)==')')&& (handles.shu5(1)=='l')temp=handles.shu5(end);handles.shu5(end)=handles.shu5(end-1);handles.shu5(end-1)=temp;endset(handles.edit1,'string',handles.shu5);guidata(hObject, handles);function pushbutton_9_Callback(hObject, eventdata, handles) handles.shu9=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu9=strcat(handles.yuanshu,handles.shu9);if length(handles.shu9)<2;elseif (length(handles.shu9)>=2)&&(handles.shu9(end-1)==')')&& (handles.shu9(1)=='l')temp=handles.shu9(end);handles.shu9(end)=handles.shu9(end-1);handles.shu9(end-1)=temp;endset(handles.edit1,'string',handles.shu9);guidata(hObject, handles);function pushbutton_7_Callback(hObject, eventdata, handles) handles.shu7=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu7=strcat(handles.yuanshu,handles.shu7);if length(handles.shu7)<2;elseif (length(handles.shu7)>=2)&&(handles.shu7(end-1)==')')&& (handles.shu7(1)=='l')temp=handles.shu7(end);handles.shu7(end)=handles.shu7(end-1);handles.shu7(end-1)=temp;endset(handles.edit1,'string',handles.shu7);guidata(hObject, handles);function pushbutton_8_Callback(hObject, eventdata, handles) handles.shu8=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu8=strcat(handles.yuanshu,handles.shu8);if length(handles.shu8)<2;elseif (length(handles.shu8)>=2)&&(handles.shu8(end-1)==')')&& (handles.shu8(1)=='l')temp=handles.shu8(end);handles.shu8(end)=handles.shu8(end-1);handles.shu8(end-1)=temp;endset(handles.edit1,'string',handles.shu8);guidata(hObject, handles);function pushbutton_6_Callback(hObject, eventdata, handles) handles.shu6=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu6=strcat(handles.yuanshu,handles.shu6);if length(handles.shu6)<2;elseif (length(handles.shu6)>=2)&&(handles.shu6(end-1)==')')&& (handles.shu6(1)=='l')temp=handles.shu6(end);handles.shu6(end)=handles.shu6(end-1);handles.shu6(end-1)=temp;endset(handles.edit1,'string',handles.shu6);guidata(hObject, handles);function pushbutton18_Callback(hObject, eventdata, handles) handles.jieguo=get(handles.edit1,'string');handles.jieguo=strcat('=',handles.jieguo);eval(['handles.result''1' handles.jieguo]);set(handles.edit5,'string',num2str(handles.result1));guidata(hObject,handles);function pushbutton_0_Callback(hObject, eventdata, handles) handles.shu0=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu0=strcat(handles.yuanshu,handles.shu0);if length(handles.shu0)<2;elseif (length(handles.shu0)>=2)&&(handles.shu0(end-1)==')')&& (handles.shu0(1)=='l')temp=handles.shu0(end);handles.shu0(end)=handles.shu0(end-1);handles.shu0(end-1)=temp;endset(handles.edit1,'string',handles.shu0);guidata(hObject, handles);function pushbutton20_Callback(hObject, eventdata, handles) handles.shu10=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');handles.shu10=strcat(handles.yuanshu,handles.shu10);set(handles.edit1,'string',handles.shu10);guidata(hObject, handles);function pushbutton21_Callback(hObject, eventdata, handles) function edit5_Callback(hObject, eventdata, handles)function edit5_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction pushbutton22_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.fanhao=strcat('-(',handles.yuanshu,')');set(handles.edit1,'string',handles.fanhao);guidata(hObject, handles);function pushbutton23_Callback(hObject, eventdata, handles)set(handles.edit1,'string','0');set(handles.edit5,'string','0');guidata(hObject, handles);function pushbutton24_Callback(hObject, eventdata, handles)result=questdlg('ÕæµÄÒªÍ˳ö£¿','Í˳öÈ·ÈÏ','È·¶¨','È¡Ïû','È¡Ïû'); if result=='È·¶¨', close(gcf); endfunction pushbutton25_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.sin=strcat('sin(',handles.yuanshu,')');set(handles.edit1,'string',handles.sin);guidata(hObject, handles);function pushbutton26_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.cos=strcat('cos(',handles.yuanshu,')');set(handles.edit1,'string',handles.cos);guidata(hObject, handles);function pushbutton27_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.tan=strcat('tan(',handles.yuanshu,')');set(handles.edit1,'string',handles.tan);guidata(hObject, handles);function pushbutton28_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.ln=strcat('reallog(',handles.yuanshu,')');set(handles.edit1,'string',handles.ln);guidata(hObject, handles);function pushbutton29_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.log=strcat('log',handles.yuanshu,'()');set(handles.edit1,'string',handles.log);guidata(hObject, handles);function pushbutton30_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.daoshu=strcat('1/(',handles.yuanshu,')');set(handles.edit1,'string',handles.daoshu);guidata(hObject, handles);function pushbutton31_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.sqrt=strcat('sqrt(',handles.yuanshu,')');set(handles.edit1,'string',handles.sqrt);guidata(hObject, handles);function pushbutton32_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.pingfang=strcat('(',handles.yuanshu,')^2');set(handles.edit1,'string',handles.pingfang);guidata(hObject, handles);function pushbutton33_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.ncifang=strcat('(',handles.yuanshu,')^N');set(handles.edit1,'string',handles.ncifang);guidata(hObject, handles);function pushbutton35_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.kuohao=strcat('(',handles.yuanshu,')');set(handles.edit1,'string',handles.kuohao);guidata(hObject, handles);function pushbutton36_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.yuanshu=handles.yuanshu(1:(end-1));if length(handles.yuanshu)<1handles.yuanshu='0';endset(handles.edit1,'string',handles.yuanshu);guidata(hObject, handles);% --- Executes on button press in pushbutton37.function pushbutton37_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.exp=strcat('exp(',handles.yuanshu,')');set(handles.edit1,'string',handles.exp);guidata(hObject, handles);% --- Executes when user attempts to close figure1.function figure1_CloseRequestFcn(hObject, eventdata, handles)% hObject handle to figure1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Hint: delete(hObject) closes the figuredelete(hObject);%--------------------------------------------------------------------function Untitled_14_Callback(hObject, eventdata, handles)% hObject handle to Untitled_14 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_15_Callback(hObject, eventdata, handles)set(gcf,'color','red')% hObject handle to Untitled_15 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_16_Callback(hObject, eventdata, handles)set(gcf,'color','blue')% hObject handle to Untitled_16 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_17_Callback(hObject, eventdata, handles)set(gcf,'color','green')% hObject handle to Untitled_17 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_18_Callback(hObject, eventdata, handles)set(gcf,'color','black')% hObject handle to Untitled_18 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_19_Callback(hObject, eventdata, handles)set(gcf,'color','yellow')% hObject handle to Untitled_19 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_20_Callback(hObject, eventdata, handles)set(gcf,'color','m')% hObject handle to Untitled_20 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) function Untitled_1_Callback(hObject, eventdata, handles)function Untitled_2_Callback(hObject, eventdata, handles)function Untitled_3_Callback(hObject, eventdata, handles)function Untitled_4_Callback(hObject, eventdata, handles)function Untitled_4_CreateFcn(hObject, eventdata, handles)function Untitled_5_Callback(hObject, eventdata, handles)function Untitled_6_Callback(hObject, eventdata, handles)。

(完整word版)MatLab代码大全

(完整word版)MatLab代码大全

第2章图像获取2.3.2 二维连续傅里叶变换例2.2figure(1); %建立图形窗口1[u,v] = meshgrid(-1:0.01:1); %生成二维频域网格F1 = abs(sinc(u.*pi));F2 = abs(sinc(v.*pi));F=F1.*F2; %计算幅度频谱F=|F(u,v)|surf(u,v,F); %显示幅度频谱,如图2.3(b)shading interp; %平滑三维曲面上的小格axis off; %关闭坐标系figure(2); %建立图形窗口2F1=histeq(F); %扩展F的对比度以增强视觉效果imshow(F1); %用图像来显示幅度频谱,如图2.3(c)第3章图像变换3.4.4 二维FFT的MATLAB实现例3.2 简单图像及其傅里叶变换MATLAB程序:%建立简单图像d并显示之d = zeros(32,32); %图像大小32⨯32d(13:20,13:20) = 1; %中心白色方块大小为8⨯8figure(1); %建立图形窗口1imshow(d,'notruesize');%显示图像d如图3.5(a)所示%计算傅里叶变换并显示之D = fft2(d); %计算图像d的傅里叶变换,fft2(d) = fft(fft(d).').'figure(2); %建立图形窗口2imshow(abs(D),[-1 5],'notruesize'); %显示图像d的傅里叶变换谱如3.5(b)所示例3.3 MATLAB图像及其傅里叶变换谱MATLAB程序:figure(1);load imdemos saturn2; %装入MA TLAB图像saturn2imshow(saturn2); %显示图像saturn2如图3.6(a)所示figure(2);S= fftshift(fft2(saturn2)); %计算傅里叶变换并移位imshow(log(abs(S)),[ ]); %显示傅里叶变换谱如3.6(b)所示例3.4 真彩图像及其傅里叶变换谱MATLAB程序:figure(1);A=imread('image1.jpg'); %装入真彩图像,见图1.1(b)B=rgb2gray(A); %将真彩图像转换为灰度图像imshow(B); %显示灰度图像如图3.7(a)所示C=fftshift(fft2(B)); %计算傅里叶变换并移位figure(2);imshow(log(abs(C)),[ ]); %显示傅里叶变换谱如3.7(b)所示3.5.4 离散余弦变换的MATLAB实现例3.5 计算并显示真彩图像余弦变换的MATLAB程序如下:RGB=imread('image2.jpg'); %装入真彩图像figure(1);imshow(RGB); %显示彩色图像GRAY=rgb2gray(RGB); %将真彩图像转换为灰度图像figure(2);imshow(GRAY); %显示灰度图像如图3.10(a)所示DCT=dct2(GRAY); %进行余弦变换figure(3);imshow(log(abs(DCT)),[ ]); %显示余弦变换如图3.10(b)所示。

(完整word版)matlab经典代码大全

(完整word版)matlab经典代码大全

(完整word版)matlab经典代码大全哈哈哈MATLAB显示正炫余炫图:plot(x,y1,'* r',x,y2,'o b')定义【0,2π】;t=0:pi/10:2*pi;定义函数文件:function [返回变量列表]=函数名(输入变量列表)顺序结构:选择结构1)if-else-end语句其格式为:if 逻辑表达式程序模块1;else程序模块2;End图片读取:%选择图片路径[filename, pathname] = ...uigetfile({'*.jpg';'*.bmp';'*.gif'},'选择图片');%合成路径+文件名str=[pathname,filename];%为什么pathname和filename要前面出现的位置相反才能运行呢%读取图片im=imread(str);%使用图片axes(handles.axes1);%显示图片imshow(im);边缘检测:global imstr=get(hObject,'string');axes (handles.axes1);switch strcase ' 原图'imshow(im);case 'sobel'BW = edge(rgb2gray(im),'sobel');imshow(BW);case 'prewitt'BW = edge(rgb2gray(im),'prewitt');imshow(BW);case 'canny'BW = edge(rgb2gray(im),'canny');imshow(BW);Canny算子边缘定位精确性和抗噪声能力效果较好,是一个折中方案end;开闭运算:se=[1,1,1;1,1,1;1,1,1;1,1,1]; %Structuring ElementI=rgb2gray(im);imshow(I,[]);title('Original Image');I=double(I);[im_height,im_width]=size(I);[se_height,se_width]=size(se);halfheight=floor(se_height/2);halfwidth=floor(se_width/2);[se_origin]=floor((size(se)+1)/2);image_dilation=padarray(I,se_origin,0,'both'); %Image to be used for dilationimage_erosion=padarray(I,se_origin,256,'both'); %Image to be used for erosion %%%%%%%%%%%%%%%%%% %%% Dilation %%%%%%%%%%%%%%%%%%%%%for k=se_origin(1)+1:im_height+se_origin(1)for kk=se_origin(2)+1:im_width+se_origin(2)dilated_image(k-se_origin(1),kk-se_origin(2))=max(max(se+image_dilation(k-se_origin(1):k+halfh eight-1,kk-se_origin(2):kk+halfwidth-1)));endendfigure;imshow(dilated_image,[]);title('Image after Dilation'); %%%%%%%%%%%%%%%%%%%% Erosion %%%%%%%%%%%%%%%%%%%%se=se';for k=se_origin(2)+1:im_height+se_origin(2)for kk=se_origin(1)+1:im_width+se_origin(1)eroded_image(k-se_origin(2),kk-se_origin(1))=min(min(image_erosion(k-se_origin(2):k+halfwidth -1,kk-se_origin(1):kk+halfheight-1)-se));endendfigure;imshow(eroded_image,[]);title('Image after Erosion'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% Opening(Erosion first, then Dilation) %%% %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%se=se';image_dilation2=eroded_image; %Image to be used for dilationfor k=se_origin(1)+1:im_height-se_origin(1)for kk=se_origin(2)+1:im_width-se_origin(2)opening_image(k-se_origin(1),kk-se_origin(2))=max(max(se+image_dilation2(k-se_origin(1):k+hal fheight-1,kk-se_origin(2):kk+halfwidth-1)));endendfigure;imshow(opening_image,[]);title('OpeningImage'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% Closing(Dilation first, then Erosion) %%% %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%se=se';image_erosion2=dilated_image; %Image to be used for erosionfor k=se_origin(2)+1:im_height-se_origin(2)for kk=se_origin(1)+1:im_width-se_origin(1)closing_image(k-se_origin(2),kk-se_origin(1))=min(min(image_erosion2(k-se_origin(2):k+halfwidt h-1,kk-se_origin(1):kk+halfheight-1)-se));endendfigure;imshow(closing_image,[]);title('Closing Image');Warning: Image is too big to fit on screen; displaying at 31% scale.> In truesize>Resize1 at 308In truesize at 44In imshow at 161图像的直方图归一化:I=imread(‘red.bmp’);%读入图像figure;%打开新窗口[M,N]=size(I);%计算图像大小[counts,x]=imhist(I,32);%计算有32个小区间的灰度直方图counts=counts/M/N;%计算归一化灰度直方图各区间的值stem(x,counts);%绘制归一化直方图图像平移:I=imread('shuichi.jpg');se=translate(strel(1),[180 190]);B=imdilate(I,se);figure;subplot(1,2,1),subimage(I);title('原图像');subplot(1,2,2),subimage(B);title('平移后图像');图像的转置;A=imread('nir.bmp');tform=maketform('affine',[0 1 0;1 0 0;0 0 1]);B=imtransform(A,tform,'nearest');figure;imshow(A);figure;imshow(B);imwrite(B,'nir转置后图像.bmp');图像滤波:B = imfilter(A,H,option1,option2,...)或写作g = imfilter(f, w, filtering_mode, boundary_options, size_options)其中,f为输入图像,w为滤波掩模,g为滤波后图像。

Matlab源码

Matlab源码

数值计算方法中的一些常用算法的Matlab源码,这些程序都是原创,传上来仅供大家参考,不足之处请大家指正,切勿用作商业用途……说明:这些程序都是脚本函数,不可直接运行,需要创建函数m文件,保存时文件名必须与函数名相同,懂一点儿Matlab的朋友应该知道。

每个程序的说明里面都附了测试例子这些程序在Vista操作系统下,使用Matlab R2008b(7.7版本)编写1、Newdon迭代法求解非线性方程function [x k t]=NewdonToEquation(f,df,x0,eps)%牛顿迭代法解线性方程%[x k t]=NewdonToEquation(f,df,x0,eps)%x:近似解%k:迭代次数%t:运算时间%f:原函数,定义为内联函数%Df:函数的倒数,定义为内联函数%x0:初始值%eps:误差限%%应用举例:%f=inline('x^3+4*x^2-10');%df=inline('3*x^2+8*x');%x=NewdonToEquation(f,df,1,0.5e-6)%[x k]=NewdonToEquation(f,df,1,0.5e-6)%[x k t]=NewdonToEquation(f,df,1,0.5e-6)%函数的最后一个参数也可以不写。

默认情况下,eps=0.5e-6%[x k t]=NewdonToEquation(f,df,1)if nargin==3eps=0.5e-6;endtic;k=0;while 1x=x0-f(x0)./df(x0);k=k+1;if abs(x-x0) < eps || k ==30break;endx0=x;endt=toc;if k == 30disp('迭代次数太多。

');x=' ';end2、Newdon迭代法求解非线性方程组function y=NewdonF(x)%牛顿迭代法解非线性方程组的测试函数%定义是必须定义为列向量y(1,1)=x(1).^2-10*x(1)+x(2).^2+8;y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8;return;function y=NewdonDF(x)%牛顿迭代法解非线性方程组的测试函数的导数y(1,1)=2*x(1)-10;y(1,2)=2*x(2);y(2,1)=x(2).^+1;y(2,2)=2*x(1).*x(2)-10;return;以上两个函数仅供下面程序的测试function [x k t]=NewdonToEquations(f,df,x0,eps)%牛顿迭代法解非线性方程组%[x k t]=NewdonToEquations(f,df,x0,eps)%x:近似解%k:迭代次数%t:运算时间%f:方程组(事先定义)%df:方程组的导数(事先定义)%x0:初始值%eps:误差限%%说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示%%应用举例:%x0=[0,0];eps=0.5e-6;%x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)%[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)%[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)%函数的最后一个参数也可以不写。

matlab源代码

matlab源代码

matlab源代码例错误!文档中没有指定样式的文字。

-1%周期信号(方波)的展开,fb_jinshi.mclose all;clear all;N=100; %取展开式的项数为2N+1项T=1;fs=1/T;N_sample=128; %为了画出波形,设置每个周期的采样点数dt = T/N_sample;t=0:dt:10*T-dt;n=-N:N;Fn = sinc(n/2).*exp(-j*n*pi/2);Fn(N+1)=0;ft = zeros(1,length(t));for m=-N:Nft = ft + Fn(m+N+1)*exp(j*2*pi*m*fs*t);endplot(t,ft)例错误!文档中没有指定样式的文字。

-4利用FFT计算信号的频谱并与信号的真实频谱的抽样比较。

脚本文件T2F.m定义了函数T2F,计算信号的傅立叶变换。

function [f,sf]= T2F(t,st)%This is a function using the FFT function to calculate a signal's Fourier %Translation%Input is the time and the signal vectors,the length of time must greater %than 2%Output is the frequency and the signal spectrumdt = t(2)-t(1);T=t(end);df = 1/T;N = length(st);f=-N/2*df:df:N/2*df-df;sf = fft(st);sf = T/N*fftshift(sf);脚本文件F2T.m定义了函数F2T,计算信号的反傅立叶变换。

function [t st]=F2T(f,sf)%This function calculate the time signal using ifft function for the input %signal's spectrumdf = f(2)-f(1);Fmx = ( f(end)-f(1) +df);dt = 1/Fmx;N = length(sf);T = dt*N;%t=-T/2:dt:T/2-dt;t = 0:dt:T-dt;sff = fftshift(sf);st = Fmx*ifft(sff);另写脚本文件fb_spec.m如下:%方波的傅氏变换, fb_spec.mclear all;close all;T=1;N_sample = 128;dt=T/N_sample;t=0:dt:T-dt;st=[ones(1,N_sample/2), -ones(1,N_sample/2)]; %方波一个周期subplot(211);plot(t,st);axis([0 1 -2 2]);xlabel('t'); ylabel('s(t)');subplot(212);[f sf]=T2F(t,st); %方波频谱plot(f,abs(sf)); hold on;axis([-10 10 0 1]);xlabel('f');ylabel('|S(f)|');%根据傅氏变换计算得到的信号频谱相应位置的抽样值sff= T^2*j*pi*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);plot(f,abs(sff),'r-')例错误!文档中没有指定样式的文字。

计算方法MATLAB程序样例

计算方法MATLAB程序样例

1.利用共轭梯度法求解大规模稀疏方程组1.1.算法原理共轭梯度法是把求解线性方程组的问题转化为求解一个与之等价的二次函数极小值的问题。

对于特定的线性方程组来说,选取与之等价的二次函数之后,可以从任意给定的初始点出发,沿一组关于矩阵A 的共轭方向进行线性搜索,在无舍入误差的假定下,最多迭代n次(其中n为矩阵A 的阶数),就可以求得二次函数的极小点,也就求得了线性方程组A x=b的解。

对于特定线性方程组A x=b,其对应的n元二次函数为:f(x)=12x T Ax−b T x其中A为对称正定矩阵,二次函数的梯度为:∇f(x)=Ax+b 通过一系列的数学推导,最终可以得到共轭梯度的计算公式:{d(0)=r(0)=b−Ax(0)αk=r(k)T d(k)d(k)T Ad(k)x(k+1)=x(k)+αk d(k) r(k+1)=b−Ax(k+1)βk=−r(k+1)T Ad(k)d(k)T Ad(k)d(k+1)=r(k+1)+βk d(k)共轭梯度法在形式上具有迭代法的特征,即给定初始向量x(0)后,由迭代格式x(k+1)=x(k)+αk d(k)能够产生迭代序列x(1),x(2),x(3),最终得到满足约束条件的解。

而该方法中关键的两点是,确定上述迭代格式中的搜索方向d(k)和最佳步长αk。

实际上,搜索方向d(k)是关于矩阵A的共轭向量,在迭代中逐步构造之。

步长αk的确定原则是给定迭代点x(k)和搜索方向d(k)后,要求选取非负实数αk使得f(x(k)+αk d(k))达到最小。

因此,由该算法原理可得共轭梯度法的程序流程图如下图所示。

图 1.1共轭梯度法程序流程图1.2.程序使用说明针对相关问题的源程序及注释如下:clc;clear all;format long;n=100;%A的阶数A=zeros(100);A=diag(repmat([1],1,n-1),1)+diag(repmat([1],1,n-1),-1)+diag(repmat([-2],1,n));%构建三对角矩阵b=zeros(n,1);b(1,1)=-1;b(n,1)=-1;x0=zeros(n,1);d0=b-A*x0;r0=b-A*x0;D0=d0;R0=r0;X0=x0;C=norm(A)*norm(inv(A));%共轭梯度法¨for k=1:3*na0=(r0.'*d0)/(d0.'*A*d0);x=x0+a0*d0;r=b-A*x;beta=-(r.'*A*d0)/(d0.'*A*d0);d=r+beta*d0;x0=x;r0=r;d0=d;if norm(r)< 1e-9seigm(k)=norm(r);breakelseseigm(k)=norm(r);endendR=r0;X=x0;%最速下降法¨r0=R0;d0=D0;x0=X0;%读取初始向量初始残差与初始方向for k=1:3*na0=(r0.'*r0)/(r0.'*A*r0);x=x0-a0*r0;r=A*x-b;f=x-x0;x0=x;r0=r;if norm(f)< 1e-9seigm1(k)=norm(r);breakelseseigm1(k)=norm(r);endendR1=r0;X1=x0;m=1:length(seigm);M=1:length(seigm1);figure;plot(m,log(seigm),'r');%误差对数的变化曲线hold on;grid on;plot(M,log(seigm1),'b');hold on;grid on;legend('¹²éîÌݶȷ¨','×îËÙϽµ·¨','fontname','ËÎÌå');运行上述程序可得共轭梯度法和最速下降法误差收敛速度图。

MATLAB常用方法和源程序

MATLAB常用方法和源程序

% 权重乘以单因素隶属度得到最终结果 R=LSDResult; E=EResult; FuzzyEvalution=E*R; TheResultMoHu=[TheResultMoHu;FuzzyEvalution]; TheResultMoHu; 主成分分析方法的源程序 clear; A=[]; %得到的相关系数矩阵为; R=corrcoef(A); R= ; %计算特征值与特征向量 [v,d]=eig(corrcoef(A)); v= ; %各主成分贡献率:? w=sum(d)/sum(sum(d)); w=?; %计算各个主成分得分:? F=[A-ones(17,1)*mean(A)]*v(:,8); F= ; %F1 按从大到小的顺序给个主成分得分排名: [F1,I1]=sort(F,'descend')? F1?=?; %I1 给出各个名次的序号: I1= ; %按顺序排列各个序号 [F2,I2]=sort(I1); F2=
层次分析法的源程序‘ clear; clc; A=[1 3 5;1/3 1 3;1/5 1/3 1]; [~,n]=size(A); [v,d]=eig(A); r=d(1,1); CI=(r-n)/(n-1); RI=[0 0 0.52 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.52 1.54 1.56 1.59]; CR=CI/RI(n); if CR<0.10 CR_Result='通过'; else CR_Result='通过'; end % 权向量计算 w=v(:,1)/sum(v(:,1)); w=w'; % % 结果输出 disp('该判断矩阵权向量计算报告:'); disp(['一致性指标:',num2str(CI)]); disp(['一致性比例:',num2str(CR)]); disp(['一致性检验比例:',CR_Result]); disp(['特征值:',num2str(r)]); disp(['权向量:',num2str(w)]);

matlab遍历变量

matlab遍历变量

matlab遍历变量【原创实用版】目录1.MATLAB 简介2.遍历变量的概念3.MATLAB 中遍历变量的方法4.示例:使用 MATLAB 遍历变量5.总结正文【1.MATLAB 简介】MATLAB 是一种广泛使用的数学软件,它主要用于数据分析、可视化和算法开发等。

MATLAB 具有强大的矩阵计算能力,使得其在处理大量数据时非常高效。

【2.遍历变量的概念】在编程中,遍历变量是指依次访问序列中的每个元素。

在 MATLAB 中,遍历变量通常用于对数组或矩阵的每个元素执行特定操作。

【3.MATLAB 中遍历变量的方法】在 MATLAB 中,有多种方法可以遍历变量。

以下是其中一些常用方法:- 使用循环结构:for 循环和 while 循环可以用于遍历数组或矩阵的每个元素。

- 使用数组的索引:通过改变数组的索引,可以依次访问数组中的每个元素。

- 使用内置函数:MATLAB 提供了一些内置函数,如 arrayfun 和cellfun,可以方便地对数组或矩阵的每个元素执行特定操作。

【4.示例:使用 MATLAB 遍历变量】假设我们有一个数组 A,我们希望计算数组中每个元素的平方。

可以使用以下代码实现:```matlab% 创建一个数组A = [1, 2, 3, 4, 5];% 使用 for 循环遍历数组的每个元素for i = 1:length(A)A(i) = A(i)^2;end% 或者使用 arrayfun 函数A_squared = arrayfun(@(x) x^2, A);```【5.总结】MATLAB 是一种强大的数学软件,可以方便地处理和操作大量数据。

在 MATLAB 中,有多种方法可以遍历变量,包括使用循环结构、数组的索引和内置函数。

数学建模遍历算法原理

数学建模遍历算法原理

数学建模遍历算法原理数学建模是一种运用数学方法解决实际问题的过程,而遍历算法则是其中一种常用的求解方法。

遍历算法的原理是通过遍历问题的所有可能解空间,从中找到满足特定条件的解。

本文将详细介绍遍历算法的原理及其应用领域。

一、遍历算法的原理遍历算法是一种通过穷举的方式寻找问题解的方法。

它的基本原理是将问题的解空间划分为若干个子空间,然后按照一定的顺序遍历每个子空间,直到找到满足特定条件的解或遍历完所有可能的解空间。

具体来说,遍历算法通常包括以下几个步骤:1. 确定问题的解空间:将问题的解空间划分为若干个子空间,每个子空间对应一个可能的解。

2. 确定遍历顺序:确定遍历子空间的顺序,可以按照从左到右、从上到下等方式进行。

3. 遍历每个子空间:按照确定的顺序遍历每个子空间,检查是否满足特定条件。

4. 判断是否满足条件:对于每个子空间,判断是否满足特定条件。

如果满足条件,则找到一个解;如果不满足,则继续遍历其他子空间。

5. 遍历完所有子空间:直到遍历完所有子空间,或者找到满足条件的解为止。

二、遍历算法的应用领域遍历算法在实际问题中有着广泛的应用。

下面介绍几个常见的应用领域。

1. 图论:在图论中,遍历算法常用于寻找图的连通分量、最短路径、最小生成树等问题。

例如,深度优先搜索和广度优先搜索就是两种常用的遍历算法。

2. 组合优化:组合优化问题是指在给定的一组元素中选取满足特定条件的子集。

遍历算法可以用于穷举所有可能的子集,以找到最优解。

例如,旅行商问题就是一个经典的组合优化问题,可以使用遍历算法求解。

3. 排列组合:排列组合问题是指在一组元素中按照一定的规则进行排列或组合的问题。

遍历算法可以用于穷举所有可能的排列或组合,以找到满足特定条件的解。

例如,八皇后问题就是一个经典的排列组合问题,可以使用遍历算法求解。

4. 线性规划:线性规划是一种在给定的线性约束条件下,求解线性目标函数最优值的问题。

遍历算法可以用于穷举所有可能的解,以找到最优解。

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

第三章遍历算法
32
结果如下
myroot = -2 2 5
2.(巧妙填数) 将1~9这九个数字填入九个空格中. 每一横行的三个数字组成一个三位数. 如果要使第二行的三位数是第一行的两倍, 则输出结果.
结果如下
A = 3 2 7
6 5 4
9 8 1
注意,这里的break,仅仅跳出当前层的for循环,并不会跳出所有的for循环。

如果需要跳出所有的for循环,可以再加一个flag变量。

另外这里用了差集setdiff减少了循环次数,否则时间将花费很久。

A = 2 1 7 8
4.假定小鸡每只5角,公鸡每只2元,母鸡每只3元.现在100元要求买100只鸡,编程列出可能
结果如下
A = 78 5 17
5.我国古代数学问题:1兔换2鸡,2兔换3鸭,5兔换7鹅.某人用20只兔换得鸡鸭鹅共30只,问其中鸡鸭鹅各几只?
结果如下
A = 6 3 21。

相关文档
最新文档