声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 807|回复: 4

[综合讨论] 各位好 麻烦大家帮我调试下这个程序吧 多谢了

[复制链接]
发表于 2008-7-1 21:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
%-----------------------------------------------------------
  1. function v1=vgb(s,a,n)
  2. v1(1,1)=(a(s(1,1),s(2,1))+a(s(1,1),s(1,2))+a(s(1,1),s(2,2)))/3;
  3. v1(1,n)=(a(s(1,n),s(2,n))+a(s(1,n),s(1,n-1))+a(s(1,n),s(2,n-1)))/3;
  4. v1(n,1)=(a(s(n,1),s(n,2))+a(s(n,1),s(n-1,1))+a(s(n,1),s(n-1,2)))/3;
  5. v1(n,n)=(a(s(n,n),s(n,n-1))+a(s(n,n),s(n-1,n))+a(s(n,n),s(n-1,n-1)))/3;
  6. j=1;
  7. for i=2:n-1
  8. v1(i,j)=(a(s(i,j),s(i-1,j))+a(s(i,j),s(i+1,j))+a(s(i,j),s(i,j+1))+a(s(i,j),s(i-1,j+1))+a(s(i,j),s(i+1,j+1)))/5;
  9. end
  10. j=n;
  11. for i=2:n-1
  12. v1(i,j)=(a(s(i,j),s(i-1,j))+a(s(i,j),s(i+1,j))+a(s(i,j),s(i,j-1))+a(s(i,j),s(i-1,j-1))+a(s(i,j),s(i+1,j-1)))/5;
  13. end
  14. i=1;
  15. for j=2:n-1
  16. v1(i,j)=(a(s(i,j),s(i+1,j))+a(s(i,j),s(i,j+1))+a(s(i,j),s(i,j-1))+a(s(i,j),s(i+1,j-1))+a(s(i,j),s(i+1,j+1)))/5;
  17. end
  18. i=n;
  19. for j=2:n-1
  20. v1(i,j)=(a(s(i,j),s(i-1,j))+a(s(i,j),s(i,j+1))+a(s(i,j),s(i,j-1))+a(s(i,j),s(i-1,j+1))+a(s(i,j),s(i-1,j-1)))/5;
  21. end
  22. for i=2:n-1
  23. for j=2:n-1
  24. v1(i,j)=(a(s(i,j),s(i-1,j))+a(s(i,j),s(i+1,j))+a(s(i,j),s(i,j+1))+a(s(i,j),s(i,j-1))+a(s(i,j),s(i-1,j-1))+a(s(i,j),s(i-1,j+1))+a(s(i,j),s(i+1,j-1))+a(s(i,j),s(i+1,j+1)))/8;
  25. end
  26. end
复制代码

%-------------------------------------------------------------
  1. function f=eight1(s,n)
  2. f(1,1)=s(2,1)+s(1,2)+s(2,2);
  3. f(1,n)=s(2,n)+s(1,n-1)+s(2,n-1);
  4. f(n,1)=s(n,2)+s(n-1,1)+s(n-1,2);
  5. f(n,n)=s(n,n-1)+s(n-1,n)+s(n-1,n-1);
  6. j=1;
  7. for i=2:n-1
  8. f(i,j)=s(i-1,j)+s(i+1,j)+s(i,j+1)+s(i-1,j+1)+s(i+1,j+1);
  9. end
  10. j=n;
  11. for i=2:n-1
  12. f(i,j)=s(i-1,j)+s(i+1,j)+s(i,j-1)+s(i-1,j-1)+s(i+1,j-1);
  13. end
  14. i=1;
  15. for j=2:n-1
  16. f(i,j)=s(i+1,j)+s(i,j+1)+s(i,j-1)+s(i+1,j-1)+s(i+1,j+1);
  17. end
  18. i=n;
  19. for j=2:n-1
  20. f(i,j)=s(i-1,j)+s(i,j+1)+s(i,j-1)+s(i-1,j+1)+s(i-1,j-1);
  21. end
  22. for i=2:n-1
  23. for j=2:n-1
  24. f(i,j)=s(i-1,j)+s(i+1,j)+s(i,j+1)+s(i,j-1)+s(i-1,j-1)+s(i-1,j+1)+s(i+1,j-1)+s(i+1,j+1);
  25. end
  26. end
