0%

memcpy和strcpy比较

函数memcpy比函数strcpy速度不会慢:

  1. 函数memcpy是按照机器的字长来拷贝的,现在主要是4字节;
  2. strcpy是单个字节拷贝的;
  3. memcpy函数被优化过;
  4. strcpy有个限制就是遇到’\0’就结束

Mark:当涉及到的两个对象在内存中如果是相互重叠的,则函数memcpy的执行结果是没有意义的,此时应该使用函数memmove。

左值

左值并不完全表示“可以赋值的东西”,更好的定义为:(在内存中)有特定位置的东西。所以,如果没有+1,就要特别注意了。

按值调用

C语言的所有调用都是按值调用,即将函数调用中的实参复制得到一个副本,然后传递给被调函数。所谓的“按引用调用”本质也是按值引用~Gotcha?

关于函数求值顺序

对于类似printf(“%d %d”,f(x),g(x));而言,因为函数调用时的参数求值顺序不确定,所以f()和g()没有确定的先后顺序,所以对于有歧义的i++和++i要特别注意。

安装

gnuplot或许是这个世界上用来分析和可视化数据的最强劲的工具,主要用来绘制2D/3D的数据或者函数图像,但是也包含数学计算、拟合等功能。

gnuplot全名应该读作 “new plot”。

所有的主流 Linux 发行版都包含 gnuplot,因此在 Linux 上安装很简单,比如在Redhat系列输入yum install gnuplot即可,而Debian系列输入apt install gnuplot即可。

对于MacOSX系统,可以通过MacPorts和Homebrew来进行安装。

在 Windows 下,可以直接到 gnuplot 在 sourceforge 的下载网页Download下载新版本(选择包含win64的exe文件即可),下载后即可安装使用。

启动

gnuplot是基于命令行的交互式绘图软件。打 一个终端,输入 gnuplot,随着程序启动,会出 现下面的信息:(如果是在 Windows 电脑上,双击 gnuplot.exe 后会自动打 一个命令行窗口)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ gnuplot

G N U P L O T
Version 5.2 patchlevel 7 last modified 2019-05-29

Copyright (C) 1986-1993, 1998, 2004, 2007-2018
Thomas Williams, Colin Kelley and many others

gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')

Terminal type is now 'qt'
gnuplot>

欢迎信息包括gnuplot的版本,修改日期,版权等信息。
此时就可以开始输入命令绘图了,或者输入quit和exit退出交互环境。

参考

主要参考《Gnuplot In Action》和《使用 gnuplot 科学作图》,请支持正版。

数学表达式

在gnuplot 里面表达数学公式是很简单的,很多与C语言类似,比如

  • 加、减、乘、除、乘方 用 +,-,,/,* 表示
  • 整数和浮点数 和 C 语 类似
  • 复数用包含在花括号内的 对实数表示,例如{3,5}表示 3 + 5i
  • gnuplot 含有丰富的数学函数,格式和 C 语 几乎相同。对于实数和复数,函数名是一样的。 下面的链接可以看到预定义的函数列表: http://www.gnuplot.info/docs_4.2/gnuplot.html#x1-5300013.1
  • 自定义函数 自定义函数很容易,例如 f(x)=x+1 定义一个一元函数,f(x,y)=x+y 定义一个二元函数。
  • π(圆周率) π 在 gnuplot 里用 pi 表示。

代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
gnuplot> print 3+8
11
gnuplot> print 9/4
2
gnuplot> print 9.0/4
2.25
gnuplot> f(x) = x**3
gnuplot> print f(4)
64
gnuplot> f(x,y) = x**3+y**2
gnuplot> print f(3,4)
43
gnuplot>

其中print命令用于把结果输出到屏幕上。

参考

主要参考《Gnuplot In Action》和《使用 gnuplot 科学作图》,请支持正版。

使用gnuplot来理解数据

gnuplot或许是这个世界上用来分析和可视化数据的最强劲的工具。

gnuplot绘制的图形不仅可以自己使用,还可以用于出版和演示。

gnuplot 的优点

  • 稳定、成熟、积极维护中
  • 自由的开源代码
  • 适用于很多平台Windows、Linux 、Mac OS X
  • 生成抛光性很好的图像
  • 支持大多数通用的图像格式
  • 可以直接读取文件作为输入
  • 有处理大数据集的能力(轻松处理百万级数据点),且速度很快
  • 资源消耗少

一些有用的库

使用gnuplot

1
gnuplot > plot "datafile" using 1:2 with boxes

在终端输入gnuplot后,就会进入一个交互环境,在该环境就可以输入命令了。

绘制正弦曲线

1
gnuplot > plot sin(x) with line linetype 3 linewidth 2

sin(x)

同时绘制多条曲线

1
gnuplot > plot sin(x) title 'sin(x)' with line linetype 3 linewidth 2, cos(x) title 'cos(x)' with line linetype 2 linewidth 2

sin(x)

参考

主要参考《Gnuplot In Action》和《使用 gnuplot 科学作图》,请支持正版。

Chapter 3 goes into more depth on the way gnuplot handles data. We will
talk about file handling, data transformations, and math.

参考

主要参考《Gnuplot In Action》,请支持正版。

坐标取值范围及刻度

gnuplot 默认的x取值范围为[-10,10],对于正弦函数而言,我们比较希望是+-π。
此时可以使用xrange参数来指定。

1
2
3
gnuplot > plot sin(6*x)
gnuplot> set xrange [-pi:pi]
gnuplot> replot

xrange用来指定横坐标的取值范围。

sin(x)-xrange

此时我们看到横坐标还是用数字表示,我们希望用π的来表示,如下:

1
2
3
gnuplot> set xtics pi
gnuplot> set mxtics 2
gnuplot> replot

sin(x)-xtics

此时的坐标我们看到是按照3.1415来显示的,其中xtics表示主刻度,mxtics(minor xtics)表示分刻度,每个主刻度之间分两个刻度显示。

此时我们希望3.1415用π来显示,如下还是使用xtics参数来调整。

1
2
gnuplot> set xtics ("-π" -pi, "-π/2" -pi/2.0,"π/2" pi/2.0,"π" pi)
gnuplot> replot

sin(x)-pi

此时的横坐标轴就比较完美了。

set xtics 命令直接规定了每个刻度的位置和显示的字符。每一个刻度对应三个参数:显示字 符、刻度位置、刻度等级。刻度等级为 0 时表示主刻度,等级为 1 时表示分刻度。对于主刻度 (等级为 0 时),表示等级的参数也可以省略不写。各个刻度的参数之间用逗号隔 。从上面的例 子我们还看出,显示字符可以为空,也就是只标刻度,不显示字符。

然后把纵坐标也修改一下,如下:

1
2
gnuplot> set ytics -1,0.5,1
gnuplot> replot

sin(x)-ytics

总结

本节新增了基本命令:

  • plot 绘制2D图形
  • replot 重绘图形
  • set 设置参数
  • unset 取消设置
  • key 表示图例
  • samples 表示采样数
  • xlabe/ylabel/title 设置x轴、y轴和title的参数

参考

主要参考《Gnuplot In Action》和《使用 gnuplot 科学作图》,请支持正版。