主题:求助一个matlab编程问题,请大家帮帮我
我在一篇英文文献中找到的如下matlab程序,怎么每次运行时都有错误啊,我没学过matlab,自己看了点,也是皮毛。希望高手们帮我指点一下。
function [lambda,p,entr]=me_dens1(mu,x,lambda0)
mu=mu(:);mu=[1;mu];
x=x(:);lx=length(x);
xmin=x(1);xmax=x(lx);dx=x(2)-x(1);
if(nargin==2)
lambda=zeros(mu);运行时,这个地方它提示出错,说zeros函数需要一个整数的行向量
lambda(1)=log(xmax-xmin);
else
lambda=lambda0(:);
end
N=length(lambda);
fin=fin1_x(x);
iter=0;
while 1
iter=iter+1;
disp('---------------------');disp(['iter=',num2str(iter)]);
p=exp(-(fin*lambda));
plot(x,p);
G=zeros(N,1);
for n=1:N
G(n)=dx*sum(fin(:,n).*p);
end
entr(iter)=lambda'*G(1:N);
disp(['entropy=',num2str(entr(iter))])
gnk=zeros(N,N);
gnk(1,:)=-G';gnk(:,1)=-G;
for i=2:N
for j=2:i
gnk(i,j)=-dx*sum(fin(:,j).*fin(:,i).*p);
end
end
for i=2:N
for j=i+1:N
gnk(i,j)=gnk(j,i);
end
end
v=mu-G;
delta=gnk\v;
lambda=lambda+delta;
eps=1e-6;
if(abs(delta./lambda)<eps), break,end
if(iter>2)
if(abs((entr(iter)-entr(iter-1))/entr(iter))<eps),break,end
end
end
p=exp(-(fin*lambda));
plot(x,p);
entr=entr(:);
disp('------------END-------------')
end
this program calculates the lagrange multipliers of the Max entropy probability density functions p(x) from the knowledge of the N constraints in the form:
E(fin(x))=mu(n)
n=0:N with fi0(x)=1,mu(0)=1.
mu is a table containing the constraints mu(n),n=1:N
X is a table defining the range of variation of x
LAMBDA0 is a table containing the first estimate of the LAMBDAs
LAMBDA is a table containing the resulting lagrange parameters.
p is a table containing the resulting pdf p(x)
entr is a table containing the entropy values at each iteration.
我要输入的运行指令如下:
xmin=0.0001;xmax=1;dx=0.01;
x=[xmin:dx:xmax]'';
mu=[0.3,-1.5]';
[lambda,p,entr]=me_dens1(mu,x);运行到这时出错,提示是:??? Error using ==> zeros
Size vector must be a row vector with integer elements.
Error in ==> me_dens1 at 6
lambda=zeros(mu);
是我操作有误吗,还是什么啊,请各位大虾指点。
接着的指令如下,有兴趣的朋友可以帮我运行一下。
alpha=-lambda(3);beta=lamnda(2);
m=(1+alpha)/beta;sigma=m/beta;
disp([mu' alpha beta m sigma entr(length(entr))]
function [lambda,p,entr]=me_dens1(mu,x,lambda0)
mu=mu(:);mu=[1;mu];
x=x(:);lx=length(x);
xmin=x(1);xmax=x(lx);dx=x(2)-x(1);
if(nargin==2)
lambda=zeros(mu);运行时,这个地方它提示出错,说zeros函数需要一个整数的行向量
lambda(1)=log(xmax-xmin);
else
lambda=lambda0(:);
end
N=length(lambda);
fin=fin1_x(x);
iter=0;
while 1
iter=iter+1;
disp('---------------------');disp(['iter=',num2str(iter)]);
p=exp(-(fin*lambda));
plot(x,p);
G=zeros(N,1);
for n=1:N
G(n)=dx*sum(fin(:,n).*p);
end
entr(iter)=lambda'*G(1:N);
disp(['entropy=',num2str(entr(iter))])
gnk=zeros(N,N);
gnk(1,:)=-G';gnk(:,1)=-G;
for i=2:N
for j=2:i
gnk(i,j)=-dx*sum(fin(:,j).*fin(:,i).*p);
end
end
for i=2:N
for j=i+1:N
gnk(i,j)=gnk(j,i);
end
end
v=mu-G;
delta=gnk\v;
lambda=lambda+delta;
eps=1e-6;
if(abs(delta./lambda)<eps), break,end
if(iter>2)
if(abs((entr(iter)-entr(iter-1))/entr(iter))<eps),break,end
end
end
p=exp(-(fin*lambda));
plot(x,p);
entr=entr(:);
disp('------------END-------------')
end
this program calculates the lagrange multipliers of the Max entropy probability density functions p(x) from the knowledge of the N constraints in the form:
E(fin(x))=mu(n)
n=0:N with fi0(x)=1,mu(0)=1.
mu is a table containing the constraints mu(n),n=1:N
X is a table defining the range of variation of x
LAMBDA0 is a table containing the first estimate of the LAMBDAs
LAMBDA is a table containing the resulting lagrange parameters.
p is a table containing the resulting pdf p(x)
entr is a table containing the entropy values at each iteration.
我要输入的运行指令如下:
xmin=0.0001;xmax=1;dx=0.01;
x=[xmin:dx:xmax]'';
mu=[0.3,-1.5]';
[lambda,p,entr]=me_dens1(mu,x);运行到这时出错,提示是:??? Error using ==> zeros
Size vector must be a row vector with integer elements.
Error in ==> me_dens1 at 6
lambda=zeros(mu);
是我操作有误吗,还是什么啊,请各位大虾指点。
接着的指令如下,有兴趣的朋友可以帮我运行一下。
alpha=-lambda(3);beta=lamnda(2);
m=(1+alpha)/beta;sigma=m/beta;
disp([mu' alpha beta m sigma entr(length(entr))]