APP下载

C语言在模型求解中的应用

2018-08-22涂小琴

现代计算机 2018年22期
关键词:二进制像素点C语言

涂小琴

(云南师范大学文理学院,昆明 650222)

0 引言

近年来数学建模竞赛越来越受到学校与学生的重视,数学建模竞赛在提高学生运用计算机能力来解决实际问题上起到了积极的作用。现在很多非数学学生都参与了数学建模竞赛,有的是计算机相关的专业,有的是物理相关的专业,有的是数学相关的专业,还有自动化相关的专业等,在现在大学的课程当中,有很多的理科专业都会学一门基础的计算机语言类课程,那就是C语言。对于一些从来没有学过MATLAB的学生来讲,在数学建模中应用C语言来解决问题遇到的问题,无疑就是首选了。

1 C语言特点

C语言是一种面向过程的语言,用户创建过程或函数来执行他们的任务。面向过程的语言是很容易学,因为它遵循的算法来执行你的语句。要使用面向过程的语言开发程序,你需要画/编写算法,然后开始转换成程序或功能。另外,C语言执行速度较快,也提供了大量的函数,程序员还可以根据需要自行编写函数,用户自定义的函数还可以进行扩展,同时,C语言还是一种结构化的程序设计语言。

2 在计算方面的应用

C语言中有很多的数学函数,这些数学函数可以帮助用户在计算中解决问题,有三角函数、反三角函数、对曲三角函数、指数与对数函数、取整函数等,这些函数可以帮忙解决一些数学中的计算问题。当然,能解决计算问题的还不只是这些函数,还可以运用数学中的算法来编写程序解决问题,例如,想要得到已知数中的质数,或想要知道多项式的值:

当x=5时,f(x)的值是多少?

此时,可以运行程序编程来解决此问题,对多项式进行分析

通过以上运算我们知道,求多项式f(x)的值,首先求多项式最内括号中的值。

即求:

然后逐步向外层计算:

观察发现,求多值式f(x)的值,即可以转化为以下:

至此,多项式f(x)的运算就能变成C语言中的循环运算。

运算结果如图1所示。

图1 运行结果图

3 模型求解中的应用

在数学建模竞赛中,建立模型之后,需要有相应的工具来进行求解,虽然在数值计算上C语言没法和MATLAB相提并论,但C语言也有自己的优势,就拿近几年的全国大学生数学建模竞赛的题目“碎纸片的拼接复原”来讲,在复原时,建好模型后,采用的算法就可以用C语言来进行。

3.1 模型的建立

在不经过处理的情况下,图片与图片之间是无法进行二进制的匹配的。但是,数据化后,在制定的匹配原则下,便可以相似度基准进行匹配。

将题目所给的纸片图片转化成0-1矩阵[1]。将白色像素点转化为数字“1”,黑色像素点转化为数字“0”(用二进制数组“1”和“0”分别表示黑、白像素点),然后,我们可以将生成的矩阵导入Excel电子表格中,以实现了图片数据化。

如图2所示。

由于图像像素化后,已经形成了微观的细小的像素点(而且像素点只有黑色和白色两种颜色),严格意义上,任何文字、图像、半个文字、半个图像等都能形成二进制代码(计算机语言就是二进制),而且像素越高,则越精确。所以,我们制定以下匹配思想:先通过算法进行纸条间的匹配,匹配后再通过匹配度来进行人工干预。首先人为确定出最左侧的首张纸条,根据其右侧的边缘上留下的墨迹,与其他的纸片左侧边缘进行比较,选择出相似度最高的一片,便能够匹配在一起。

图2 像素化图

表1 匹配原则表

若设α表示匹配原则下匹配的结果(二进制0、1值),β表示相似度的百分比,则可以得到以下公式:

3.2 模型的求解

在对纸条进行匹配时,可利用C语言进行编程来实现,将数据进行处理,转换成.txt文件,并将纸片的数据存储为数组文件,将数组的第一列数据,与另一个数组的最后一列数据进行匹配,若相同,则结果为1,若相异,则结果为0。

关键代码如下:

当数据很大时,需要借助程序来帮我们解决问题。运用C语言进行编程对相似度的最大值与序号对应关系进行处理,优化了算法,减少了大量的人工对比的运算步骤。

4 结语

C语言的运算速度比较快,当建模过程中,遇到了数据量较大的情况,第一种想法应该是借助程序来解决问题,若有规律可循,则可以运用C语言中的循环,或者是直接写一个解决此类问题的函数,在需要的时候进行调用。这对于不熟悉MATLAB的学生来讲,也是一种处理大量数据的方法。

猜你喜欢

二进制像素点C语言
图像二值化处理硬件加速引擎的设计
用二进制解一道高中数学联赛数论题
基于局部相似性的特征匹配筛选算法
有用的二进制
互联网+教育背景下的C语言程序设计教学改革探究
基于Visual Studio Code的C语言程序设计实践教学探索
有趣的进度
51单片机C语言入门方法
一种X射线图像白点噪声去除算法
基于canvas的前端数据加密