LZW编码算法matlab实现

LZW编码算法matlab实现
LZW编码算法matlab实现

LZW编码算法,尝试使用matlab计算

%encoder LZW for matlab

%yu 20170503

clc;

clear;

close all;

%初始字典

dic = cell(512,1);

for i = 1:256

dic{i} = {num2str(i)};

end

%输入字符串a,按空格拆分成A,注意加1对应范围1~256 a = input('input:','s');

a = deblank(a);

A = regexp(a,'\s+','split');

L = length(A);

for j=1:L

A{j} = num2str(str2num(A{j})+1);

end

A_t = A{1};%可识别序列

B_t = 'test';%待验证词条

d = 256;%字典指针

b = 1;%输出指针

B = cell(L,1);%输出初始

output = ' ';%输出初始

j=1;

for j = 2:L

m=1;

B_t =deblank([A_t,' ',A{j}]);%合成待验证词条

while(m <= d)

if strcmp(dic{m},B_t)

A_t = B_t;

break

else

m=m+1;

end

end

while(m == d+1)

d = d+1;

dic{d} = B_t;

q=1;

for q=1:d

if strcmp(dic{q},A_t)

B{b} = num2str(q);

b = b+1;

end

end

A_t = A{j};

end

end

for q=1:d%处理最后一个序列输出

if strcmp(dic{q},A_t)

B{b} = num2str(q);

b = b+1;

end

end

for n = 1:(b-1)

B{n} =num2str(str2num(B{n})-1);

output=deblank([output,' ',B{n}]);

end

output

运算结果

计算结果为39 39 126 126 256 258 260 259 257 126

LZW解码算法,使用matlab计算

%decoder LZW for matlab

%yu 20170503

clc;

clear;

close all;

%初始字典

dic = cell(512,1);

for i = 1:256

dic{i} = {num2str(i)};

end

%输入字符串a,按空格拆分成A,注意加1对应范围1~256

a = input('input:','s');

a = deblank(a);

A = regexp(a,'\s+','split');

L = length(A);

for j=1:L

A{j} = num2str(str2num(A{j})+1);

end

B_t = A{1};%待验证词条

d = 256;%字典指针

b = 1;%输出指针

B = cell(L,1);%输出初始

output = ' ';%输出初始

j=1;

B{b} = char(dic{str2num(A{j})});

b = b+1;

for j = 2:L

BB = char(dic{str2num(A{j})});

B_d = regexp(BB,'\s+','split');%按空格拆分

L_B = length(B_d);

p=1;

for p=1:L_B

B{(b+p-1)} = B_d{p};

m=1;

B_t =deblank([char(B_t),' ',char(B_d{p})]);%合成待验证词条

while(m <= d)

if strcmp(dic{m},B_t)

B_t = B_t;

break

else

m=m+1;

end

end

while(m == d+1)

d = d+1;

dic{d} = B_t;

B_t = B_d{p};

end

end

b = b+L_B;

end

for n = 1:(b-L_B)

B{n} = num2str(str2num(B{n})-1);

output=deblank([output,' ',B{n}]);

end

output

运算结果

运算结果为39 39 126 126 39 39 126 126 39 39 126 126 39 39 126 126

PID算法Matlab仿真程序和C程序

