麻烦高手看下这个matlab程序,怎么迭代?

来源:百度知道 编辑:UC知道 时间:2024/06/30 17:35:03
想求Ef,主要思想利用G=g;想利用迭代的方法,给Ef一个初值,
算出G,g;如果G-g>精度,Ef(k+1)=Ef(k)+0.02,以Ef(k+1)再对程序进行计算,如此循环,直到G-g<精度.给出Ef.
n=100;
V1(i)=linspace(1,1.5,n-1);
Ef=1;
for j=1:n-1
i=1:n-1;
A(i,j)=N(i,j)*log(1+exp((Ef-E1(j))/2));
end;
F=sum(A.');
G=sum(F);
for i=1:n-1;
Nd(i)=3/(1+exp((Ef-V1(i))));
end;
g=sum(Nd);
gg=abs(G-g);
while gg>10^(-4);
Ef(kk+1)=Ef(kk)+0.001;
Ef(kk+1)=Ef(kk);
end;
只有这么多分数了;
N是常数,随便设一个也可以,E1(j)=ones(1,n-1),k为迭代次数。麻烦了,我想知道怎么迭代的,谢谢……

clear
n=100;
N=1;
E1=1;
kmax=100;

V1=linspace(1,1.5,n-1);
Ef(1)=1;

k=1;
while k<kmax
for j=1:n-1
for i=1:n-1
A(i,j)=N*log(1+exp((Ef(k)-E1)/2));
end
end

F=sum(A');
G=sum(F);
G=G/n/n; %这句是我自己瞎写的

for i=1:n-1;
Nd(i)=3./(1+exp((Ef(k)-V1(i))));
end;

g=sum(Nd);
g=g/n; %这句也是我瞎写的
gg=abs(G-g);
if (gg<1e-3)
break;
else
k=k+1;
Ef(k)=Ef(k-1)+0.02;
end
end

if (k==kmax)
sprintf('超出最大迭代次数')
else
sprintf('收敛于k=%d',k)
Ef(end)
end

%%上面只给出一个方法。你的算法中,肯定得修改,肯定有不对的地方。