跳转到内容

Octave 编程教程/文本和文件输出

来自维基教科书,开放书籍,开放世界

disp 函数

[编辑 | 编辑源代码]

disp 函数以与简单地输入变量名称相同的方式显示变量的值(标量、向量、矩阵、字符串等)。例如,

octave:1> x = [1, 2, 3]
x =

  1  2  3

octave:2> disp(x)
  1  2  3

然而,变量名不会显示。您还可以显示计算结果,而不会显示通常在其之前的ans =

octave:3> log(10)
ans = 2.3026
octave:4> disp(log(10))
2.3026

disp 的输出取决于format 命令。

octave:5> format long
octave:6> disp(log(10))
2.30258509299405

可以使用fdisp 将显示的值打印到屏幕、保存到字符串或保存到文件。

octave:7> s = disp(log(10))
s = 2.30258509299405

请注意,s 是一个包含上面显示字符的字符串

文件输出

[编辑 | 编辑源代码]

fdisp 函数可用于将值保存到文件。在执行此操作之前,我们必须打开一个文件。这可以通过使用fopen 命令来完成。

  • fopen(filename, mode) 打开一个文件并返回其标识符。filename 参数是一个字符串,可以是当前目录中任何新文件或现有文件的名称。mode 参数是一个字符串,指定文件是打开用于
  • 读取 (r)、
  • 写入 (w),还是
  • 追加 (a)。

当文件以写入方式打开时,其内容将被擦除并替换为新数据。要保留文件中现有的数据并追加到其末尾,请使用追加模式。

octave:10> file_id = fopen('mydata.txt', 'w');

这里,file_id 只是一个变量名,我们使用它来告诉 Octave 要写入哪个文件。

  • fdisp(file_id, value)value 写入由file_id 标识的文件。

写入文件的输出将与disp 命令的输出完全相同。

在将所有数据写入文件后,关闭文件非常重要。 关闭文件告诉 Octave 完成任何可能仍在等待的输出,并释放文件,以便其他用户或程序可以打开它。

  • fclose(file_id) 关闭由file_id 标识的文件。

printf 函数

[编辑 | 编辑源代码]

printf 函数比disp 强大得多,因此使用起来也更复杂一些。使用printf,您可以精确定义值的输出应是什么样子。这包括指定

  • 要显示的有效位数;
  • 数字的格式(整数、实数、科学记数法等);
  • 在值之前或之后显示的其他输出。

由于使用printf 格式化输出有许多不同的方法,因此我们在这里只使用示例讨论基础知识。有关更完整的信息,请键入

doc printf

在 Octave 中,并使用空格键翻阅帮助。

输出到屏幕、字符串或文件

[编辑 | 编辑源代码]

printf 函数在其屏幕上显示其输出。使用sprintf 将结果返回到字符串中,使用fprintf 将其写入文件。请注意,fprintf 需要一个额外的参数来指定文件标识符。

  • printf(format, value, ...)
  • sprintf(format, value, ...)
  • fprintf(fid, format, value, ...)

请注意,这些函数可以同时输出多个值,有关详细信息,请参见下一节。

格式字符串

[编辑 | 编辑源代码]

让我们看一个例子。

octave:18> x = 10.1;
octave:19> y = 5.5;
octave:20> z = 'test';
octave:21> printf('An integer: %i. A real: %f. This is a %s.\n', x, y, z);
An integer: 10. A real: 5.500000. This is a test.

重要的是第 21 行中printf 函数的第一个参数。它指定了printf 的输出应是什么样子。本质上,百分号 (%) 表示应将一个值放置在其在格式字符串中的位置。在格式字符串中

'An integer: %i. A real: %f. This is a %s.\n'

%i 将被替换为一个整数,%f 将被替换为一个实数 (f 表示浮点数),%s 将被替换为一个字符串。整数、实数和字符串的值作为参数传递给printf,位于格式字符串之后。请注意,上面的示例中x 等于 10.1,但显示的值为 10,因为我们指定了printf 应该显示一个整数。最后,字符串末尾的\n 告诉 Octave 移动到新的一行。

下一个示例演示了以下类型

  • 整数 (%i),
  • 实数 (%f),
  • 科学记数法 (%e),
  • 百分号 (%%)。

有关更多类型,请参阅 Octave 文档。

octave:22> x = 10.34;
octave:23> printf("x is a real number: %f (%e in scientific notation).\n", x, x);
x is a real number: 10.340000 (1.034000e+01 in scientific notation).
octave:24> printf("Write percentages as %i%%.\n", x);
Write percentages as 10%.

请注意

  • %e 格式将值输出为 的形式,其中 b 为整数;
  • 变量x 在第 23 行传递给printf 两次,因为我们希望将其输出两次(以不同的格式);
  • 第 24 行的双百分号 (%%) 输出一个单百分号。

我们可以通过指定以下内容来进一步自定义值的输出

  • 输出的宽度,以及
  • 输出的精度。

宽度允许您右对齐数字,并在百分号和格式说明符之间指定。例如,

octave:36> x = 10;
octave:37> y = pi;
octave:38> z = 'test';
octave:39> printf("%9i\n%9f\n%9s\n", x, y, z);
       10
 3.141593
     test

请注意,在printf 中,每个格式说明符都包含一个整数 (9)。这告诉printf 使用 9 列输出整数、实数和字符串。

精度参数的效果取决于输出类型。它最明显的用法是指定在实数的小数点后显示的位数。精度在宽度之后指定,并由一个点 (.) 前缀。

octave:40> printf("%9.3f\n", pi);
    3.142

这将使用 9 列和小数点后 3 位显示 π。请注意,数字是四舍五入的。有关精度参数的其他用途(例如,用于整数和字符串),请参阅 Octave 帮助。

输出矩阵

[编辑 | 编辑源代码]

当传递给printf 函数的值为矩阵或向量时,将打印其中的所有值。如果格式字符串中只有一个格式说明符,则它将用于矩阵中的每个值。

octave:51> A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
octave:52> printf("%i\n", A)
1
4
7
2
5
8
3
6
9

请注意,值是从矩阵中以列优先顺序读取的,即首先显示第一列的所有值,然后是第二列,依此类推。

如果格式字符串中有多个格式说明符,printf 将循环遍历它们。

octave:57> printf("[%i, %.1f, %.2e]\n", A)
[1, 4.0, 7.00e+00]
[2, 5.0, 8.00e+00]
[3, 6.0, 9.00e+00]

值仍然以列优先顺序读取。


返回Octave 编程教程索引

华夏公益教科书