主题:请教matlab中递归问题
station(1)=struct('zjrl',40,'zxjscl',0.5,'qptyl',0.1,'id',1,'mhl',400);
station(2)=struct('zjrl',40,'zxjscl',0.6,'qptyl',0.1,'id',2,'mhl',400);
station(3)=struct('zjrl',20,'zxjscl',0.6,'qptyl',0.2,'id',3,'mhl',450);
station(1).zjrl;
station(2).zjrl;
station(1).zjrl*station(1).zxjscl;
%keys()=[151.1,146.6,144.3,139.7,153.4,164.9,164.9,178.6,196.9,206.1,215.3,187.8,190.1,194.7,206.1,208.4,206.1,203.8,219.8,229.0,224.4,199.2,185.5,174.0];
%key=sort(keys())
load0=[32,34,34,42,50,55,62,65,65,74,72,68,68,72,72,72,72,82,72,68,68,62,58,46];
load=sort(load0);
load(1);
load_size=24;
middle2=zeros(24,1);
for i=1:24
middle1=0.0;
for j=1:24
if(load(i)<=load(j))
middle1=middle1+1;
end
end
middle2(i,1)=middle1;
end
E0=0;
for x=1:load(24)
E0=E0+f0(x);
end
E0=load_size*E0
Eg1=0;
for x=1:station(1).zjrl
Eg1=Eg1+f0(x);
end
Eg1=load_size*(1-station(1).qptyl)*Eg1
Eg2=0;
for x=(station(1).zjrl+1):(station(1).zjrl+station(2).zjrl)
Eg2=Eg2+fn(1,x);
end
Eg2=load_size*(1-station(2).qptyl)*Eg2
%求解f0(x)
function f=f0(x)
load0=[32,34,34,42,50,55,62,65,65,74,72,68,68,72,72,72,72,82,72,68,68,62,58,46];
load=sort(load0);
load(1);
yy=x;
load_size=24;
middle2=zeros(24,1);
for i=1:24
middle1=0.0;
for j=1:24
if(load(i)<=load(j))
middle1=middle1+1;
end
end
middle2(i,1)=middle1;
end
for i=1:23
if(load(i)<yy && yy<=load(i+1))
f=middle2(i+1,1)/24;
end
end
if(0<= yy && yy<= load(1))
f=middle2(1,1)/24;
elseif (yy>load(24))
f=0;
end
function f=fn(n,x)
station(1)=struct('zjrl',40,'zxjscl',0.5,'qptyl',0.1,'id',1,'mhl',400);
station(2)=struct('zjrl',40,'zxjscl',0.6,'qptyl',0.1,'id',2,'mhl',400);
station(3)=struct('zjrl',20,'zxjscl',0.6,'qptyl',0.2,'id',3,'mhl',450);
t=0;
if n==0
f=f0(x);
else
if x<station(n).zjrl t=0; end
if x>station(n).zjrl t=x-station(n).zjrl; end
f=(1-station(n).qptyl)*f(n-1,x)+station(n).qptyl*f(n-1,t);
end
end
想要的是输入fn(n,x),然后程序自动运算下去 ,fn(n-1,x),.....f(0,x)...
请教高手,我要如果让其中fn函数实现递归运算呢?
station(2)=struct('zjrl',40,'zxjscl',0.6,'qptyl',0.1,'id',2,'mhl',400);
station(3)=struct('zjrl',20,'zxjscl',0.6,'qptyl',0.2,'id',3,'mhl',450);
station(1).zjrl;
station(2).zjrl;
station(1).zjrl*station(1).zxjscl;
%keys()=[151.1,146.6,144.3,139.7,153.4,164.9,164.9,178.6,196.9,206.1,215.3,187.8,190.1,194.7,206.1,208.4,206.1,203.8,219.8,229.0,224.4,199.2,185.5,174.0];
%key=sort(keys())
load0=[32,34,34,42,50,55,62,65,65,74,72,68,68,72,72,72,72,82,72,68,68,62,58,46];
load=sort(load0);
load(1);
load_size=24;
middle2=zeros(24,1);
for i=1:24
middle1=0.0;
for j=1:24
if(load(i)<=load(j))
middle1=middle1+1;
end
end
middle2(i,1)=middle1;
end
E0=0;
for x=1:load(24)
E0=E0+f0(x);
end
E0=load_size*E0
Eg1=0;
for x=1:station(1).zjrl
Eg1=Eg1+f0(x);
end
Eg1=load_size*(1-station(1).qptyl)*Eg1
Eg2=0;
for x=(station(1).zjrl+1):(station(1).zjrl+station(2).zjrl)
Eg2=Eg2+fn(1,x);
end
Eg2=load_size*(1-station(2).qptyl)*Eg2
%求解f0(x)
function f=f0(x)
load0=[32,34,34,42,50,55,62,65,65,74,72,68,68,72,72,72,72,82,72,68,68,62,58,46];
load=sort(load0);
load(1);
yy=x;
load_size=24;
middle2=zeros(24,1);
for i=1:24
middle1=0.0;
for j=1:24
if(load(i)<=load(j))
middle1=middle1+1;
end
end
middle2(i,1)=middle1;
end
for i=1:23
if(load(i)<yy && yy<=load(i+1))
f=middle2(i+1,1)/24;
end
end
if(0<= yy && yy<= load(1))
f=middle2(1,1)/24;
elseif (yy>load(24))
f=0;
end
function f=fn(n,x)
station(1)=struct('zjrl',40,'zxjscl',0.5,'qptyl',0.1,'id',1,'mhl',400);
station(2)=struct('zjrl',40,'zxjscl',0.6,'qptyl',0.1,'id',2,'mhl',400);
station(3)=struct('zjrl',20,'zxjscl',0.6,'qptyl',0.2,'id',3,'mhl',450);
t=0;
if n==0
f=f0(x);
else
if x<station(n).zjrl t=0; end
if x>station(n).zjrl t=x-station(n).zjrl; end
f=(1-station(n).qptyl)*f(n-1,x)+station(n).qptyl*f(n-1,t);
end
end
想要的是输入fn(n,x),然后程序自动运算下去 ,fn(n-1,x),.....f(0,x)...
请教高手,我要如果让其中fn函数实现递归运算呢?