返回信息流我在Matlab下写了一个程序,但是老是提示出现错误,
??? function calcu=mainvv
|
Error: Function definitions are not permitted at the prompt or in scripts.
程序如下:
游戏业务模型中几个主要模块程序清单:
1.主程序
function calcu=mainvv
clear;
global T buffersize alluser buffer sum user n speedaveg rate delayaveg delay interval sizeall loss array numberall readsize ;
global fspeed fdrop delayl dropratio;
numberall=0;%数据包总数量
loss=0;%丢包数
sizeall=0;%目前缓存中数据大小
sum=0;
alluser=n; %用户数
for i=1:alluser
array(i)=0;
end
%array记录每用户缓存中数据包数量
%储存时间间隔和数据包大小的结构体
buffer = struct('size',0,'time',0);
user = struct('size',0,'time',0);
interval=5;%读取缓存时间间隔
buffersize=200000;%缓存大小
readsize=25000;%读取速率5Mbps,则5ms可读比特数可算
speedaveg=[0];rate=1;%平均速率
avedelay=[0];delay=1;%平均时延
treading=[0];
for number=1:alluser%初始化
user(number).size=0;
user(number).time=unifrnd(0,40);
end
for T=0:0.1:1600
for number=1:alluser
write(number);
end
read;
end
loss;
dropratio=loss/numberall;
delayl=mean(delayaveg);
delayaveg;
j=1;M=[0];L=[0];
len1=length(speedaveg);
%fspeed=speedaveg(len1);用户数为n时总的吞吐量;
for j=1:1:len1-1
M(j)=interval*j;
L(j)=speedaveg(j);
end
if n==50
plot(M,L,'>'),hold on;
elseif n==80
plot(M,L,'+'),hold on;
else
plot(M,L)
end;%画不同用户数吞吐量随时间变化图
x=[0];
for i=120:1:len1-1
x(i-119)=speedaveg(i);
end;
[f,xi]=ksdensity(x);
plot(xi,f);hold on;%选定丢包率较小时的用户数,画吞吐量趋于稳定后速率PDF
2.数据包写入缓存模块
function write(number)
global T timeinter buffer buffersize user sizeall loss numberall array ;
%%%%%%%%%到达时间间隔随机数%%%%%%%%%
if T==0||user(number).time<T
timeinter(number)=timerand;
user(number).time=user(number).time+timeinter(number);
end
%----------数据包大小随机数-------
if user(number).time-T<0.1&&user(number).time-T>0
user(number).size=sizerand;
array(number)=array(number)+1;%第number个用户的缓存中数据包数加一
buffer(number,array(number)).size=user(number).size;
buffer(number,array(number)).time=user(number).time;
numberall=numberall+1;
sizeall=sizeall+user(number).size;
if sizeall>buffersize
sizeall=sizeall-buffer(number,array(number)).size;%缓存溢出则丢包处理
array(number)=array(number)-1;%第number个用户的该数据包丢掉
loss=loss+1;计算丢包数
return;
end
End
3.读取缓存模块
function read
global speedaveg rate delayaveg delay buffer T sum interval sizeall array readsize alluser;
%%%%%%%%读取缓存%%%%%%%%%%%%%%
if mod(T,interval)==0&&T>0
sumson=0;
usercount=1;%结构体中第row个用户
while usercount<=alluser&&sumson<=readsize%控制每次读取比特小于readsize
if array(usercount)>=1%此用户缓存中有数据包时
sum=sum+buffer(usercount,array(usercount)).size;
sumson=sumson+buffer(usercount,array(usercount)).size;
delayaveg(delay)=T-buffer(usercount,array(usercount)).time;
delay=delay+1;
array(usercount)=array(usercount)-1;
else
usercount=usercount+1;%否则读取下一用户缓存
end
speedaveg(rate)=sum/T;
rate=rate+1;
sizeall=sizeall-sum;%去掉已读取的包
End
4.统计模块之一:时延CDF
global delayaveg n;
ehdelay=[0];M=[0];
n=1;
for i=1:1:3
mainvv;
M(i)=n;
n=n+8;
y=[0];
y=delayaveg;
ymin=min(y);
ymax=max(y);
x=linspace(ymin,ymax,30);
yy=hist(y,x);
yy=yy/length(y)/(x(2)-x(1));
s=0;
for i=2:length(x)
s=[s,trapz(x([1:i]),yy([1:i]))];
end
plot(x,s,x,s,'*'),axis([0 ymax 0 1]),hold on;
end
那出错了,高手帮我
这是一条镜像帖。来源:北邮人论坛 / math-model / #5027同步于 2009/10/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MathModel机器人发帖
Error: Function definitions are not permitted at the prompt
ldhscxl
2009/10/31镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
这个function是要保存到M文件才能运行的,直接贴在命令行肯定不行
【 在 bashanyeyu45 (bocaccio) 的大作中提到: 】
: 参数 不太懂 我直接把程序贴进去的,新手以前没用过。谢谢指导!
你这个好像就是直接出结果的。。。好像是产生随机数据,然后得到结果
【 在 bashanyeyu45 (bocaccio) 的大作中提到: 】
: 我这个是执行直接出结果还是的输入不同的数据出不同的结果?
: 谢谢