用MATLAB求解最大流问题

用MATLAB求解最大流问题,第1张

function [f,wf,No]=MaxFlowMinCut_Me(n,C)

% 利用Ford--Fulkerson 标号法求最大流算法的MATLAB 程序代码

% f %显示最大流

% wf %显示最大流量

% No %显示标号, 由此可得最小割

% n 节点个数

% C %弧容量

% Example:

% n=8

% C=[0 5 4 3 0 0 0 0

%0 0 0 0 5 3 0 0

%0 0 0 0 0 3 2 0

%0 0 0 0 0 0 2 0

%0 0 0 0 0 0 0 4

%0 0 0 0 0 0 0 3

%0 0 0 0 0 0 0 5

%0 0 0 0 0 0 0 0]

% [f,wf,No]=MaxFlowMinCut_Me(n,C)

for(i=1:n)for(j=1:n)f(i,j)=0endend %取初始可行流f 为零流

for(i=1:n)No(i)=0d(i)=0end %No,d 记录标号

while(1)

No(1)=n+1d(1)=Inf%给发点vs 标号

while(1)pd=1%标号过程

for(i=1:n)if(No(i)) %选择一个已标号的点vi

for(j=1:n)if(No(j)==0&f(i,j)<C(i,j)) %对于未给标号的点vj, 当vivj 为非饱和弧时

No(j)=id(j)=C(i,j)-f(i,j)pd=0

if(d(j)>d(i))d(j)=d(i)end

elseif(No(j)==0&f(j,i)>0) %对于未给标号的点vj, 当vjvi 为非零流弧时

No(j)=-id(j)=f(j,i)pd=0

if(d(j)>d(i))d(j)=d(i)endendendendend

if(No(n)|pd)breakendend %若收点vt 得到标号或者无法标号, 终止标号过程

if(pd)breakend %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)-dvtend %后向弧调整

if(No(t)==1)for(i=1:n)No(i)=0d(i)=0endbreakend %当t 的标号为vs 时, 终止调整过程

t=No(t)endend%继续调整前一段弧上的流f

wf=0for(j=1:n)wf=wf+f(1,j)end

end

matlab如何获取滤波器频域波形

一、实验目的:

1. 了解图像变换的意义和手段; 熟悉傅立叶变换的基本性质;熟练掌握FFT变换方法及应用; 了解二维频谱的分布特点; 掌握利用MATLAB编程实现数字图像的傅立叶变换; 评价人眼对图像幅频特性和相频特性的敏感度。

2.掌握怎样利用傅立叶变换进行频域滤波;掌握频域滤波的概念及方法;熟练掌握频域空间的各类滤波器;利用MATLAB程序进行频域滤波。

二、实验条件以及开发环境:

1. PC计算机、MATLAB软件。

2. 实验所需要的图片均可采用MATLAB软件自带图片素材库也可以自行准备。

三、算法原理:

1. 应用傅立叶变换进行图像处理

傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。

2. 傅立叶(Fourier)变换的定义

对于二维信号,二维Fourier变换定义为:

逆变换:

二维离散傅立叶变换为:

逆变换:

3.频域滤波分为低通滤波和高通滤波两类,对应的滤波器分别为低通滤波器和高通滤波器。频域低通过滤的基本思想:

F(u,v)是需要钝化图像的傅立叶变换形式,H(u,v)是选取的一个低通过滤器变换函数,G(u,v)是通过H(u,v)减少F(u,v)的高频部分来得到的结果,运用傅立叶逆变换得到钝化后的图像。理想低通滤波器(ILPF)具有传递函数:

其中,D0为指定的非负数,D(u,v)为(u,v)到滤波器的中心的距离。D(u,v)=D0的点的轨迹为一个圆。N阶巴特沃兹低通滤波器(BLPF)(在距离原点D0处出现截至频率)的传递函数为:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12189574.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存