增量式PID控制算法Matlab仿真程序设一被控对象G(s)=50/(0.125s^2+7s),用增量式PID控制算法编写仿真程序(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-5,5],仿真曲线包括系统输出及误差曲线,并加上注释、图例)。程序如下clear all; close all; ts=0.001; sys=tf(50,[0.125,7, 0]); dsys=c2d(sys,ts,'z'); [num,den]=tfdata(dsys,'v'); u_1=0.0;u_2=0.0; y_1=0.0;y_2=0.0; x=[0,0,0]'; error_1=0; error_2=0; for k=1:1:1000 time(k)=k*ts; S=2; if S==1 kp=10;ki=0.1;kd=15; rin(k)=1; % Step Signal elseif S==2 kp=10;ki=0.1;kd=15; %Sin e Signal rin(k)=0.5*sin(2*pi*k*ts); end du(k)=kp*x(1)+kd*x(2)+ki*x(3); % PID Controller u(k)=u_1+du(k); %Restricting the output of controller if u(k)>=5 u(k)=5; end if u(k)<=-5 u(k)=-5; end %Linear model yout(k)=-den(2)*y_1-den(3)*y_2+nu m(2)*u_1+num(3)*u_2; error(k)=rin(k)-yout(k); %Return of parameters u_2=u_1;u_1=u(k); y_2=y_1;y_1=yout(k); x(1)=error(k)-error_1; %C alculating P x(2)=error(k)-2*error_1+error_2; %Calculating D x(3)=error(k); %Calculating I error_2=error_1; error_1=error(k); end figure(1); plot(time,rin,'b',time,yout,'r'); xlabel('time(s)'),ylabel('rin,yout'); figure(2); plot(time,error,'r') xlabel('time(s)');ylabel('error'); 微分先行PID算法Matlab仿真程序%PID Controler with differential in advance clear all; close all; ts=20; sys=tf([1],[60,1],'inputdelay',80); dsys=c2d(sys,ts,'zoh'); [num,den]=tfdata(dsys,'v'); u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;

LZW编码算法

班级 __ __ 学号__姓名 __ ___评分__________ 1.实验名称 LZW编码与解码算法 2.实验目的 2.1通过实验进一步掌握LZW编码的原理; 2.2 用C/C++等高级程序设计语言实现LZW编码。 3.实验内容步骤或记录(包括源程序或流程和说明等) 3.1 实验原理 (1)在压缩过程中动态形成一个字符列表(字典)。 (2)每当压缩扫描图像发现一个词典中没有的字符序列,就把该字符序列存到字典中,并用字典的地址(编码)作为这个字符序列的代码,替换原图像中的字符序列,下次再碰到相同的字符序列,就用字典的地址代替字符序列 3.2实验步骤 LZW编码算法的具体执行步骤如下: 步骤1:开始时的词典包含所有可能的根(Root),而当前前缀P是空的; 步骤2:当前字符(C) :=字符流中的下一个字符; 步骤3:判断缀-符串P+C是否在词典中 (1) 如果“是”:P := P+C // (用C扩展P) ; (2) 如果“否” ①把代表当前前缀P的码字输出到码字流;

②把缀-符串P+C添加到词典; ③令P := C //(现在的P仅包含一个字符C); 步骤4:判断码字流中是否还有码字要译 (1) 如果“是”,就返回到步骤2; (2) 如果“否” ①把代表当前前缀P的码字输出到码字流; ②结束。 3.3 源程序 #include #include using namespace std;

const int N=200; class LZW{ private: string Dic[200];//存放词典 int code[N];//存放编码过的码字 public: LZW(){//设置词典根 Dic[0]='a'; Dic[1]='b'; Dic[2]='c'; string *p=Dic;//定义指针指向词典中的字符} void Bianma(string cs[N]);//进行编码 int IsDic(string e);//判断是否在词典中 int codeDic(string f); void display(int g);//显示结果 }; void LZW::Bianma(string cs[N]){ string P,C,K; P=cs[0]; int l=0; for(int i=1;i

最短路径算法_matlab程序[1]

算法描述: 输入图G,源点v0,输出源点到各点的最短距离D 中间变量v0保存当前已经处理到的顶点集合,v1保存剩余的集合 1.初始化v1,D 2.计算v0到v1各点的最短距离,保存到D for each i in v0;D(j)=min[D(j),G(v0(1),i)+G(i,j)] ,where j in v1 3.将D中最小的那一项加入到v0,并且从v1删除这一项。 4.转到2,直到v0包含所有顶点。 %dijsk最短路径算法 clear,clc G=[ inf inf 10 inf 30 100; inf inf 5 inf inf inf; inf 5 inf 50 inf inf; inf inf inf inf inf 10; inf inf inf 20 inf 60; inf inf inf inf inf inf; ]; %邻接矩阵 N=size(G,1); %顶点数 v0=1; %源点 v1=ones(1,N); %除去原点后的集合 v1(v0)=0; %计算和源点最近的点 D=G(v0,:); while 1 D2=D; for i=1:N if v1(i)==0 D2(i)=inf; end end D2 [Dmin id]=min(D2); if isinf(Dmin),error,end v0=[v0 id] %将最近的点加入v0集合,并从v1集合中删除 v1(id)=0; if size(v0,2)==N,break;end %计算v0(1)到v1各点的最近距离 fprintf('计算v0(1)到v1各点的最近距离\n');v0,v1 id=0; for j=1:N %计算到j的最近距离 if v1(j)

LZW编码算法详解

LZW编码算法详解 LZW(Lempel-Ziv & Welch)编码又称字串表编码,是Welch将Lemple和Ziv所提出来的无损压缩技术改进后的压缩方法。GIF图像文件采用的是一种改良的LZW 压缩算法,通常称为GIF-LZW压缩算法。下面简要介绍GIF-LZW的编码与解码方程 解:例现有来源于二色系统的图像数据源(假设数据以字符串表示):aabbbaabb,试对其进行LZW编码及解码。 1)根据图像中使用的颜色数初始化一个字串表(如表1),字串表中的每个颜色对应一个索引。在初始字串表的LZW_CLEAR和LZW_EOI分别为字串表初始化标志和编码结束标志。设置字符串变量S1、S2并初始化为空。 2)输出LZW_CLEAR在字串表中的索引3H(见表2第一行)。

