C语言实现基于投票规则的细胞自动机
算法介绍
首先我们先看一下“基于投票规则的细胞自动机”的定义:
基于投票规则的细胞自动机,实际上是具有如下限定条件的一种细胞自动机:
状态:0或1;
邻居:中心的3*3邻居;
规则:计数p表示中心的3*3邻居中1的个数(包括中心本身),if P<5,中心设置为0.否则设置为1 。
混沌随机序列:
一般我们采用混合光学双稳模型迭代方程实现混沌随机序列的产生:

题目要求:
现在给定系数A为4,Xb为2.5,要求生成一个长度为16的混沌序列{xi}。并且用一下方法将该序列转换为0 1序列:xi > 2.5 则赋值为1, 否则赋值为 0 。然后把这个序列排成4 * 4的0 1矩阵,并用上述的细胞自动机对该矩阵进行两次运算,给出最终的矩阵结果。
算法实现代码如下:
/*****************************************
Author: Nero
Data:2013/12/22
Deifning coefficient A as 4, Xb as 2.5;
*****************************************/ #include<stdio.h>
#include<math.h>
using namespace std;
const int A = ;
const float Xb = 2.5; void Rules_Impl(float P[],float dMatrix[][]); void Cellular_Automata(float dInit)
{
printf("dInit=%g\n\n",dInit);
int i ,j; //variables for counting
float dMatrix[][];
float P[];
float *X = new float[];
X[] = dInit; //Initializing X[0]
int count = ; //temp variable for counting index
for (i = ; i < ; i++)
{
X[i+] = * pow(sin(X[i]- Xb),); //Sequence with a length of 16;
}
//Print sequence
for (i = ; i < ; i++)
{
printf("%f\t",X[i]);
}
printf("\n\n"); for (i = ; i < ; i++)
{
X[i] = X[i]>2.5?:;
}
for (i = ; i < ; i++)
{
for (j = ; j< ; j++)
{
dMatrix[i][j] = X[count];
++count;
}
}
//Print Matrix
printf("The original matrix is \n");
for (i = ; i < ; i++)
{
for (j = ; j < ; j++)
{
printf("%g\t",dMatrix[i][j]);
}
printf("\n");
}
printf("\n"); //calculate the centers, Twice
for (i = ; i < ; i++)
{
Rules_Impl(P,dMatrix);
}
printf("The final matrix is \n");
for (i = ; i < ; i++)
{
for (j = ; j < ; j++)
{
printf("%g\t",dMatrix[i][j]);
}
printf("\n");
}
printf("\n");
} void Inter()
{
float Init;
printf("Input the init Num\n");
scanf_s("%g",&Init);
Cellular_Automata(Init);
} void Rules_Impl(float P[],float dMatrix[][])
{
//Four calculations for the center of the 3*3 neighbors
//Choose Matrix[1][1], Matrix[2][1], Matrix[1][2], Matrix[2][2] as centers
int i =, j = ; //Matrix[1][1]
for (i = ; i <; i++)
{
for (j = ; j < ; j++)
{
P[] += dMatrix[i][j];
}
}
//Matrix[2][1]
for (i = ; i<;i++)
{
for (j=;j <;j++)
{
P[]+=dMatrix[i][j];
}
}
//Matrix[1][2]
for (i = ; i<;i++)
{
for (j=;j <;j++)
{
P[]+=dMatrix[i][j];
}
}
//Matrix[2][2]
for (i = ; i<;i++)
{
for (j=;j <;j++)
{
P[]+=dMatrix[i][j];
}
}
dMatrix[][] = P[]<?:;
dMatrix[][] = P[]<?:;
dMatrix[][] = P[]<?:;
dMatrix[][] = P[]<?:;
}
其中Rules_Impl()函数的作用是进行细胞自动机运算。
Cellular_Automata()函数为主要功能实现函数,包括随机序列的产生,矩阵的产生以及对Rules_Impl()函数的调用。
C语言实现基于投票规则的细胞自动机的更多相关文章
- 转:从开源项目学习 C 语言基本的编码规则
从开源项目学习 C 语言基本的编码规则 每个项目都有自己的风格指南:一组有关怎样为那个项目编码约定.一些经理选择基本的编码规则,另一些经理则更偏好非常高级的规则,对许多项目而言则没有特定的编码规则,项 ...
- C语言中内存对齐规则讨论(struct)
C语言中内存对齐规则讨论(struct) 对齐: 现代计算机中内存空间都是按着byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地 ...
- [转载] 使用C/C++语言编写基于DSP程序的注意事项
原文地址:『转』使用C/C++语言编写基于DSP程序的注意事项作者:skysmile 1.不影响执行速度的情况下,可以使用c或c/c++语言提供的函数库,也可以自己设计函数,这样更易于使用“裁缝师 ...
- Tars | 第3篇 Tars中期汇报测试文档(Java语言实现Subset路由规则)
目录 前言 1. 任务介绍 2. 测试模拟方案 2.0 *前置工作 2.1 添加路由规则 2.2 添加存活节点 2.3 [输出]遍历输出当前存活节点 2.4 [核心]对存活节点按subset规则过滤 ...
- WCF学习笔记(基于REST规则方式)
一.WCF的定义 WCF是.NET 3.0后开始引入的新技术,意为基于windows平台的通讯服务. 首先在学习WCF之前,我们也知道他其实是加强版的一个面向服务(SOA)的框架技术. 如果熟悉Web ...
- C语言函数的作用域规则
“语言的作用域规则”是一组确定一部分代码是否“可见”或可访问另一部分代码和数据的规则. “同一函数中,不同的结构体成员名能相同,当变量处于不同的作用域时,名称可以相同. 注:作用域,其对象是变量, ...
- C语言编程规范—命名规则
C是一门朴素的语言,你使用的命名也应该这样.与Modula-2和Pascal程序员不同,C程序员不使用诸如“ThisVariableIsATemporaryCounter”这样“聪明”的名字.C程序员 ...
- Django模板语言(常用语法规则)
Django模板语言 The Django template language 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签 ...
- 【java规则引擎】一个基于drools规则引擎实现的数学计算例子
最近在研究JBPM工作流引擎,发现JBPM是基于Drools的,官方文档查看得知Drools是一款规则引擎.兴趣之下,仔细了解了下 Drools,Drools作为JBoss出品的一款开源推理和规则引擎 ...
随机推荐
- VS2012无法安装cocos2d-x-2.1.4 解决方法及VS2012新建coco2d-x项目(一)
转自:http://www.cnblogs.com/wangpei/admin/EditPosts.aspx?opt=1 (注:此方法是可行,仅供参考,建议大家直接看我的 一见命令解决vs安装并创建c ...
- careercup-高等难度 18.6
18.6 设计一个算法,给定10亿个数字,找出最小的100万个数字.假定计算机内存足以容纳全部10亿个数字. 解法: 方法1:排序 按升序排序所有的元素,然后取出前100万个数,时间复杂度为O(nlo ...
- python代码查询港澳通行证办理进度
查询港澳通行证办理进度查询的python 3.3代码.利用socket请求相关网站,获得结果后利用正则找出办理进度.其实用urllib代码会更简洁,不过当时在下还不熟悉urllib~ 直接上代码: i ...
- find your present (2)
Problem Description In the new year party, everybody will get a "special present".Now it's ...
- wamp修改多站点配置
本文介绍如果在wamp中修改配置支持多站点. 第1步,修改httpd.conf,增加8080端口的监听 #Listen 12.34.56.78:80Listen 80Listen 8080 第2步,修 ...
- 【Android 界面效果25】android中include标签的使用
在一个项目中我们可能会需要用到相同的布局设计,如果都写在一个xml文件中,代码显得很冗余,并且可读性也很差,所以我们可以把相同布局的代码单独写成一个模块,然后用到的时候可以通过<include ...
- 【安卓面试题】简述一下Android系统的架构?
安卓系统的架构分为四层:应用程序层,应用框架层,系统框架层和内核层. 应用程序层:开发者编写的供用户使用的应用 应用框架层:开发者构建应用程序可能用到的API, 例如ActivityManager 系 ...
- 浅析console和浏览器命令行API
一.console对象: F12或者Control+Shift+i(Win)/ Alt+Command+i(Mac)打开浏览器自带的开发工具,选择顶部tab中的最后一项console,这样你就可以尽情 ...
- POJ 3660 Cow Contest (闭包传递)
Cow Contest Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7690 Accepted: 4288 Descr ...
- 【CSS3】---结构性伪类选择器—nth-child(n)+nth-last-child(n)
结构性伪类选择器—nth-child(n) “:nth-child(n)”选择器用来定位某个父元素的一个或多个特定的子元素.其中“n”是其参数,而且可以是整数值(1,2,3,4),也可以是表达式(2n ...