复制代码

%-------------------------------------------------------------
  1. function l=eight2(s,n)
  2. l(1,1)=((s(2,1)+s(1,2)+s(2,2))-3)./3;
  3. l(1,n)=((s(2,n)+s(1,n-1)+s(2,n-1))-3)./3;
  4. l(n,1)=((s(n,2)+s(n-1,1)+s(n-1,2))-3)./3;
  5. l(n,n)=((s(n,n-1)+s(n-1,n)+s(n-1,n-1))-3)./3;
  6. j=1;
  7. for i=2:n-1
  8. l(i,j)=((s(i-1,j)+s(i+1,j)+s(i,j+1)+s(i-1,j+1)+s(i+1,j+1))-5)./5;
  9. end
  10. j=n;
  11. for i=2:n-1
  12. l(i,j)=((s(i-1,j)+s(i+1,j)+s(i,j-1)+s(i-1,j-1)+s(i+1,j-1))-5)./5;
  13. end
  14. i=1;
  15. for j=2:n-1
  16. l(i,j)=((s(i+1,j)+s(i,j+1)+s(i,j-1)+s(i+1,j-1)+s(i+1,j+1))-5)./5;
  17. end
  18. i=n;
  19. for j=2:n-1
  20. l(i,j)=((s(i-1,j)+s(i,j+1)+s(i,j-1)+s(i-1,j+1)+s(i-1,j-1))-5)./5;
  21. end
  22. for i=2:n-1
  23. for j=2:n-1
  24. l(i,j)=((s(i-1,j)+s(i+1,j)+s(i,j+1)+s(i,j-1)+s(i-1,j-1)+s(i-1,j+1)+s(i+1,j-1)+s(i+1,j+1))-8)./5;
  25. end
  26. end
复制代码

%--------------------------------------------------------------
  1. function y1=sum1(s,n)
  2. y1=0;
  3. for i=1:n;
  4. for j=1:n
  5. if s(i,j)==2
  6. y1=y1+1;
  7. end
  8. end
  9. end
复制代码
  1. %基于CA的产业集群技术发展动力研究
  2. n=20;
  3. time=100;
  4. s=unifrnd(1,2,n,n);
  5. s=round(s);
  6. ran=rand(n);
  7. ran1=rand(n);
  8. ran2=rand(n);
  9. ran3=rand(n);
  10. for t=1:time
  11. a11=0.1;
  12. a12=1;
  13. a21=1.5;
  14. a22=1;
  15. p1=1:-0.01:0;
  16. p2=1:0.02:3;
  17. r=a12*p1(1,t);
  18. m=a21*p2(1,t)
  19. a=[a11,r;m,a22];
  20. w=0.9;
  21. v=zeros(n);
  22. ran=rand(n);
  23. t=1;
  24. vbt{t}=vgb(s,a,n);
  25. st{t}=s;
  26. ft{t}=eight1(s,n);
  27. lt{t}=eight2(s,n);
  28. s;
  29. vbt{t};
  30. ft{t};
  31. lt{t};
  32. for t=1:time;
  33. for i=1:n;
  34. for j=1:n;
  35. s0=st{t};
  36. s00=st{t};
  37. vb00=vgb(s00,a,n);
  38. if s0(i,j)==1
  39. s0(i,j)=2;
  40. else
  41. s0(i,j)=1;
  42. end
  43. vb0=vgb(s0,a,n);
  44. ft{t}=eight1(st{t},n);
  45. lt{t}=eight2(st{t},n);
  46. jz{t}=w*lt{t};
  47. if vb0(i,j)>=vb00(i,j)&jz{t}(i,j)>0.1&ran1(i,j)<=0.4&ft{t}(i,j)>=3&rand>ran3(i,j);
  48. st{t+1}(i,j)=s0(i,j);
  49. elseif vb0(i,j)>=vb00(i,j)&jz{t}(i,j)>0.1&ran1(i,j)>0.4&ran1(i,j)<=0.7&ft{t}(i,j)>=12&rand>ran3(i,j);
  50. st{t+1}(i,j)=s0(i,j);
  51. elseif vb0(i,j)>=vb00(i,j)&jz{t}(i,j)>0.1&ran1(i,j)>0.7&rand>ran3(i,j);
  52. st{t+1}(i,j)=s00(i,j);
  53. else
  54. st{t+1}(i,j)=s00(i,j);
  55. end
  56. end
  57. end
  58. st{t+1};
  59. vbt{t+1}=vgb(st{t+1},a,n);
  60. vbt{t+1};
  61. ft{t+1}=eight1(st{t+1},n);
  62. ft{t+1};
  63. lt{t+1}=eight2(st{t+1},n);
  64. lt{t+1};
  65. end
  66. end
  67. for t=1:time
  68. y1(t)=sum1(st{t},n);
  69. end
  70. t=1:time;
  71. plot(t,y1)
  72. title('产业集群技术发展动力')
  73. xlabel('模拟次数');ylabel('集群中改进技术的企业总数')