3)从图像数据流中第一个字符开始,读取一个字符a,将其赋给字符串变量S2。判断S1+S2=“a”在字符表中,则S1=S1+S2=“a”(见表2第二行)。 4)读取图像数据流中下一个字符a,将其赋给字符串变量S2。判断S1+S2=“aa”不在字符串表中,输出S1=“a”在字串表中的索引0H,并在字串表末尾为 S1+S2="aa"添加索引4H,且S1=S2=“a”(见表2第三行)。 5)读下一个字符b赋给S2。判断S1+S2=“ab”不在字符串表中,输出S1=“a”在字串表中的索引0H,并在字串表末尾为S1+S2=“ab”添加索引5H,且 S1=S2=“b”(见表2第四行)。 6)读下一个字符b赋给S2。S1+S2=“bb”不在字串表中,输出S1=“b”在字串表中的索引1H,并在字串表末尾为S1+S2=“bb”添加索引6H,且S1=S2=“b”(见表2第五行)。 7)读字符b赋给S2。S1+S2=“bb”在字串表中,则S1=S1+S2=“bb”(见表2第六行)。 8)读字符a赋给S2。S1+S2=“bba”不在字串表中,输出S1=“bb”在字串表中的索引6H,并在字串表末尾为S1+S2=“bba”添加索引7H,且S1=S2=“a”(见表2第七行)。 9)读字符a赋给S2。S1+S2=“aa”在字串表中,则S1=S1+S2=“aa”(见表2第八行)。 10)读字符b赋给S2。S1+S2=“aab”不在字串表中,输出S1=“aa”在字串表中的索引4H,并在字串表末尾为S1+S2=“aab”添加索引8H,且S1=S2=“b”(见表2第九行)。 11)读字符b赋给S2。S1+S2=“bb”,在字串表中,则S1=S1+S2=“b”(见表2第十行)。 12)输出S1中的字符串"b"在字串表中的索引1H(见表2第十一行)。 13)输出结束标志LZW_EOI的索引3H,编码完毕。 最后的编码结果为"30016463“。

LZW编码算法matlab实现

LZW编码算法,尝试使用matlab计算 %encoder LZW for matlab %yu 20170503 clc; clear; close all; %初始字典 dic = cell(512,1); for i = 1:256 dic{i} = {num2str(i)}; end %输入字符串a,按空格拆分成A,注意加1对应围1~256 a = input('input:','s'); a = deblank(a); A = regexp(a,'\s+','split'); L = length(A); for j=1:L A{j} = num2str(str2num(A{j})+1); end A_t = A{1};%可识别序列 B_t = 'test';%待验证词条 d = 256;%字典指针 b = 1;%输出指针 B = cell(L,1);%输出初始 output = ' ';%输出初始 j=1; for j = 2:L m=1; B_t =deblank([A_t,' ',A{j}]);%合成待验证词条 while(m <= d) if strcmp(dic{m},B_t) A_t = B_t; break else m=m+1; end end while(m == d+1) d = d+1;

