看不懂吗,大致的意思就是设定ga算法的初值,待寻优的函数上下限代数等,读取文件,进行n步寻优将结果追加到读取的内容中并加以保存
所以运行这个程序保存的文件会越来越大的,也就是得到的优化解的组数一直在增加了
% RLS算法 \x0d\randn('seed', 0) ; \x0d\rand('seed', 0) ; \x0d\NoOfData = 8000 ; % Set no of data points used for training \x0d\Order = 32 ; % 自适应滤波权数 \x0d\Lambda = 098 ; % 遗忘因子 \x0d\Delta = 0001 ; % 相关矩阵R的初始化 \x0d\x = randn(NoOfData, 1) ;%高斯随机系列 \x0d\h = rand(Order, 1) ; % 系统随机抽样 \x0d\d = filter(h, 1, x) ; % 期望输出 \x0d\% RLS算法的初始化 \x0d\P = Delta eye ( Order, Order ) ;%相关矩阵 \x0d\w = zeros ( Order, 1 ) ;%滤波系数矢量的初始化 \x0d\% RLS Adaptation \x0d\for n = Order : NoOfData ; \x0d\u = x(n:-1:n-Order+1) ;%延时函数 \x0d\pi_ = u' P ;%互相关函数 \x0d\k = Lambda + pi_ u ; \x0d\K = pi_'/k;%增益矢量 \x0d\e(n) = d(n) - w' u ;%误差函数 \x0d\w = w + K e(n) ;%递归公式 \x0d\PPrime = K pi_ ; \x0d\P = ( P - PPrime ) / Lambda ;%误差相关矩阵 \x0d\w_err(n) = norm(h - w) ;%真实估计误差 \x0d\end ; \x0d\% 作图表示结果 \x0d\figure ; \x0d\plot(20log10(abs(e))) ;%| e |的误差曲线 \x0d\title('学习曲线') ; \x0d\xlabel('迭代次数') ; \x0d\ylabel('输出误差估计') ; \x0d\figure ; \x0d\semilogy(w_err) ;%作实际估计误差图 \x0d\title('矢量估计误差') ; \x0d\xlabel('迭代次数') ; \x0d\ylabel('误差权矢量') ; \x0d\\x0d\%lms 算法 \x0d\clear all \x0d\close all \x0d\hold off%系统信道权数 \x0d\sysorder = 5 ;%抽头数 \x0d\N=1000;%总采样次数 \x0d\inp = randn(N,1);%产生高斯随机系列 \x0d\n = randn(N,1); \x0d\[b,a] = butter(2,025); \x0d\Gz = tf(b,a,-1);%逆变换函数 \x0d\h= [00976;02873;03360;02210;00964;];%信道特性向量 \x0d\y = lsim(Gz,inp);%加入噪声 \x0d\n = n std(y)/(10std(n));%噪声信号 \x0d\d = y + n;%期望输出信号 \x0d\totallength=size(d,1);%步长 \x0d\N=60 ; %60节点作为训练序列 \x0d\%算法的开始 \x0d\w = zeros ( sysorder , 1 ) ;%初始化 \x0d\for n = sysorder : N \x0d\u = inp(n:-1:n-sysorder+1) ;% u的矩阵 \x0d\y(n)= w' u;%系统输出 \x0d\e(n) = d(n) - y(n) ;%误差 \x0d\if n 回答于 2022-11-16
1“[]”表示清空tolargs的数值,也可以看做是为tolargs预留空间。
2nargin是函数变量的判定,因为inpaint_iterate()函数有6个变量。如果nargin < 6,表示输入变量不足,程序终止。
3
if nargout == 2, DoHist = logical(1); else DoHist = logical(0); end 判断输出变量是否是2个,如果不是,终止程序。
if nargin < 6, tolargs = []; end
判断输入变量,如果少于6个,程序终止。
if isa(tolfn,'double'),%如果tolfn是double类,则执行下面
n = tolfn;%将tolfn赋值给n
clear tolfn %清除tolfn
tolfn = inline(['count >= ' num2str(n) ';'],'Inew','I','M','count','tolargs');
%tolfn是函数inline函数tolfn(Inew,I,M,count,tolargs) = count >= 5;
end %结束if
4函数inpaint_iterate()通过调用I = feval(fn,I,M,args)在当前图形窗口重复画图形I并更新显示。fn是fn句柄(或fn名),fn句柄在图像上的缺损像素处运行修补算法。在每次迭代后,调用feval(tolfn,Inew,Iold,M,count,tolargs)判断,如果为真,迭代终止,迭代次数作为计数。如果tolfn是整数,则tolfn是迭代次数。Ihist是图像变换(进化)过程中每一步的历史记录。
新建一个函数
baidu_fm
function
f=baidu_f(x)
f=05-((sin(sqrt(x(1)^2+x(2)^2)))^2-05)/(1+0001(x(1)^2+x(2)^2)^2)
然后用fmins函数寻找极值。
x
=
fmins('baidu_f',
[0
0],
[2
2]);
另外你的语句中有错,少写了一个括号,你再自己检查一下。
以上就是关于帮我看一下MATlab程序全部的内容,包括:帮我看一下MATlab程序、基于RLS算法和LMS的自适应滤波器的MATLAB程序是什么、matlab一段程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)