(⼀)MATLAB中的输⼊与输出
先写⼀些,积累多点再来补充~
⼀输⼊
1.input
input的应⽤形式主要有以下两种,其中第⼀个输⼊的数字,第⼆个输⼊的是⽂本信息(⼀般为字符串)
1x = input(prompt)
2
3str = input(prompt,'s')
式中,prompt 代表要展⽰的⽂本信息,例如 a=input('please input a number\n') ,会在命令⾏上显⽰ please input a number ,此时可以⼿动输⼊⼀个数字(若输⼊其他格式例如字符会报错)。这是程序不会继续运⾏,⽽是等待输⼊数字后回车⽅可继续运⾏,⽂本输⼊同理。详见。
2.其它输⼊
输⼊数据也可以是导⼊和读取⽂件数据,MATLAB⽀持的数据格式多种多样,常见的主要有txt格式、xml格式等,再次仅对少数函数进⾏介绍,若想了解更多可以参考中的关于⽂本、表格、图像等格式⽂件的导⼊函数,本⽂主要介绍函数调⽤形式的输⼊输出。
2.1fscanf
⾸先,使⽤ fscanf 函数读取的⽂件格式为⽂本格式,应⽤到的三种形式如下:
A = fscanf(,) 将打开的⽂本⽂件中的数据读取到列向量 A 中,并根据formatSpec 指定的格式解释⽂件中的值。fscanf 函数在整个⽂件中重新应⽤该格式,并将⽂件指针定位在⽂件结尾标记处。如果 fscanf ⽆法将 formatSpec 与数据相匹配,将只读取匹配的部分并停⽌处理。fileID(⽂件标识符)可以使⽤fileID = fopen('x.txt','a'); 的⽅式打开⽂件得到。formatSpec为数据段部分格式。
A = fscanf(,,) 将⽂件数据读取到维度为 sizeA 的数组 A 中,并将⽂件指针定位到最后读取的值之后。fscanf 按列顺序填充 A。sizeA 必须为正整数或采⽤ [m n] 的形式,其中 m 和 n 为正整数(也可以是Inf 正⽆穷,表⽰读取对应的所有⾏/列/整块数据)。
[,] = fscanf(___) 还将返回 fscanf 读取到 A 中的字段数。对于数值数据,这是已读取的值数。您可以将此语法与前⾯语法中的任何输⼊参数结合使⽤。
然⽽,⼀般我是不⽤这个的。
2.2 load
load是MATLAB中最为常见的⼀种⽂件读取函数了,主要形式有以下五种:
load(filename)
load(filename,variables)
load(filename,'-ascii')
load(filename,'-mat')
load(filename,'-mat',variables)
可以是直接加载,形如 data=load('D:/'); 或者 data=load('D:/','x')读取 中的x变量,其中x也可替换为多个变量组成的元胞数组,例如将x替换为var{:},其中var={'x','y','z'};除了 txt⽂本⽂件,还可以是MATLAB的数据类型mat格式⽂件(会直接输出到⼯作区中),ascii⽂件格式如第三个式⼦所⽰,会创建⼀个包含该⽂件数据的双精度数组。
通过load⽅式加载的数据尤为常见,在许多MATLAB的扩展函数中都可以见到,加载的格式也算是⾮常丰富的,⽂本⽂件,数据库⽂件或是表格⽂件都可以。
2.3 fopen
fopen 是打开⽂件,在下⾯fprintf函数中⼜对其各种格式的详细说明。通过fopen打开⽂件后,可以使⽤⽂本⽂件或字符串读取函数testscan 来读取⽂件,调⽤格式如下:
fileID=fopen(filename);
C=testscan(fileID,formatSpec);
fclose(fileID);
打开⽂件后,testscan会尝试将⽂件中的数据与formatSpec中的转换设定符匹配。testscan函数在整个⽂件中按 formatSpec重复扫描数据,直⾄ formatSpec 不到匹配的数据时才停⽌。
另外,也可以参考以下这种做法,将数据处理成元胞数组再转化为字符数组,运⾏结果如下
fileID = fopen('D:/','r');
rowdata = textscan(fileID, '%s', 'DElimiter', '\n');% 获得每⾏数据
fclose(fileID);
whos rowdata
rowdata{1}
%rowdata{2},会报错,rowdata为{1,1}元胞数组
a=rowdata{1,1}
whos a
b1=a{1,1}
whos b1
⾄于转换后的字符数组要怎么处理便是⾃⼰的事情了,这是相对于复杂输⼊类型的读取⽅式,更详细部分可以参考。输⼊还是以 load 加载为主。
⼆输出
常见的输出形式主要有三种:
1.直接输出到命令⾏
MATLAB允许在脚本(M⽂件)或者命令⾏上直接输⼊变量名即可输出,这种⽅法应⽤起来较为简单⽅便,适合测试时使⽤。但⼀般输出时时按照系统默认格式进⾏输出,若要调整需要在程序前通过 format 修改命令⾏输出格式,例如 format long 设置命令⾏输出格式为固定⼗进制长格式,同理可以设置为 short 短格式,更多的数值格式见下表所⽰(这些在MATLAB⽂档中都可以到~)
数值格式
这些样式可控制数值变量的输出显⽰格式。
Style结果⽰例
short
(default)
固定⼗进制短格式,⼩数点后包含 4 位数。 3.1416
long长固定⼩数格式,double 值的⼩数点后包含 15 位数,single 值的⼩数点后包含 7 位数。 3.141592653589793 shortE短科学记数法,⼩数点后包含 4 位数。 3.1416e+00
longE长科学记数法,double 值的⼩数点后包含 15 位数,single 值的⼩数点后包含 7 位数。 3.141592653589793e
+00
shortG短固定⼩数格式或科学记数法(取更紧凑的⼀个),总共 5 位。 3.1416
longG 长固定⼩数格式或科学记数法(取更紧凑的⼀个),对于 double 值,总共 15 位;对
于 single 值,总共 7 位。
3.14159265358979
shortEng短⼯程记数法,⼩数点后包含 4 位数,指数为 3 的倍数。 3.1416e+000
longEng长⼯程记数法,包含 15 位有效位数,指数为 3 的倍数。 3.14159265358979e+
000
+正/负格式,对正、负和零元素分别显⽰ +、- 和空⽩字符。+
bank货币格式,⼩数点后包含 2 位数。 3.14
hex⼆进制双精度数字的⼗六进制表⽰形式。400921fb54442d18 rat⼩整数的⽐率。355/113
除此,也可以设置矩阵输出时的⾏距格式:
Style结果⽰例
compact隐藏过多的空⽩⾏以便在⼀个屏幕上显⽰更多输出。theta = pi/2 theta =
1.5708
loose添加空⽩⾏以使输出更易于阅读。theta = pi/2 theta =
1.5708
2 fprintf函数输出
fprintf函数是MATLAB函数中较为常见的⼀种(详见),因为它可以设置输出格式,较为灵活全⾯。最
为常见的⼀种形式为: fprintf('%s is a boy',boyname) ,其中 boyname 表⽰⼀个存储字符串的变量名,同理这种形式可以输出⼗进制数(%d)、⼋进制数(%o)、定点记数法的浮点数(%f)以及指数记数法的浮点数(%e),单个字符(%c)和字符串(%s)。
如是需要控制输出的长度,可以在百分号后加上数字,例如 %8s 输出长度为⼋(若实际字符串长度超过⼋会输出字符串原⾝,不会截断),在命令⾏上⾄少保持8个占位,不够⽤空格来补,⽽ %4.8f 则会输出4位整数加⼩数点加8位⼩数的数字格式,与字符串不同的时,整数不够⽤空格补,⼩数不够⽤ 0 来补。
前⾯所提的案例输出格式遵循右对齐的格式,若想变成左对齐则在百分号后数字或格式前加⼀个负号即可,例如 %-8s 。除此,我们还可以通过⼀些特殊的控制字符来维持输出格式的美观,例如 \t (⽔平)制表符,\n 换⾏符,\v 垂直制表符。
除此,fprintf函数还可以将数据输出到⽂件中存储起来,在MATLAB脚本中操作,格式案例如下:
1x = 0:.1:1;
2 A = [x; exp(x)];
3
4fileID = fopen('','w');
5fprintf(fileID,'%6s %12s\n','x','exp(x)');
6fprintf(fileID,'%6.2f %12.8f\n',A);
7fclose(fileID);
在输出前⾸先需要打开⽂件(fopen),输出结束后需要关闭⽂件(fclose),如上所⽰。其中,fopen函数⾥的是⽂件名以及标识符,标识符类别有以下8种,若是要创建新⽂件则是 w ,若是在原有⽂件⾥补充则是 a ,⼀般⽤到的就这两种。
'r'打开要读取的⽂件。
'w'打开或创建要写⼊的新⽂件。放弃现有内容(如果有)。
'a'打开或创建要写⼊的新⽂件。追加数据到⽂件末尾。
'r+'打开要读写的⽂件。
'w+'打开或创建要读写的新⽂件。放弃现有内容(如果有)。
'a+'打开或创建要读写的新⽂件。追加数据到⽂件末尾。
'A'打开⽂件以追加(但不⾃动刷新)当前输出缓冲区。
'W'打开⽂件以写⼊(但不⾃动刷新)当前输出缓冲区。
fclose 关闭⽂件,括号⾥⾯的fileID是⽂件标识符,即代表打开的⽂件,⽆特殊情况该语句也可以⽤ fclose('all') 关闭所有⽂件代替。⽽fprintf与前⾯输出到命令⾏的格式⼤致相似,不过在最前⾯加上了⼀个fileID~⽂件标识符⽽已。
ascii文件夹怎么创建3.disp
disp函数是直接输出,打印变量值或者打印字符串,形如 disp(x)和disp('x')表达的意思是不同的,前者是输出 x 的值,可以是字符串、整数、矩阵等等,⽽后者则是直接打印字符串 x ,打印完会直接换⾏,不像fprintf函数需要输⼊ \n 换⾏。同时,需要注意的是 disp 若是要在⼀⾏i打印字符串和变量值不能直接写成这种形式: disp('a is',a_value),这样会出现输⼊参数过多的错误(⽽在C#语⾔中使⽤$可以做到类似操作),但是可以写成类如以下形式来输出:
1name = 'Alice';
2age = 12;
3X = [name,' will be ',num2str(age),' this year.'];
4disp(X)
这样会在⼀⾏⾥输出 :Alice will be 12 this year.
⼤致的输⼊输出操作就到这⼉了,更多内容还需继续进修~⼀般来说这些输⼊输出就⾜够了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论