dic{d} = B_t; q=1; for q=1:d if strcmp(dic{q},A_t) B{b} = num2str(q); b = b+1; end end A_t = A{j}; end end for q=1:d%处理最后一个序列输出 if strcmp(dic{q},A_t) B{b} = num2str(q); b = b+1; end end for n = 1:(b-1) B{n} =num2str(str2num(B{n})-1); output=deblank([output,' ',B{n}]); end output 运算结果 计算结果为39 39 126 126 256 258 260 259 257 126

LZW编码编程实现(C++版)

LZW编码的编程和实现 一、实验目的 编写源程序,实现LZW的编码和解码 二、实验要求 1.编码输入若干字母(如abbababac),输出相应的编码 2.解码输入若干数字(如122473),输出相应的字母 三、编程思想 1.编码 根缀表已知 1 A 2 B 3 C 编码 分析字符串流,从词典中寻找最长匹配串,即字符串P在词典中,而字符串P+后一个字符C不在词典中 此时,输出P对应的码字,将P+C放入词典中。 如第一步: 输入A 此时,A在表中,而AB不在表中,则输出A对应的码字1,同时将AB写入表中,此时表为 1 A 2 B 3 C 4 AB 编码输出为1 (A已编码) 第二步,输入B,B在词典中,而BB不在词典中,则输出2,将BB写入表中,此时表为 1 A 2 B 3 C 4 AB 5 BB 编码输出为12 (AB已经编码) .... 2.解码 根缀表为 1 A 2 B 3 C 定义如下变量 StringP :前一步码字流 pW : StringP的第一个字符 StringC :当前的码字流 cW : StringC的第一个字符 第一步 输出StringC 并StringP = StringC 如: 1解码为A,则StringC = A

那么 输出A,并令St ringP = A --------------------------------------------------------------------------- 第二步 1.解码得到StringC,并输出StringC 2.将StringP + cW放入词典(如果当前码字不在词典中,则将StringP + cP放入词典中) 3.StringP = StringC 如: 第二步要解码为2,解码为B,则StringC=B,输出B (此时St ringP = A) 将StringP+cW放入表中,即将AB放入表中,此时表为 1 A 2 B 3 C 4 AB 四、实验情况及分析 编码解码 错误提示 附:源代码 #include #include #include

最优化算法-Matlab程序

CG程序代码 function [x,y] = cg(A,b,x0) %%%%%%%%%%%%%%%%%CG算法%%%%%%%%%%%% r0 = A*x0-b; p0 = -r0; k = 0; r = r0; p = p0; x = x0; while r~=0 alpha = -r'*p/(p'*A*p); x = x+alpha*p; rold = r; r = rold+alpha*A*p; beta = r'*r/(rold'*rold); p = -r+beta*p; plot(k,norm(p),'.--'); hold on k = k+1; end y.funcount = k; y.fval = x'*A*x/2-b'*x;

