찬성
반대
1
모으다
신고
공유하다

基于蒙特卡罗方法的一维意见传播模型
注:我学习数模时候写的捏
参数设定:n——持意见A的个体;
M——持意见B的个体;
其他说明:编写演化过程源程序时对于程序调试不熟悉,故加入了大量printf语句
来观察程序运行步骤。
源程序编写完成后在vs2010上始终无法正常运行,运行过程中常常在第四次循环开始出现-1075052543 858993461等数字。当程序在devc++上运行时则可正常运行。程序这个问题我始终无法解决。(据csdn所说,这是因为程序中出现了未定义行为,导致不同编译器运行结果不同,我尝试更改源程序代码但始终无法解决。)
一、设计思路(包括规则说明 参数设定)
演化规则:
参数设定:n——持意见A的个体;
M——持意见B的个体;
其他说明:编写演化过程源程序时对于程序调试不熟悉,故加入了大量printf语句
来观察程序运行步骤。
源程序编写完成后在vs2010上始终无法正常运行,运行过程中常常在第四次循环开始出现-1075052543 858993461等数字。当程序在devc++上运行时则可正常运行。程序这个问题我始终无法解决。(据csdn所说,这是因为程序中出现了未定义行为,导致不同编译器运行结果不同,我尝试更改源程序代码但始终无法解决。)
二、代码(关键部分加注释)
#include<stdio.h>
#include<time.h>
#include <stdlib.h>
int main()
{
double N=0,p=5;//意见比例
int a[100]={0},i=0,I=0;
int h=0,j=0,k=0;
int n=0,m=0;//意见人数
int b[100]={0};//暂存
int t=1,TIME=1000;
int x=0;//随机数
FILE *fp=fopen("yijian.txt","w+");
srand((unsigned)time(0));
for(i=0;i<100;i++)//初始值
{
x=rand()%10;
if(x<p)
{
a[i]=1;
}
else
{
a[i]=0;
}
b[i]=a[i];
//fprintf(fp,"%d ",b[i]);
}
fprintf(fp,"\n ");
while(t<TIME)
{
i=rand()%10;
for(I=i;i<I+100;i=i+1)//元胞机循环规则
{
h=(i+99)%100;
j=(i+101)%100;
k=(i+102)%100;
if(a[i]==a[j])
{
b[h]=a[i];
b[k]=a[i];
}
else
{
b[h]=a[j];
b[k]=a[i];
}
}
n=0;
for(i=0;i<100;i++)
{
a[i]=b[i];
if(a[i]==1)
{
n=n+1;
}
else
{
m=m+1;
}
printf("%d ",a[i]);
//fprintf(fp,"%d ",a[i]);
}
//fprintf(fp,"\n");
N=(double)n/100;
fprintf(fp,"%.2f ",N);//输出频率
t=t+1;
}
fclose(fp);
return 0;
}
三、参考文献
[1] —涵涵—,关于相同代码在vs2017和Dev-c++中结果不同的原因初探索:UB(undefined behaviour)(Z) 웹 링크(blog.csdn.net)선언본 사이트의 모든 글은 특별한 설명이나 표기가 없는 한 모두 본 사이트의 원본 발행물입니다. 개인이나 조직은 UP주의 동의 없이 본 사이트의 콘텐츠를 웹사이트, 서적 등 각종 미디어 플랫폼에 복사, 도용, 수집, 발행하는 것을 금지합니다. 본 사이트의 콘텐츠가 원저자의 정당한 권익을 침해했다면 처리를 위해 연락 주시기 바랍니다: DMCA 신고













这个人确实想隐藏自己(大概