复制代码


我运行最后这段主程序的时候 matlab 没反应,好像进入死循环

[ 本帖最后由 sigma665 于 2008-7-2 10:44 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-7-2 09:16 | 显示全部楼层

回复 楼主 的帖子

都是子函数,怎么运行
 楼主| 发表于 2008-7-2 09:55 | 显示全部楼层

回复 2楼 的帖子 你好 最后这段就是主程序吧

我运行的时候是 把上面几个子程序分别保存起来 然后把最后这段,也就是下面这段放在主窗口运行

n=20;
time=100;
s=unifrnd(1,2,n,n);
s=round(s);
ran=rand(n);
ran1=rand(n);
ran2=rand(n);
ran3=rand(n);
for t=1:time
a11=0.1;
a12=1;
a21=1.5;
a22=1;
p1=1:-0.01:0;
p2=1:0.02:3;
r=a12*p1(1,t);
m=a21*p2(1,t)
a=[a11,r;m,a22];
w=0.9;
v=zeros(n);
ran=rand(n);
t=1;
vbt{t}=vgb(s,a,n);
st{t}=s;
ft{t}=eight1(s,n);
lt{t}=eight2(s,n);
s;
vbt{t};
ft{t};
lt{t};
for t=1:time;
for i=1:n;
for j=1:n;
s0=st{t};
s00=st{t};
vb00=vgb(s00,a,n);
if s0(i,j)==1
    s0(i,j)=2;
else
s0(i,j)=1;
end
vb0=vgb(s0,a,n);
ft{t}=eight1(st{t},n);
lt{t}=eight2(st{t},n);
jz{t}=w*lt{t};
if vb0(i,j)>=vb00(i,j)&jz{t}(i,j)>0.1&ran1(i,j)<=0.4&ft{t}(i,j)>=3&rand>ran3(i,j);
st{t+1}(i,j)=s0(i,j);
elseif vb0(i,j)>=vb00(i,j)&jz{t}(i,j)>0.1&ran1(i,j)>0.4&ran1(i,j)<=0.7&ft{t}(i,j)>=12&rand>ran3(i,j);
st{t+1}(i,j)=s0(i,j);
elseif vb0(i,j)>=vb00(i,j)&jz{t}(i,j)>0.1&ran1(i,j)>0.7&rand>ran3(i,j);
st{t+1}(i,j)=s00(i,j);
else
st{t+1}(i,j)=s00(i,j);
end
end
end
st{t+1};
vbt{t+1}=vgb(st{t+1},a,n);
vbt{t+1};
ft{t+1}=eight1(st{t+1},n);
ft{t+1};
lt{t+1}=eight2(st{t+1},n);
lt{t+1};
end
end
for t=1:time
y1(t)=sum1(st{t},n);
end
t=1:time;
plot(t,y1)
title('产业集群技术发展动力')
xlabel('模拟次数');ylabel('集群中改进技术的企业总数')
发表于 2008-7-2 14:44 | 显示全部楼层
主程序里循环嵌套太多,matlab效率很低
建议矢量编程。

另外,变量t好像重复使用了

评分

1

查看全部评分

 楼主| 发表于 2008-7-2 18:53 | 显示全部楼层

回复 4楼 的帖子

多谢阿 非常感谢  我再好好看看
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 01:22 , Processed in 0.071562 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表