最近一直在用python,导致学习的一些函数就有点混淆,趁着这会儿看代码,就再回顾下Matlab中print, fprint, fscanf, disp函数的用法
一、print() 函数可以把函数图形保存成图片:
minbnd = -4*pi;
maxbnd = 4*pi;
t = minbnd:0.1*pi:maxbnd;
plot(t, sin(t), 'g', 'Linewidth', 2);
line([minbnd, maxbnd], [0, 0]); %绘制x轴
axis([-10, 10, -2, 2]) %定义显示的坐标区间:x在(-10,10)之间,y在(-2,2)之间
grid on;
title('sin(x)');
xlabel('x');
ylabel('sin(x)');
print('-dpng','sin.png'); %保存为png图片,在Matlab当前的工作目录下保存的位置是在与该程序相同的大目录下面。
% 表示保存为png图片,文件名为sin.png,其中第一个参数可以是:
% -dbmp:保存为bmp格式
% -djpeg:保存为jpeg格式
% -dpng:保存为png格式
% -dpcx:保存为pcx格式
% -dpdf:保存为pdf格式
% -dtiff:保存为tiff格式
二、fprintf()函数格式化输出数据
语法格式 fprintf (format,data)
其中常见的格式有:
示例如下:
>> fprintf('d=%dn', 5)
d=5
>> fprintf('d=%fn', 5)
d=5.000000
>> fprintf('d=%f, a=%sn', 5,'qwe')
d=5.000000, a=qwe>> fprintf('d:%f, a:%sn', 5,'qwe')
d:5.000000, a:qwe>>fprintf('d=%f,n a=%sn', 5,'qwe')
d=5.000000,
a=qwe
其中 n 表示换行的意思;在引号里面的是自己想要显示的解释,可以用等号,也可以用冒号;
另外 fprintf()函数可以将数据按指定格式写入到文本文件.text中。
fp = fopen('test.txt','a+'); % 可以直接创建test.txt(以前可以不用存在)
fprintf(fp,'%dn %dn',123456,789); % 将123456和789写到test.txt文件中
fprintf(fp,'%sn %sn','China','ChongQing');% 将字符串China和ChongQing追加写到test.txt文件中
fclose(fp);
三、fscanf()函数对本文数据读取
一般有三种表示方法
A = fscanf(fileID,formatSpec)
% 将打开的文本文件中的数据读取到列向量 A 中,并根据 formatSpec 指定的格式 解释文件中的值。fscanf 函数在整个文件中重新应用该格式,并将文件指针定位在文件结尾标记处。
A = fscanf(fileID,formatSpec,sizeA)% 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后。fscanf 按列顺序填充 A。sizeA 必须为正整数或采用 [m n] 的形式,其中 m 和 n 为正整数。
[A,count] = fscanf(___)% 还将返回 fscanf 读取到 A 中的字段数。对于数值数据,这是已读取的值数。可以将此语法与前面语法中的任何输入参数结合使用。
如果 fscanf 无法将 formatSpec 与数据相匹配,将只读取匹配的部分并停止处理。该文本文件由文件标识符 fileID 指示。使用 fopen 打开 文件,指定字符编码,以及获取 fileID 值。读取文件后,请调用 fclose(fileID) 来关闭 文件。
注意:
-
读取函数 sscanf 和 fscanf 的格式设定符不同于写入函数 sprintf 和 fprintf 的格式。读取函数不支持精度字段。宽度字段指定可写入的最小值和可读取的最大值。(这个目前自己还没有咋注意到)
例子:
1. 将 文件内容 读取到 列向量 中
创建一个包含浮点数的示例文本文件。如下所示:
x = 100*rand(8,1);
fileID = fopen('nums1.txt','w');
fprintf(fileID,'%4.4fn',x); % 将数据按浮点数的格式 写入 到文本文件 nums1.txt
fclose(fileID);
结果:
type nums1.txt
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882
读取 文件数据并 按列顺序 填充输出数组 A。fscanf 在整个文件中重新应用格式 formatSpec。如下所示:
fileID = fopen('nums1.txt','r'); % 打开要读取的文件并获取文件标识符 fileID
formatSpec = '%f'; % 定义要读取的数据的格式。使用 '%f' 指定浮点数
A = fscanf(fileID,formatSpec)
fclose(fileID);
输出结果:
A = 8×1
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882
2. 将文件内容读取到 数组 中
创建一个包含整数和浮点数的示例文本文件。如下所示:
x = 1:1:5;
y = [x;rand(1,5)];
fileID = fopen('nums2.txt','w');
fprintf(fileID,'%d %4.4fn',y); % %d %4.4fn中间是空格
fclose(fileID);
结果:
type nums2.txt
2 0.9058
3 0.1270
4 0.9134
5 0.6324
读取 文件数据并按列顺序(注意是以列的顺序,也就是先存储A的第一列,然后第二列.......,) 填充输出数组 A。fscanf 在整个文件中重新应用格式 formatSpec。如下所示:
fileID = fopen('nums2.txt','r'); % 打开要读取的文件并获取文件标识符 fileID
formatSpec = '%d %f'; % 定义要读取数据的格式 %f也可用自动识别控制符%g代替
sizeA = [2 Inf]; % 定义输出数组形状,其中 n取inf 则表示读到文件末尾(m 不能取inf )A = fscanf(fileID,formatSpec,sizeA)
fclose(fileID);
输出结果:
A = 2×5
1.0000 2.0000 3.0000 4.0000 5.0000
0.8147 0.9058 0.1270 0.9134 0.6324转置该数组,以便 A 与文件中数据的方向匹配。如下所示:
A = A'
输出结果:
A = 5×2
1.0000 0.8147
2.0000 0.9058
3.0000 0.1270
4.0000 0.9134
5.0000 0.6324
3. 跳过文件中的特定字符
跳过示例文件中的特定字符并仅返回数值数据。创建一个包含温度值的示例文本文件。
str = '78°C 72°C 64°C 66°C 49°C';
fileID = fopen('temperature.dat','w');
fprintf(fileID,'%s',str);
fclose(fileID);
读取文件中的数字并跳过文本 °C。此外,还返回 fscanf。读取的值数。扩展的 ASCII 代码 176 表示度数符号。
fileID = fopen('temperature.dat','r');
degrees = char(176);
[A,count] = fscanf(fileID, ['%d' degrees 'C'])
fclose(fileID);
A =
78
72
64
66
49
count =
5% A 是一个包含文件中的数值的向量。count 指示 fscanf 读取五个值
四、disp()函数 用来显示或者输入数字、字符串或者数组
1. disp()函数 显示变量X的值,但不打印变量名(注意这里的输出是没有变量名的,即不带"a= ... b=...,c=...'')。
a=3; % 输出数字
disp(a);
b = 'hello world'; % 输出字符串
disp(b);
c = rand(5,5); % 输出数组
disp(c);输出的结果:
3
hello world
0.7577 0.7060 0.8235 0.4387 0.4898
0.7431 0.0318 0.6948 0.3816 0.4456
0.3922 0.2769 0.3171 0.7655 0.6463
0.6555 0.0462 0.9502 0.7952 0.7094
0.1712 0.0971 0.0344 0.1869 0.7547
一般情况下的先对变量定义,然后调用,直接输出变量名和数值
a=3;
b = 'hello world';
c = rand(5,5);
a
b
c输出的结果:
a =
3
b =hello world
c =0.4173 0.4893 0.7803 0.1320 0.2348
0.0497 0.3377 0.3897 0.9421 0.3532
0.9027 0.9001 0.2417 0.9561 0.8212
0.9448 0.3692 0.4039 0.5752 0.0154
0.4909 0.1112 0.0965 0.0598 0.0430
2. 一种显示变量的方法是键入它的名称,但是这会显示一个开头的“X =”,这并不总是理想的,如果一个变量包含一个空数组,disp返回时不显示任何内容。
a=3;
disp(['a=',num2str(a)]); % num2str函数将任何数值转换为字符b = 'hello world';
disp(['b=',num2str(b)]);c = rand(5,5);
disp('c=');
disp(c);输出结果:
a=3
b=hello world
c=
0.6443 0.9390 0.2077 0.1948 0.3111
0.3786 0.8759 0.3012 0.2259 0.9234
0.8116 0.5502 0.4709 0.1707 0.4302
0.5328 0.6225 0.2305 0.2277 0.1848
0.3507 0.5870 0.8443 0.4357 0.9049
3. 在同一行显示多个变量,这里有三种方法可以在命令窗口的同一行显示多个变量值。
(1)、使用 [ ] 操作符将多个字符串连接在一起。使用num2str函数将任何数值转换为字符。 使用disp 显示字符串。
>name = 'Alice';
>>age = 12;
>>X = [name,' will be ',num2str(age),' this year.'];
>>disp(X)
(2)、使用 sprintf 创建一个字符串,然后用disp显示它。
>>name = 'Alice';
>>age = 12;
>>X = sprintf('%s will be %d this year.', name,age);
>>disp(X)
(3)、使用 fprintf 直接显示字符串,无需创建变量。但是,要正确地终止显示,必须使用换行(n)。
>>name = 'Alice';
>>age = 12;
>>fprintf('%s will be %d this year.n',name,age);
1.matlab的输出(命令窗口、fprint函数、disp函数)_csdn_1HAO的博客-CSDN博客_matlab输出函数
2. C语言之文件读写——fscanf(),fprintf()详解_追求卓越583的博客-CSDN博客_fscanf读取txt文件
3. Matlab中fscanf函数使用_jk_101的博客-CSDN博客_fscanf matlab
4. Matlab基本函数----disp函数_爱听雨声的北方汉的博客-CSDN博客_matlab中disp函数