function [x,y] = cg_FR(fun,dfun,x0) %%%%%%%%%%%%%%%CG_FR算法%%%%%%%%%%%%%%% error = 10^-5; f0 = feval(fun,x0); df0 = feval(dfun,x0); p0 = -df0; f = f0; df = df0; p = p0; x = x0; k = 0; while ((norm(df)>error)&&(k<1000)) f = feval(fun,x); [alpha,funcNk,exitflag] = lines(fun,0.01,0.15,0.85,6,f,df'*p,x,p);%%用线搜索找下降距离%% if exitflag == -1 disp('Break!!!'); break; end x = x+alpha*p; dfold = df; df = feval(dfun,x); beta = df'*df/(dfold'*dfold); p = -df+beta*p; plot(k,norm(df),'.--'); hold on k = k+1; end y.funcount = k; y.fval = feval(fun,x); y.error = norm(df);

MVDR算法matlab程序

clc clear all close all %% 常量定义 Freqs=1.6e9; %工作频率 c=3e8; %光速 lamda=c/Freqs; %波长 d=0.5*lamda; %单元间距 M=16; %天线阵元数 fs=2e6; %采样频率 pd=10; %快拍数 %% 模型建立 %--------------第一个干扰模型-------------------- thetaJ1=20*pi/180; %干扰方向 FreqJ1=5e5; %第一个干扰的频率 J1NR=sqrt(10^(60/10)); J1one=J1NR*exp(j*(2*pi*FreqJ1*(1:1:pd)/fs)); %1*pd %--------------第二个干扰模型-------------------- ThetaJ2=60*pi/180; %干扰方向 FreqJ2=6e5; %第二个干扰的频率 J2NR=sqrt(10^(60/10)); J2one=J2NR*exp(j*(2*pi*FreqJ2*(1:1:pd)/fs)); %1*pd %--------------信号模型-------------------- ThetaS=30*pi/180; FreqS=7e5; SNR=sqrt(10^(40/10)); Sone=SNR*exp(j*(2*pi*FreqS*(1:1:pd)/fs)); %1*pd %--------------空域处理------------------------- I1=zeros(M,1); I2=zeros(M,1); IS=zeros(M,1); for n=1:M I1(n)=exp(j*2*pi*(n-1)*d*sin(thetaJ1)/lamda); I2(n)=exp(j*2*pi*(n-1)*d*sin(ThetaJ2)/lamda); IS(n)=exp(j*2*pi*(n-1)*d*sin(ThetaS)/lamda); end J1=I1*J1one; J1=J1.'; J2=I2*J2one; J2=J2.'; %------------产生噪声------------------------- noise=sqrt(1/2)*randn(pd,M)+j*sqrt(1/2)*randn(pd,M);

lzw实验报告

多媒体实验 LZW编码算法 1.实验目的 1)通过实验进一步掌握LZW编码的原理; 2)用C/C++等高级程序设计语言实现LZW编码。 2.实验设备 硬件:装有32M以上内存MPC; 软件:Windows 9X/NT/XP/2000操作系统、 TC 或C++等高级语言环境。3.实验设计原理 LZW编码思想: (1)在压缩过程中动态形成一个字符列表(字典)。 (2)每当压缩扫描图像发现一个词典中没有的字符序列,就把该字符序列存到字典中,并用字典的地址(编码)作为这个字符序列的代码,替换原图像中的字符序列,下次再碰到相同的字符序列,就用字典的地址代替字符序列。 LZW编码算法的具体执行步骤如下: 步骤1:开始时的词典包含所有可能的根(Root),而当前前缀P是空的; 步骤2:当前字符(C):=字符流中的下一个字符; 步骤3:判断缀-符串P+C是否在词典中 (1)如果“是”:P:=P+C//(用C扩展P); (2)如果“否” ①把代表当前前缀P的码字输出到码字流; ②把缀-符串P+C添加到词典; ③令P:=C//(现在的P仅包含一个字符C); 步骤4:判断码字流中是否还有码字要译 (1)如果“是”,就返回到步骤2; (2)如果“否” ①把代表当前前缀P的码字输出到码字流; ②结束。

4.程序框图 5.程序设计代码#include #include using namespace std; const int N=200;

class LZW{ private: string Dic[200]; int code[N]; public: LZW(){ Dic[0]='a'; Dic[1]='b'; Dic[2]='c'; string *p=Dic; } void Bianma(string cs[N]); int IsDic(string e); int codeDic(string f); void display(int g); }; void LZW::Bianma(string cs[N]){ string P,C,K; P=cs[0]; int l=0; for(int i=1;i

图论算法及matlab程序的三个案例

图论实验三个案例 单源最短路径问题 Dijkstra 算法 Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个顶点集合S 并不断地作贪心选择来扩充这个集合。一个顶点属于集合S 当且仅当从源到该顶点的最短路径长度已知。设v 是图中的一个顶点,记()l v 为顶点 v 到源点v 1的最短距离, ,i j v v V ?∈,若 (,)i j v v E ?,记i v 到j v 的权ij w =∞。 Dijkstra 算法: ① 1{}S v =,1()0l v =;1{}v V v ??-,()l v =∞,1i =,1{}S V v =-; ② S φ=,停止,否则转③; ③ ()min{(),(,)} j l v l v d v v =, j v S ∈,v S ?∈; ④ 存在 1 i v +,使 1()min{()} i l v l v +=,v S ∈; ⑤ 1{} i S S v +=, 1{} i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果12 1n n v v v v -是从1v 到 n v 的最短路径,则 12 1 n v v v -也必然是从1v 到 1 n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元 素表示顶点i v 到j v 的权ij w ,若i v 到j v 无边,则realmax ij w =,其中realmax 是 MATLAB 常量,表示最大的实数+308)。 function re=Dijkstra(ma)

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=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==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、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:方程组(事先定义) ?:方程组的导数(事先定义) %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) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

