Ⅰ 请问您可不可以提供一个LMP算法,也就是p范数LMS算法的matlab程序呀我自己编的没法收敛…
%% 初始化
clc,clear all;
mu=0.05; % 步长
N=16; % 信道时域系数个数
input_signal_variance=1; % 输入信号方差
noise_variance=10^-3; % 噪声方差
inter=500; % 迭代次数分别为500
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%前500次迭代
w=zeros(N,1); % 初始时刻,稀疏信道脉冲响应
w_initial=w;
w_initial(5,1)=1; % 第5个抽头值为1
w_opt=w_initial; % 记录所要得到的稀疏系数向量w~(n),便于求MSD,MSE
%% 产生零均值,方差为1/10^-3的高斯噪声x(n)和v(n)
% 产生高斯分布的N*1的输入信号x(n)
b=randn(N,1);
b=b/std(b);
b=b-mean(b);
c=0;
d=sqrt(input_signal_variance);
x=c+d*b;
% 产生高斯分布的噪声v(n)
t=randn(inter_3,1);
t=t/std(t);
t=t-mean(t);
c=0;
f=sqrt(noise_variance);
v=c+f*t;
%% 未迭代
sum=0;
MSD=;
inter=0;
for n=1:N %求MSD
error=(abs(w(n)-w_opt(n)))^2;
sum=sum+error;
end
MSD(inter+1)=sum;
%% 开始迭代--LMS
for inter=1:inter
y=w'*x+v(inter); % 输出信号y(n)
e=w_opt'*x-y; % 误差
w=w+mu*e*x; % 更新公式
sum=0;
for n=1:N %求MSD
error=(abs(w(n)-w_opt(n)))^2;
sum=sum+error;
end
MSD(inter+1)=sum;
end
inter=0:inter;
plot(inter,MSD);
axis();
grid on;
xlabel('interation');
ylabel('MSD');
Ⅱ MATLAB 中 LM算法的函数是什么
http://www.mathworks.com/matlabcentral/fileexchange/16063-lmfsolve-m-levenberg-marquardt-fletcher-algorithm-for-nonlinear-least-squares-problems
Calling of the function is rather simple:
[x,ssq,cnt] = LMFsolve(Equations,X0); % or
[x,ssq,cnt] = LMFsolve(Equations,X0,'Name',Value,...); % or
[x,ssq,cnt] = LMFsolve(Equations,X0,Options) % .
去看吧
好像没有二维的.
你最好看看这个函数,根据LM算法的意义修改一下
Ⅲ 请教MATLAB中的LMI求解问题
1.因为令F=K*X1后,若所得不等式中中只有X1,F,则该不等式为LMI;若不等式中出现X1,F,K三个变量,则不等式变为受等式约束的LMI形式,无法直接通过Matlab求解。
2.不等式中出现X1^-1时,可以采取如下处理方法:
a)若X1^-1为矩阵对角元素,则可根据不等式-X1^-1<=X1-2I将原矩阵不等式替换成LMI形式;(此方法简便易行,但保守性增大)
b)利用锥补线性化算法(cone complementary linearisation),可参考以下文献
郭亚锋, 李少远. 网络控制系统的H∞状态反馈控制器设计. 控制理论与应用
G. Zhou, D. Wang, P. Chen, X. Zhao. Guaranteed Cost Control For Networked Control System With Interval Time-varying Delay. //Proceedings of the 21st Chinese Control and Decision Conference
Ⅳ MATLAB实现LMS学习算法
clc;
clear all;
load msesample;
n1=length(x1);
n2=length(x2);
x=[x1;x2];
e=ones(length(x),1);
y=[e x];
b=e;
%b=rand(length(x),1);
yita=1;
eps=0.01;
yy=inv(y'*y)*y';
result=yy*b;
for i=n2:length(x)
y(i,:)=y(i,:).*(-1);
end
a=[1;2;1];
an=zeros(3,100);
an(:,1)=a;
flat=zeros(length(x),1);
n=1;
while(n<=100)
for i=1:length(x)
if y(i,:)*an(:,n)<=b(i)
an(:,(n+1))=an(:,n)+y(i,:)'*(b(i)-y(i,:)*an(:,n))*yita/n;
end
end
if abs(an(:,(n+1))-an(:,n))<=eps
break;
else
n=n+1;
end
end
n
w=an(:,n)
ne=0;
for i=1:length(x)
if y(i,:)*w<b(i)
ne=ne+1;
end
end
ne
pe=ne/length(x)
subplot(1,2,1)
plot(x1(:,1),x1(:,2),'bo',x2(:,1),x2(:,2),'ro');
hold on
syms xa xb;
g=w(1)+w(2)*xa+w(3)*xb;
ezplot(g);
title('最小均方误差判决')
legend('第一类样本','第二类样本')
gtext(strcat('错误率为:',num2str(pe)),'Fontsize',8)
subplot(1,2,2)
hold on
i=1:n;
plot(i,an(:,i));
title('权向量')
xlabel('迭代次数')
ylabel('权向量取值')
Ⅳ Matlab如何做空间计量回归模型LM检验
x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]';
X=[ones(16,1) x]; 增加一个常数项
Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]';
[b,bint,r,rint,stats]=regress(Y,X)
得结果:b = bint =
-16.0730 -33.7071 1.5612
0.7194 0.6047 0.8340
stats = 0.9282 180.9531 0.0000
即对应于b的置信区间分别为[-33.7017,1.5612]、[0.6047,0.834]; r2=0.9282, F=180.9531, p=0.0000
p<0.05, 可知回归模型 y=-16.073+0.7194x 成立.
这个是一元的,如果是多元就增加X的行数!
Ⅵ matlab中trainlm算法和trainbr中mu值是什么意思
变量mu确定了学习是根据牛顿法还是梯度法来完成,下式为更新参数的L-M规则:
% jj = jX * jX
% je = jX * E
% dX = -(jj+I*mu) \ je
随着mu的增大,LM的项jj可以忽略。因此学习过程主要根据梯度下降即mu/je项,只要迭代使误差增加,mu也就会增加,直到误差不再增加为止,但是,如果mu太大,则会使学习停止,当已经找到最小误差时,就会出现这种情况,这就是为什么当mu达到最大值时要停止学习的原因。
Ⅶ 如何用matlab实现频域块LMS算法
先对t离散化,然后FFT,再画个幅频和相频就可以了。
不过貌似你这个式子有点问题,randn产生1*1024的高斯噪声已经指定了s的维数了,所以t必须去1024个离散值,限定了t的取值了。
你可以参考下面的程序,建议你看懂之后自己编一下。
这是对sin(x)求幅频相频
%用fft求幅频相频
clc;%清空
clearall;%清除所有变量
closeall;%关闭所有窗口
A=10;%振幅
fw=50;%固有频率
phi=pi/3;%相位
step=1000;
t=0:1/step:10*pi;%时间t
y=A*sin(2*pi*fw*t+phi);%正弦函数y
f=step*(0:256)/512;%频率
subplot(3,1,1);%三行一列第一幅图
plot(t,y);%绘制图形
xlabel('t/s','fontsize',13);%横坐标显示t/s,字号13
ylabel('y','fontsize',13);%纵坐标显示y,字号13
title('正弦函数曲线','fontsize',13);%显示标题
Y=fft(y,512);%对y进行傅里叶变换
subplot(3,1,2);%三行一列第二幅图
plot(f,abs(Y(1:257)));%绘制图形
xlabel('f/Hz','fontsize',13);%横坐标显示f/Hz,字号13
ylabel('幅值','fontsize',13);%纵坐标显示幅值,字号13
title('幅频特性曲线','fontsize',13);%显示标题
[value,index]=max(abs(Y));%将abs(Y)最大值点的横坐标、纵坐标分别赋给
value和index
text(f(index),value,sprintf('maxpiont=(%f,%f)',f(index),value),'fonts
ize',13);%显示最大值点坐标
subplot(3,1,3);%三行一列第三幅图
plot(f,angle(Y(1:257))*180/pi);%绘制图形
xlabel('f/Hz','fontsize',13);%横坐标显示f/Hz,字号13
ylabel('相位/°','fontsize',13);%纵坐标显示相位/°,字号13
title('相位特性曲线','fontsize',13);%显示标题
Ⅷ 基于MATLAB的神经网络BP算法改进LM算法的交通流量的源代码!
给你推荐一本书《神经网络理论与MATLAB7实现》,上面有LM算法以及N多的代码
Ⅸ matlab如何实现蒙特卡洛算法
1、打开MATLAB软件,如图所示,输入一下指令。
Ⅹ MATLAB中训练LM算法的BP神经网络
1.初始权值不一样,如果一样,每次训练结果是相同的
2.是
3.在train之前修改权值,IW,LW,b,使之相同
4.取多次实验的均值
一点浅见,仅供参考
训练误差是否降到一定范围内,比如1e-3,
将训练样本回代结果如何,
训练样本进行了预处理,比如归一化,而测试样本未进行同样的处理
这样的归一化似有问题,我也认为“测试数据的归一化也用训练数据归一化时得出的min和max值”,
请参考这个帖子http://www.ilovematlab.cn/thread-27021-1-1.html
测试数据带入训练好的神经网络误差当然不会达到1e-5,这是预测啊。
但将训练数据带入误差必然是1e-5,算法终止就是因为达到这个误差才终止,这个误差是由训练数据的输入、输出以及神经网络的权值、激活函数共同决定的,神经网络训练完后,权值、激活函数定了,同样的数据再代入神经网络,误差会不等于1e-5?
第二个问题:不可能每个值都达到1e-5,1e-5是MSE(mean square error),它们的平方和除以总数再开方,mse(E)必为1e-5
另外,LM算法虽然训练最快,但是预测精度一般不好,不如gdm,gdx