MATLAB仿真程序代码--模拟品牌传播的过程.docx
《MATLAB仿真程序代码--模拟品牌传播的过程.docx》由会员分享,可在线阅读,更多相关《MATLAB仿真程序代码--模拟品牌传播的过程.docx(5页珍藏版)》请在冰点文库上搜索。
MATLAB仿真程序代码--模拟品牌传播的过程
附录二
MATLAB仿真程序代码
function[Et,Dt]=BrandSpread(u0,params)
%这个程序用来模拟品牌传播的过程
%n研究的区域的大小,为n*n的点阵
%t时刻
%u(x,y,t)t时刻(x,y)点的品牌信心值
%Q(x,y,t)t时刻(x,y)点的品牌信号值
%c(x,y)(x,y)点的品牌传播速率
%k(x,y)(x,y)点对品牌信号的敏感程度
%Initialization
ifnargin<2
params=strcut;
end;
ifisfield(params,'con')&&~isempty(params.con)con=params.con;
else
con=0;
end;
ifisfield(params,'maxf')&&~isempty(params.maxf)maxf=params.maxf;
else
maxf=10;
end;
ifisfield(params,'v')&&~isempty(params.v)
v=params.v;
else
v=1;
end;
ifisfield(params,'n')&&~isempty(params.n)
n=params.n;
else
n=10;
end;
ifisfield(params,'maxt')&&~isempty(params.maxt)
maxt=params.maxt;
else
maxt=20;
end;
t=1;%循环次数
tflag=1;%tflag=1时说明未达到平衡,需要做交换;tflag=0时则达到平衡,区域内不会出现信号交换,停止信号交换
u=u0;
%随机生成[1,10]上的均匀分布
k(:
:
)=round(9*rand(n))+1;
%根据u和k计算每一个点上的Q
Q(:
:
)=u(:
:
).*k(:
:
);
%顺序式传播,
%先由点(i,j)与其右边的点(i,j+1)进行交换
%再由点(i,j)与其下方的点(i+1,j)进行交换
E(t)=sum(sum(u))/n^2;%
D(t)=sum(sum((u-E(t)).^2))/n^2;
%随机获得一个需要观察的点(x_s,y_s)
x_s=round(rand*n)
y_s=round(rand*n)
f
(1)=u(x_s,y_s);
fprintf('Thecoordinateoftheobservepointis\n');
fprintf('(%d,%d)\n',x_s,y_s);
fprintf('it\tmeanvalue\tVariance\t\n');
fprintf('%d\t%.3e\t%.3e\t\n',t,E,D);
ift<=maxf
figure;
x=1:
n;
y=x;
[X,Y]=meshgrid(x,y);
mesh(X,Y,u(:
:
));
end;
while(tflag==1)
t=t+1;
tflag=0;
%Phase1
for(i=1:
n-1)
for(j=1:
n)
deltaQ=(k(i+1,j)*Q(i,j)-k(i,j)*Q(i+1,j))/(k(i+1,j)+k(i,j));
ifdeltaQ>=v
deltaQ=v;
end
if(deltaQ~=0)
tflag=1;
end
Q(i,j)=Q(i,j)-deltaQ-abs(deltaQ)*con;
Q(i+1,j)=Q(i+1,j)+deltaQ-abs(deltaQ)*con;
u(i,j)=Q(i,j)/k(i,j);
u(i+1,j)=Q(i+1,j)/k(i+1,j);
end
end
%Phase2
for(i=1:
n)
for(j=1:
n-1)
deltaQ=(k(i,j+1)*Q(i,j)-k(i,j)*Q(i,j+1))/(k(i,j+1)+k(i,j));
ifdeltaQ>=v
deltaQ=v;
end
if(deltaQ~=0)
tflag=1;
end
Q(i,j)=Q(i,j)-deltaQ-abs(deltaQ)*con;
Q(i,j+1)=Q(i,j+1)+deltaQ-abs(deltaQ)*con;
u(i,j)=Q(i,j)/k(i,j);
u(i,j+1)=Q(i,j+1)/k(i,j+1);
end
end
E(t)=sum(sum(u))/n^2;
D(t)=sum(sum((u-E(t)).^2))/n^2;
f(t)=u(x_s,y_s);
ift<=maxf
figure;
x=1:
n;
y=x;
[X,Y]=meshgrid(x,y);
mesh(X,Y,u(:
:
));
end;
fprintf('%d\t%.3e\t%.3e\t\n',t,E(t),D(t));
if(t>=maxt)
break;
end;
iftflag==0
break;
end;
end;
figure;
plot(1:
t,E,'b-','linewidth',1);
xlabel('time');
ylabel('meanvalue');
legend('changeofmeanvalue');
figure;
plot(1:
t,D,'r-','linewidth',1);
xlabel('time');
ylabel('variance');
legend('changeofvariance');
figure;
plot(1:
t,f,'g-','linewidth',1);
xlabel('time');
ylabel('U');
legend('changeofU');