SSDA 算法的matlab程序

%SSDAò?×?′óμ???êy?a×??ò,?ù?è±èò?×?D?e?a×??ò?y£?μ?μ±?£°?óD??éùê±£?è??üμ?μ??yè·?¥??μ? %[FileName2,PathName2] = uigetfile('*.jpg'); %pic= imread(FileName2); %[FileName,PathName] = uigetfile('*.jpg'); %moban=imread(FileName); %pic = imread('D:\matching algorithm\matching\2.jpg');%%%%%%%%%%o?ê±12??pic =imread('D:\matching algorithm\matching\lena.jpg') %%%%%%%%%%o?ê±15?? pic=pic(:,:,1); rect_pic = [256 178 145 167] moban = imcrop(pic,rect_pic); moban=imnoise(moban,'gaussian',0.005); pic=im2double(pic); moban=im2double(moban); subplot(2,2,1); imshow(pic);%2 subplot(2,2,2); imshow(moban);%3 pic1=pic; [M,N]=size(pic); [m,n]=size(moban); d=zeros(M-m,N-n); times=zeros(M-m,N-n); Tnum=0; tic; for x=1:M-m for y=1:N-n Temp=0; num=0; for i=0:m-1 for j=0:n-1 Temp = Temp+abs(pic(i+x,j+y)-moban(i+1,j+1)); num=num+1; end if Temp>m Tnum=num; break end end d(x,y)=Temp/(m*n); times(x,y)=Tnum; end end %[min_d, icmin] = min(d(:)); [max_t, itmax] = max(times(:)); %[p,q] = ind2sub(size(d),icmin(1)); [p,q] = ind2sub(size(times),itmax(1)); toc; pic1(:,:)=255; %pic1(p:p+m,q:q+n)=pic(p:p+m,q:q+n); pic1(p:p+m-1,q:q+n-1)=moban(1:m,1:n); msgbox(num2str([p,q]), 'location'); subplot(2,2,3); imshow(pic1);%4

matlab图论程序算法大全

