matlab nan函数中结果为什么是NaN?求助大家

Matlab实现文件读写的几种方法
我的图书馆
Matlab实现文件读写的几种方法
Matlab有着强大的数据处理功能,经常需要从外部文件读取数据或将数据写到外部文件。Matlab和外部文件进行数据交换相关的命令,个人目前了解到的有以下几种。
load 从Matlab的数据文件.mat中读取变量数据,也可以从.txt .dat等文件中读取数据。使用load命令读取数据以后在Matlab中数据变量和文件同名。例如使用“load data.txt”后数据变量名即为data。
需要注意的是文件格式的不同,文件格式分为二进制格式和ASCII格式两种。如果是二进制格式的文件,可以使用load命令直接读取。但如果是ASCII格式的文件,需要保证数据是整齐的(每一行数据个数要一致),否则会出错。
data.txt文件(ASCII格式)
使用“load data.txt”将会出错。
data1.txt文件
使用“load data1.txt”能顺利读入3*3矩阵。
和load相对应的写数据命令为save,一般存为.mat文件,save保存的文件格式为二进制格式。
二进制和ASCII的区别
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码:) & ) & ) ) 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:01110 (十进制5678转换成二进制)只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。
(2)importdata
importdata根据文件名将数据导入到Matlab工作区。可以导入文件类型有很多,.txt .wav 等等。导入的数据(包括字符串和数值)以结构形式存放在工作区,可以使用whos命令来查看工作区的数据。
importdata可以导入load不能读取的长短不一的ASCII文件。当文件中既包含字符串又包含数值,而且数值长度个数不一时,可以使用importdata命令。注意读取的数值矩阵列数以文件中数值第一行的列数为标准。
例 test.txt
This is a test.Start0 1 21 21 2 3 4
运行A=importdata('test.txt')
&&&&&&& data: [4x3 double]&&& textdata: {2x1 cell}
&&&& 0&&&& 1&&&& 2&&&& 1&&&& 2&& NaN&&&& 1&&&& 2&&&& 3&&&& 4&& NaN&& NaN
A.textdata =
&&& 'This is a test.'&&& 'Start'
另外,读取的字符串只能位于数值之前,位于数值之后的将被忽略。
例:test.txt
0 1 21 21 2 3 4End.
运行A=importdata('test.txt')
&&&& 0&&&& 1&&&& 2&&&& 1&&&& 2&& NaN&&&& 1&&&& 2&&&& 3&&&& 4&& NaN&& NaN
除了importdata命令以外,还可以从菜单选项file--&import data...导入数据文件,效果和importdata命令一样。
(3)fopen
fopen打开一个文件并创建文件标识以供接下来的读写等操作。fopen命令本身不进行读操作。然后可以使用fscanf读取数据,根据需要对数据进行筛选编辑。
例:读取字符串的方法
0 1 21 2 31 2 3End.
fid=fopen('data.txt');&&&&%打开文件,创建文件标识
A=fscanf(A,'%c');&&&&&&&&&%读取数据
fclose(fid);&&&&&&&&&&&&&&%关闭文件标识
i=findstr(A,'End');&&&&&&&%查找标识
B=A(1:i-3);&&&&&&&&&&&&&& %提取数据,换行为2个字符
C=str2num(B);&&&&&&&&&&&& %将数据转换成数值矩阵
注意其中str2num同样需要保证数值矩阵中列数一致,如果不一致,则结果为空。
0 1 21 21 2 3End.
例:读取行的方法
fid1=fopen('data.txt');fid2=fopen('numbers.txt','w');while ~feof(fid1)&&& aline=fgetl(fid1);&&& if double(aline(1))&=48&&double(aline(1))&=57&&&&&&& fprintf(fid2,'%s\n',aline);&&&&&&& continue&&& endend
fclose(fid1);fclose(fid2);
numbers.txt即为按行保存的数值文件
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&导读:MATLAB期末考试试卷及其参考答案,2、分别在同一图形窗的不同子图绘制y=sin(t)sin(9t)和y=sin(t,考试成绩和平均值等域,MATLAB期末考试试卷及其参考答案一、填空题(每空1分,20分)1、MATLAB常用操作界面包括、工作空间窗口、M文件编辑/调试器、帮助导航/浏览器、图形窗口等。2、MATLAB中Inf或inf表示、NaN或nan表示nargout表示。3、MATLA
MATLAB期末考试试卷及其参考答案
一、填空题(每空1分,20分)
1、MATLAB常用操作界面包括、工作空间窗口、 M文件 编辑/调试器、帮助导航/浏览器、图形窗口等。
2、MATLAB中Inf或inf表示、NaN或nan表示 nargout表示。
3、MATLAB中逗号主要用作; 用作输入量与输入量之间的分隔符;
4、工作空间浏览器主要用于内存变量的。
5、MATLAB实现将全下标转换为单下标的指令为、据单下标换 算出全下标的指令为
6、二维数组的标识有、“逻辑1”标识。
7、在一个元胞数组A中寻访第2行第3列元胞元素用;寻访数
组第2行第3列元胞中所存的内容用
8、4、MATLAB中clf用于clc用于
clear用于。
二、简答题(每题5分,共20分)
1、简述MATLAB历史指令窗的主要作用。
2、简述空数组的功用。
3、简述MATLAB函数的基本结构。
4、简述绘制二维图形的一般步骤。
三、阅读程序并回答问题(每题4分,共28分)
1、写出下列指令运行结果。
A=zeros(2,4);
s=[2 3 5];
Sa=[10 20 30]'
2、写出下列指令运行结果。
A=reshape(1:16,2,8)
reshape(A,4,4)
s=[1 3 6 8 9 11 14 16];
3、写出下列指令运行结果。
A=[1,2;3,4];
B=[-1,-2;2;1];
4、下面的函数主要完成什么功能?
function f=factor(n)
f=factor(n-1)*n;
5、写出下列指令运行结果。
ch=‘ABc123d4e56Fg9’;
subch=ch(1:5)
revch=ch(end:-1:1)
k=find(ch&=‘a’&ch&=‘z’);
ch(k)=ch(k)-(‘a’-‘A’);
6、写出下列指令运行结果。
A(1,1)={'this is cell'};
A{1,2}={[1 2 3;4 5 6]};
A{2,1}=[1+2*i];
A{2,2}=A{1,2}{1}+(A{1,2}{1}(1,1)+A{1,2}{1}(2,2));
celldisp(A)
7、下面的程序完成功能是什么?
t=0:pi/50:4*
y0=exp(-t/3);
y=exp(-t/3).*sin(3*t);
plot(t,y,'-r',t,y0,':b',t,-y0,':b')
xlabel(‘\bf\it t’);
ylabel(‘\bf\it y’);
四、编程题(32分)
1、1、在同一图上分别用红色实线和绿色虚线绘制y1=sin(x)和y2=cos(x)在区间[0,4*pi]的曲线,并用星号*标出两条曲线的交点以及建立图例。(5分)
2、分别在同一图形窗的不同子图绘制y=sin(t)sin(9t)和y=sin(t)sin(9t)及其包络线。(4分)
3、某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):
200≤price&500
500≤price&1000
1000≤price&2500
2500≤price&5000
5000≤price
输入所售商品的价格,求其实际销售价格。(5分)
4、编写程序实现f(n)=f(n-1)+f(n-2)(f(1)=1和f(2)=2)函数。(6分)
5、编写一个学生成绩管理的程序(12分)
A.构造一个学生结构,包括学生的学号,姓名,课程名称(限五门),考试成绩和平均值等域;(4分)
B.从键盘上,连续输入N个学生的情况,分别将这些学生的情况填入到相应的域,若域中没有值即为空或0并计算平均成绩写入到平均值域。(4分)
C.根据平均值排序,并输出学生的姓名、学号和平均成绩。(4分)
一、填空题(每空1分,20分)
1、MATLAB常用操作界面包括命令窗口、工作空间窗口(浏览器)、 命令历史窗口、当前目录窗口、内存数组编辑器、M文件编辑/调试器、 帮助导航/浏览器、图形窗口等。
2、MATLABInf或inf表示无穷大、NaN或nan表示不是一个数、nargout表示函数输出宗量数目。
3、MATLAB中逗号主要用作要显示计算结果的指令与其后指令的分隔; 用作输入量与输入量之间的分隔符;用作数组元素分隔符号。
4、工作空间浏览器主要用于内存变量的查阅、保存和编辑。
5、MATLAB实现将全下标转换为单下标的指令为Sub2ind、据单下标换算出全 下标的指令为Ind2sub。
6、二维数组的标识有“全下标”标识、“单下标”标识、“逻辑1”标识。
7、在一个元胞数组A中寻访第2行第3列元胞元素用A(2,3);寻访数组第 2行第3列元胞中的内容用A{2,3}。
8、MATLAB中clf用于清除图形窗、clc用于清除指令窗中显示内容、clear 用于清除MATLAB工作空间中保存的变量。
二、简答题(每题5分,共20分)
1、简述MATLAB历史指令窗的主要作用。
历史指令窗记录着用户在MATLAB指令窗中所输入过的所有指令。历史记录
包括:每次开启MATLAB的时间,每次开启MATLAB后在指令窗中运行过
的所有指令。应用功能有单行或多行指令的复制和运行、生成M文件等。
2、简述空数组的功用。
“空”数组的功用:在没有“空”数组参与的运算时,计算结果中的“空”
包含总结汇报、文档下载、外语学习、党团工作、旅游景点、专业文献、出国留学、人文社科、经管营销、教学研究、资格考试、IT计算机以及MATLAB期末考试试卷及其参考答案..等内容。本文共3页
相关内容搜索MATLAB “非数”和“空”数组_MATLAB教程_MATLAB教程_最全面的网站教程
当前位置:&&&&&&MATLAB “非数”和“空”数组
MATLAB “非数”和“空”数组
3.12 “非数”和“空”数组
3.12.1 非数NaN
【 * 例 3.12.1 -1 】非数的产生和性质演示。
(1)非数的产生
a=0/0,b=0*log(0),c=inf-inf
Warning: Divide by zero.
Warning: Log of zero.
(2)非数的传递性
0*a,sin(a)
(3)非数的不可比较性
a==nan % 该指令想计算“ a 等于非数吗?”。但不能给出正确的判断结果。
(4)非数不能进行关系运算
a~=nan % 该指令“ a 不是非数吗?”,也不可能给出正确的判断结果。
a==b % 两个非数不存在“等”与“不等”的概念
b&c % 两个非数不能比较大小
(5)非数的属性判断
class(a) % 数据类型归属
isnan(a) % 该指令是唯一能正确判断非数的指令。
【 * 例 3.12.1 -2 】非数元素的寻访
% 创建带非数的二维数组
rand('state',0) % 将随机发生器置 0 。目的是使读者便于把自己运算结果与本书对照。
R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN
0.8 0.5 NaN
0.0 NaN 0.7
isnan(R) % 对数组元素是否非数进行判断
% 找出非数元素的位置标识
Linear_index=find(isnan(R)) % 非数的“单下标”标识
[r_index,c_index]=ind2sub(size(R),Linear_index); % 转换成“全下标”标识
disp('r_index c_index'),disp([r_index c_index])
Linear_index =
r_index c_index
3.12.2 “空”数组
【 * 例 3.12.2 -1 】关于“空”数组的算例。
(1)创建“空”数组的几种方法
a=[],b=ones(2,0),c=zeros(2,0),d=eye(2,0),f=rand(2,3,0,4)
Empty matrix: 2-by-0
Empty matrix: 2-by-0
Empty matrix: 2-by-0
Empty array: 2-by-3-by-0-by-4
(2)“空”数组的属性
class(a) % “空”的数据类别
isnumeric(a) % 是数值数组类吗
isempty(a) % 唯一可正确判断数组是否“空”的指令
which a % 变量 a 是什么
ndims(a) % 数组 a 的维数
size(a) %a 数组的大小
a is a variable.
(3)“空”数组不具备一般的传递性
b_c1=b.*c % 两个空阵的点乘
b_c2=b'*c % 矩阵乘一。注意:生成矩阵为 0-by-0 ,故“空”。
b_c3=b*c' % 矩阵乘二。注意:生成矩阵为 2-by-2 。
Empty matrix: 2-by-0
上一篇:下一篇:a 除数是一个数列,数列第一项为0
b 被除数也是一个数列,数列第一项为0
这样除出来的结果,c的第一项是NaN
我想问下这种情况应该怎么处理?
如果我想要相除的结果第一项为零,我该怎么整?
发表于:08-10-31 20:23
给NaN赋值0
发表于:08-10-31 20:36
楼上,就是把c除完了
再c(1)=0吗?
还有没有别的方法了?
发表于:08-10-31 20:37
我也不太清楚
我用Matlab用得不多
没遇到过这类问题...
发表于:08-10-31 20:38
确实值得好好看看,顶先
“21天训练营”(&/train&),让成功不再与你擦肩而过!
发表于:08-10-31 20:53
令b(1)为任意非零数不就完了??
厚积薄发!
发表于:08-10-31 21:40
分母为0的话,加个eps
具体matlab的help
&&&&&&&&&&既以为人己愈有&
&&&&&&&&&&&&&&&&既以与人己愈多&
&&&&&&&&&&&&&&&&&&&&天之道&利而不害&
&&&&&&&&&&&&&&&&&&&&&&&&&圣人之道&为而不争&
发表于:08-10-31 21:41
如果是两路信号的话,我一般把c的第1项的NaN赋值成c的第2项的值,这样c就看起来不会有太大的突变。不知道对您有没有参考价值。
发表于:08-10-31 21:48
应该可以通过赋个小值来解决这个问题的
燕草如碧丝,秦桑低绿枝。&
当君怀归日,是妾断肠时。&
春风不相识,何事入罗帏?
发表于:08-10-31 22:24
好,谢谢各位高手了
你尚未登录或可能已退出账号:(请先或者

我要回帖

更多关于 matlab nan函数 的文章

 

随机推荐