matlab中fid=fopen('magic.m','r') 其中fid 和 r 分别代表什么含义

作者&投稿:权崔 (若有异议请与网页底部的电邮联系)
MATLAB是一种基于什么编程语言的语言?~

  MATLAB是一种对技术计算高性能的语言。
  它集成了计算,可视化和编程于一个易用的环境中,在此环境下,问题和解答都表达为我们熟悉的数学符号。
  典型的应用有:

数学和计算
算法开发
建模,模拟和原形化
数据分析,探索和可视化
科学与工程制图
应用开发,包括图形用户界面的建立
MATLAB是一个交互式的系统,其基本数据元素是无须定义维数的数组。
  这让你能解决很多技术计算的问题,尤其是那些要用到矩阵和向量表达式的问题。而要花的时间则只是用一种标量非交互语言(例如C或Fortran)写一个程序的时间的一小部分。

一、字符和字符串
在MATLAB中不管是字符,还是字符串都是用单引号。而在C、C++、C#、Java等语言中,字符是用单引号的,字符串则必须用双引号。因此在MATLAB中如果需要在字符串中用到单引号的话,就要用两个单引号来代替。
如:
>> a='this''is an apple'
a =
this'is an apple
同理,如果字符串中需要双引号的话,可以用四个单引号来代替。如下:
>> b='I''''am Tim'
b =
I''am Tim
在MATLAB中的字符串连接,我们可以使用一对中括号。当然,这种连接方式也适用于向量、矩阵等的连接。如下:
>> c=[a b]
c =
this'is an appleI''am Tim
>> a1=[1 2];b1=[3 4];
>> c1=[a1 b1]
c1 =
1 2 3 4
>> c2=[a1;b1]
c2 =
1 2
3 4
但是,对于字符串的连接不能使用加号(+)来进行。这点和在C++、C#、Java等语言中是不一样的。因为在MATLAB中这些字符串也是以矩阵的形式存储的,你要是用加号的话,需要两个矩阵的大小一致。比如:
>> a2='hello';b2='mustb';
>> a2+b2
ans =
213 218 223 224 209
但是,很明显,加完之后都是一系列的值了。本来,这些字符串也是以数值的形式存储的。而我们要取的字符串中某一个字符的时候,也是很方便的,直接像引用矩阵的元素一样。如下:
>> a2(1)
ans =
h
>> a2(4)
ans =
l
>> find(a2>'i')
ans =
3 4 5
可以看到,a2里面在字母i后面的字符有第3、4、5个字符,也就是llo了。
在MATLAB中要将一个数字转换为字符可以用num2str,将字符转换为数字可以用str2num。如下:
>> stra1=num2str(a1)
stra1 =
1 2
>> class(stra1)
ans =
char
>> strb1='[3 4]';
>> str2num(strb1)
ans =
3 4
对于strb1,我们可以使用eval函数,该函数可以将字符串作为一个MATLAB命令去执行。如下:
>> p=eval(strb1)
p =
3 4
相当于p=[3 4]。
当然了,C语言里面的sprintf、fprintf函数我们都是可以在MATLAB中使用的。比如:
>> sprintf('Tim is %d years old.',24)
ans =
Tim is 24 years old.
至于fprintf函数,则需要用fopen去打开一个文件,然后写入数据进去。如下:
>> fd=fopen('a.txt','w+');
>> fprintf(fd,'I am Tim.
');
>> fprintf(fd,'My age is %d
',24);
>> fclose(fd);
然后,用MATLAB Editor打开MATLAB当前目录下的a.txt就可以看到:

但是,当你用记事本打开的时候会看到:

这是因为在Windows上要想换行需要
,而不能单是


二、if语句、for语句、switch语句、while语句、try-catch语句都以end结尾
在MATLAB中,没有goto和do…loop和do…while语句。而且语句的结尾都是以end结尾的。
>> t=4;
>> if(t<5),disp('t is smaller than 5.'),end
t is smaller than 5.
当然,if语句也可以有else语句。
>> if(t>5),disp('t is bigger than 5.'),else,disp('t is smaller than 5.'),end
t is smaller than 5.
还可以用elseif。
>> if(t>5),disp('t is bigger than 5.'),elseif(t==5),disp('t is equal 5.'),else,disp('t is smaller than 5.'),end
t is smaller than 5.
在MATLAB中,由于矩阵的索引都是从1开始的,这点和C、C++、C#、JAVA等语言是不一样的。所以,在循环的时候建议从1开始循环,而且循环的时候不推荐用变量i和j。因为这两个变量在MATLAB中表示的是复数的虚部变量。当然,如果你的程序里面没有复数,就不用怕。如果有复数,就要小心了。
之所以从1开始,是因为大多数时候我们使用循环是为了依次能访问到矩阵的每一个元素,所以,如果矩阵的索引出现了0,那么就会报出错误。所以,从1开始循环,是一种很好的习惯,而不是要求你必须这样做。
而且,在for循环中,你的循环变量不仅可以是一个数,也可以是一个向量。看下面的程序:
>> aa=[1 2;3 4; 5 6;7 8];
>> for i=aa,disp(i),end
1
3
5
7
2
4
6
8
>> aa
aa =
1 2
3 4
5 6
7 8
也就是说,i第一次的值是aa的第一列,i第二次的值是aa的第二列。这样的话,这个循环变量i就不仅仅是一个数了,二是一列数。
在MATLAB中,switch语句中是不用break的,而且默认的选项不是default,而是otherwise。如下:
a=5;
switch(a),
case 1,
disp('a is 1.');
case 2,
disp('a is 2.');
case 5,
disp('a is 5.');
otherwise,
disp('sorry, i do not know.');
end
还需要注意的是case后面没有分号,而C、C++、C#、Java等语言中是必须是分号的。在MATLAB中可是没有分号,我程序中的逗号,也可以是没有的。指向上面的程序,在MATLAB中的输出是:
a is 5.
至于while语句的使用和C、C++、C#、Java等语言中的while基本上是一致的。如下:
a=5;
b=0;
while a>0
b=b+a;
a=a-1;
end
b
a
Matlab命令窗口的输出是这样的:
b =
15
a =
0
try-catch语句一般是用来捕捉错误的。
try
a=input('Input a number: ');
catch
error('unknown error.');
end
当运行上面的程序,在MATLAB中输入:
Input a number: #
??? Error using ==> tim_try at 4
unknown error.

三、变量不用声明
在MATLAB中的变量是可以不用声明的,这点和C类语言和Java是有很大区别的。但是,为了程序更清晰和加快程序的执行速度,提供初始化和声明有时是必要的。不如,
b=[];
for i=1:10
b=[b i];
end
b
在MATLAB命令窗口的输出如下:
b =
1 2 3 4 5 6 7 8 9 10
如果你不初始化b为空的话,如下:
for i=1:10
b=[b i];
end
b
在命令窗口的输出如下:??? Undefined function or variable 'b'.
上面说过了,中括号[]可以用来合并向量的,这里变量b不存在,因此不能合并。所以会出错。

四、没有++、--操作符
在MATLAB中是没有++和--操作符的,因此需要转换。如a++; 可以转化为a=a+1;至于++a;你只需要将a=a+1的位置放到前面就可以了。

五、点乘、点除,但没有点加、点减
在点乘,是矩阵中的对应元素相乘。而不是矩阵的乘法。点除也是同样道理,对应元素想除。至于点加,就相当于加法。因为加减法本身就是对应元素的加减。

六、左除和右除
在C类和Java等语言中,除法就是一个操作符(/),但在MATLAB中(/)和(\)是有区别的。/代表的是右除,\代表的是左除。
>> A=[1 2;3 4];B=[5 6;7 8];
>> C1=A\B
C1 =
-3 -4
4 5
所以A左除B,就相当于A的逆矩阵乘B。
>> inv(A)*B
ans =
-3.0000 -4.0000
4.0000 5.0000
那么可想而知,A右除B,就相当于A乘B的逆矩阵。
>> A/B
ans =
3.0000 -2.0000
2.0000 -1.0000
>> A*inv(B)
ans =
3.0000 -2.0000
2.0000 -1.0000

七、MATLAB的编程思想
当你用MATLAB来写程序的时候,尽量以向量、矩阵为单位来考虑问题。也就是在MATLAB中常常能用一个点乘来代替多个循环的操作。也就是用向量化的操作来代替循环,这样能够大大的提高MATLAB程序的运行速度。
举个简单的例子:
clear all
clc
a=round(rand(100)*100);
b=round(rand(100)*100);

tic
f1=a.*b;
toc

tic
for i=1:100,
for j=1:100,
f2(i,j)=a(i,j)*b(i,j);
end
end
toc
在命令窗口的输出如下:
Elapsed time is 0.000035 seconds.
Elapsed time is 0.001871 seconds.
如果我们给f2初始化下,看看能不能加快速度。
clear all
clc
a=round(rand(100)*100);
b=round(rand(100)*100);

tic
f1=a.*b;
toc

f2=zeros(100);
tic
for i=1:100,
for j=1:100,
f2(i,j)=a(i,j)*b(i,j);
end
end
toc
此时,命令窗口的输出如下:
Elapsed time is 0.000024 seconds.
Elapsed time is 0.000147 seconds.
可以看到后面的循环的时间明显提高了很多。那么我们为上面的点乘运算的f1也初始化的话,速度会如何?
Elapsed time is 0.000022 seconds.
Elapsed time is 0.000146 seconds.
可以看到速度提升的不是很明显。如果你将a和b的维数增长到10000的话,提示的速度就明显了很多了。

fopen

Open file, or obtain information about open files

Syntax

fid = fopen(filename)
fid = fopen(filename, mode)
[fid, message] = fopen(filename, mode, machineformat)
[fid, message] = fopen(filename, mode, machineformat, encoding)
fids = fopen('all')
[filename, mode, machineformat, encoding] = fopen(fid)

Description

fid = fopen(filename) opens the file filename for read access. (On PCs, fopen opens files for binary read access.)

fid is a scalar MATLAB integer, called a file identifier. You use the fid as the first argument to other file input/output routines. If fopen cannot open the file, it returns -1. Two file identifiers are automatically available and need not be opened. They are fid=1 (standard output) and fid=2 (standard error).
简而言之,r表示打开问文件是为了读取数据
fid值表示是否成功


fid是什么意思 matlab
matlab习惯用fid操作文件知,其实用其他字母也可以,多个文件可用fid1,fid2来表道示。MATLAB包括拥有数百个内部函数的主包和三十几种工具包。工具包又可以分为功能性工具包和学科工具包。功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能。学科工具包是专业性比较强的工具包...

matlab中fid=fopen('magic.m','r') 其中fid 和 r 分别代表什么含义...
fid = fopen(filename) opens the file filename for read access. (On PCs, fopen opens files for binary read access.)fid is a scalar MATLAB integer, called a file identifier. You use the fid as the first argument to other file input\/output routines. If fopen cannot open the ...

Matlab中如何实现二进制文件的读写?
1)写二进制文件 \\x0d\\x0afwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为: COUNT=fwrite(fid,A,'precision') \\x0d\\x0a说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uc...

请教MATLAB里面fprintf语句的意思
fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:数据的格式化输出:fprintf(fid, format, variables)按指定的格式将变量的值输出到屏幕或指定文件 fid为文件句柄,若缺省,则输出到屏幕 1 for standard output (the screen) or 2 for standard error. If FID is omitted, output goes...

matlab执行完fread后fid值为多少
这两个函数、变量的关系、用法是:a=fread(fid),其中,fid是文件的识别符,代表文件,fread读的数据赋给变量a 。不存在执行完fread后fid值为多少的问题,fid不变。

matlab中fprintf和disp的有多大的区别啊?
区别很大,具体如下:一、输出的目标不一样 Disp用来直接显示在命令行里,非常轻量,Fprintf是f(ile)printf(ormat),可以用来直接进行文件的写入,如果不指定文件的fid那么直接输出到命令行。二、用法不同 disp即display,可用来显示字符串、计算结果等。例子:x= [1 2 3];disp(['The values of x...

MATLAB中fprintf后面的括号里有个1是什么意思
COUNT=FPRINTF(FID,FORMAT,A,...) 将矩阵A实部格式化,在指定FORMAT字符串控制下,写入FID文件ID指定文件中,COUNT是成功写入的字节数。FID由FOPEN获得的整数文件ID,也可设为1:标准输出(屏幕)(缺省的是此情况);2:标准错误

matlab 的fread函数,[a,count]=fread(fid,size,precision,skip),sk...
[A,count] = fread(fid,size,precision,skip) 该语句利用Fread函数,从指定文件中读取二进制数据并写入矩阵A。Count参数用于返回成功读入的元素数量,为可选参数。输入参数中,fid是用fopen打开文件时返回的文件标识;size用于指定读入数据的元素数量,该参数可选,如果不指定则将文件的全部数据读入;precis...

Matlab中 fopen函数
FOPEN函数是Matlab用于打开文件的工具,其基本使用格式为 "FID = FOPEN(FILENAME)"。这里FILENAME是待打开文件的名称。在UNIX系统中,FILENAME可以以"~\/"或 "~username\/"形式开头,系统会自动解析为当前用户的主目录或指定用户的主目录。在执行FOPEN函数后,系统将返回一个名为FID的MATLAB整数标量,作为...

matlab文件读入fopen函数和写入fprintf函数
%s 输出字符串 下面是一个小例子来帮助大家记忆理解 a='hello world'; fid=fopen('test.txt','w');fprintf(fid,'%s',a);fclose(fid); 在matlab中写入程序后如下图所示 test.txt是我们的测试文件,是一个空文件,当执行完上面程序后我们在查看test.txt可以看到hello world 啦 如下图所示 ...

海沧区18856247097: matlab中fid=fopen('magic.m','r') 其中fid 和 r 分别代表什么含义 -
逄许普特: fopenOpen file, or obtain information about open filesSyntaxfid = fopen(filename) fid = fopen(filename, mode) [fid, message] = fopen(filename, mode, machineformat) [fid, message] = fopen(filename, mode, machineformat, encoding) fids = ...

海沧区18856247097: 如何用Matlab的fopen函数读入一幅bmp图像? -
逄许普特: fid=fopen('1.bmp','r'),以只读方式读取,返回句柄fid ,但是一般用imread或者importdata来获取图片的具体信息.

海沧区18856247097: fid是什么意思 matlab -
逄许普特: matlab习惯用fid操作文件,其实用其他字母也可以,多个文件可用fid1,fid2来表示. 一般用法: fid=fopen('……') 此时fid有返回值,当是正数时代表打开文件成功,-1代表失败 fclose(fid) 此时有点像指针,fid代表这个文件

海沧区18856247097: matlab中关于fopen和fprint的用法?在matlab
逄许普特: 你没有换行符, fid=fopen('cvtshujux0.txt','wt'); fprintf(fid,'\f\n',x1) 这个跟你的文本编辑器有关. 你如果用word或写字板打开,是换行的. windows自带的记事本,认为\r\n才是换行. 所以你如果要用记事本查看的话,建议你输出的时候用\r\n代替\n. 希望能帮助你!

海沧区18856247097: matlab中fid是什么意思?它的全部英文是什么? -
逄许普特: 不知道fid的全部英文是什么,只知道fid的应用: matlab习惯用fid操作文件,如果操作多个文件,可用fid1,fid2等来标识多个文件. 一般用法: fid=fopen('……') 此时fid有返回值,当是正数时代表打开文件成功,-1代表失败 fclose(fid) 此时有点像指针,fid代表这个文件

海沧区18856247097: matlab中fid=fopen打开一次fid就加一,为什么~ -
逄许普特: 为了区分不同的文件,其实有时候不只是加1,可能加的更多.这个不影响使用的.

海沧区18856247097: matlab怎样将数据存为二进制 -
逄许普特: 1.matlab: fid=fopen("bif.bin","wb"); fwrite(fid,A','double');%A是矩阵,double是保存文件的数据类型.A'是A的转置,原因是,在matlab中数据是按列存放,c中是按行.所以在matlab中应先进行转置,这样 %到c中读出的数据才是正确的.

海沧区18856247097: matlab fgetl -
逄许普特: 嗯 tline = fgetl(fid); fid是已经打开的文件句柄,可以按照如下方法打开:fid=fopen('目标文件名');

海沧区18856247097: matlab while 1循环语句的意思 -
逄许普特: 就这种结构而言,是使用形式上的死循环,然后用if进行判断,在满足某个条件时用break跳出循环.第一段代码也可以改写成: fid = fopen('fgetl.m');tline = fgetl(fid); while ischar(tline)disp(tline)tline = fgetl(fid); endfclose(fid);二者作用是完全相同的.两段代码都是逐行读文本文件,差别只是第一个读出来之后就显示,而第二个读出来之后转换为数据存储到数组中而已.

海沧区18856247097: matlab中fopen问题 -
逄许普特: 确定这个命令可以正常执行?fopen应该是只认字符串的,中间那个25应该识别不出来才对吧…… 如果忽略那个25, 第一个问题:matlab可以通过多种方式进行字符串合并,上面的是其中一种——通过矩阵形式 [ 'abc','.txt' ] 等价于 'abc.txt'...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网