精心整理 图论算法matlab实现 求最小费用最大流算法的 MATLAB 程序代码如下: n=5;C=[0 15 16 0 0 0 0 0 13 14 for while for 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;end for(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;end if(pd)break;end;end %求最短路的Ford 算法结束 if(p(n)==Inf)break;end %不存在vs 到vt 的最短路, 算法终止. 注意在求最小费用最大流时构造有 while if elseif if if pd=0; 值 t=n; if elseif if(s(t)==1)break;end %当t 的标号为vs 时, 终止调整过程 t=s(t);end if(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%计算最小费用

LZW编码练习题参考解答(沈云娟提供)

一、例4.4.1如 51 ,0000051 ==n X n ,求它的LZW 码。( 94P ) 解:该信源符号的LZW 编码过程如下: Step1:对01=X 编码为)0,0,1(,对应枝01=L Step2:对 12L X =不用编码,对3X 编码为)0,1,2(,对应枝002=L Step3:对254L X X =不用编码,对 6X 编码为 )0,2,3(,对应枝 0003=L Step4:对3987L X X X =不用编码,对10X 编码为 )0,3,4(,对应枝 00004=L Step5:对 414131211L X X X X =不用编码,对15X 编码为 )0,4,5(,对应枝000005=L Step6:对 52019181716L X X X X X =不用编码,对21 X 编码为 )0,5,6(,对应枝0000006=L Step7:对6272625242322L X X X X X X =不用编码,对28 X 编码为 )0,6,7(,对应枝 00000007=L Step8:对735343332313029L X X X X X X X =不用编码,对36X 编码为)0,7,8(,对应枝 000000008=L Step9: 对84443424140393837L X X X X X X X X =不用编码,对45 X 编码为 )0,8,9(,对应枝 000000000 9=L Step10:对6515049484746L X X X X X X =不用编码。 由上可得该信源符号的LZW 编码为 {(1,0,0),(2,1,0),(3,2,0),(4,3,0),(5,4,0),(6,5,0),(7,6,0),(8,7,0),(9,8,0)}。对应的LZW 树如图1所示。 二、Ex10(1). 试对以下序列构造LZW 编码(103P ) 解:该信源符号的LZW 编码过程如下: Step1:对01=X 编码为 )0,0,1(,枝01=L Step2:对12=X 编码为 )0,1,2(,枝12=L Step3:对13L X =不用编码,对4X 编码为)1,1,3(,枝013=L Step4:对365L X X =不用编码,7X 编码为 )0,3,4(,枝0104=L 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 图1.LZW 树

MUSIC算法matlab程序

clear all close all derad = pi/180; % deg -> rad radeg = 180/pi; twpi = 2*pi; kelm = 8; % 阵列数量 dd = ; % space d=0:dd:(kelm-1)*dd; % iwave = 4; % number of DOA theta = [-60 -30 30 60]; % 角度 snr = 10; % input SNR (dB) n = 500; % A=exp(-j*twpi*d.'*sin(theta*derad));%%%% direction matrix S=randn(iwave,n); X=A*S; X1=awgn(X,snr,'measured');%在信号X中加入高斯白噪声,信噪比SNR,'measured'函数在加入噪声前测定信号强度 Rxx=X1*X1'/n; InvS=inv(Rxx); %%%% [EV,D]=eig(Rxx);%%%% [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。 EVA=diag(D)';%返回矩阵D的主对角线上的元素 [EVA,I]=sort(EVA);%其中I是一个大小等于size(EVA)的数组,其每一列是EVAA中列向量的元素相对应的置换位置记号。 EVA=fliplr(EVA);%将矩阵A的列绕垂直轴进行左右翻转,如果A是一个行向量,fliplr(A)将A中元素的顺序进行翻转。如果A是一个列向量,fliplr(A)还等于A。 EV=fliplr(EV(:,I)); % MUSIC for iang = 1:361 angle(iang)=(iang-181)/2; phim=derad*angle(iang); a=exp(-j*twpi*d*sin(phim)).'; L=iwave; En=EV(:,L+1:kelm); SP(iang)=(a'*a)/(a'*En*En'*a); end %画图 SP=abs(SP); SPmax=max(SP); SP=10*log10(SP/SPmax); h=plot(angle,SP); set(h,'Linewidth',2)

EM算法matlab程序

X=zeros(600,2); X(1:200,:) = normrnd(0,1,200,2); X(201:400,:) = normrnd(0,2,200,2); X(401:600,:) = normrnd(0,3,200,2); [W,M,V,L] = EM_GM(X,3,[],[],1,[]) 下面是程序源码: 打印帮助 function[W,M,V,L] = EM_GM(X,k,ltol,maxiter,pflag,Init) % [W,M,V,L] = EM_GM(X,k,ltol,maxiter,pflag,Init) % % EM algorithm for k multidimensional Gaussian mixture esti mation % % Inputs: % X(n,d) - input data, n=number of observations, d=dimension of variable % k - maximum number of Gaussian components allowed % ltol - percentage of the log likelihood difference between 2 iterations ([] for none) % maxiter - maximum number of iteration allowed ([] for none) % pflag - 1 for plotting GM for 1D or 2D cases only, 0 otherwise ([] for none) % Init - structure of initial W, M, V: Init.W, Init.M, Init.V ([] for none) % % Ouputs: % W(1,k) - estimated weights of GM % M(d,k) - estimated mean vectors of GM % V(d,d,k) - estimated covariance matrices of GM % L - log likelihood of estimates % % Written by % Patrick P. C. Tsui, % PAMI research group % Department of Electrical and Computer Engineering % University of Waterloo, % March, 2006 % %%%% Validate inputs %%%% ifnargin <= 1, disp('EM_GM must have at least 2 inputs: X,k!/n') return elseifnargin == 2, ltol = 0.1; maxiter = 1000; pflag = 0; Init = []; err_X = Verify_X(X); err_k = Verify_k(k); iferr_X | err_k,return;end elseifnargin == 3, maxiter = 1000; pflag = 0; Init = []; err_X = Verify_X(X); err_k = Verify_k(k);

相关文档
最新文档