主题:[讨论]新手求教 mpm算法在matlab中的编程解析
非常的急,求各位高手能帮忙指点啊!真的是万分感谢啊!
mpm就是matrix pencil method方法,也就是矩阵束法,我在网上找了用matlab 编的该方法的程序,但是网上是求角度的,而我需要的是幅值的,需要对网上程序改动一下,可是我这个菜鸟改了好几天了还是不会!!
请高手们务必帮忙啊。
主程序如下:
clear all;
fid=fopen('chou20_30.dat','r');
B=fread(fid,[20,30],'double');
fclose(fid);%读入文件
plot(B(1,:));
hold on;
M=30; % number of elements
N=M;
x=B(1,:);
d=1; % number of signals
semilogy(mpm(x,d,N),'rx')
看着挺简单的,下面是mpm的子程序:
function theta=mpm(u,d,N);
%N=length(u);
L=floor(N/2)-1;
Y=hankel(u(1:N-L),u(N-L:N));
[U,S,Vs]=svd(Y);
D=abs(real(S));
[Sn,k]=sort(diag(-D));
V=Vs(:,k);
V=V(:,1:d);
V1=V(1:length(V)-1,:);
V2=V(2:length(V),:);
V3=pinv(V1)*V2;
eigy=eig(V3);
f=eigy;
if(f<0)
f=-f;
elseif(f>0)
f=1-f;
end
theta=Y;
这段程序从f=eigy起应该改为对幅值求解,可是我不知道怎么改才是对的,请帮帮忙啊
我的意思就是我现在有一组离散的数据点,需要用mpm方法来拟合我的这些数据点,应该对mpm的子程序后面一小部分进行修改,可是我实在想不到应该怎么改了!
感谢帮助的人啊!!
mpm就是matrix pencil method方法,也就是矩阵束法,我在网上找了用matlab 编的该方法的程序,但是网上是求角度的,而我需要的是幅值的,需要对网上程序改动一下,可是我这个菜鸟改了好几天了还是不会!!
请高手们务必帮忙啊。
主程序如下:
clear all;
fid=fopen('chou20_30.dat','r');
B=fread(fid,[20,30],'double');
fclose(fid);%读入文件
plot(B(1,:));
hold on;
M=30; % number of elements
N=M;
x=B(1,:);
d=1; % number of signals
semilogy(mpm(x,d,N),'rx')
看着挺简单的,下面是mpm的子程序:
function theta=mpm(u,d,N);
%N=length(u);
L=floor(N/2)-1;
Y=hankel(u(1:N-L),u(N-L:N));
[U,S,Vs]=svd(Y);
D=abs(real(S));
[Sn,k]=sort(diag(-D));
V=Vs(:,k);
V=V(:,1:d);
V1=V(1:length(V)-1,:);
V2=V(2:length(V),:);
V3=pinv(V1)*V2;
eigy=eig(V3);
f=eigy;
if(f<0)
f=-f;
elseif(f>0)
f=1-f;
end
theta=Y;
这段程序从f=eigy起应该改为对幅值求解,可是我不知道怎么改才是对的,请帮帮忙啊
我的意思就是我现在有一组离散的数据点,需要用mpm方法来拟合我的这些数据点,应该对mpm的子程序后面一小部分进行修改,可是我实在想不到应该怎么改了!
感谢帮助的人啊!!