MATLAB教程

阅读: 评论:0

MATLAB教程

MATLAB教程

MATLAB教程_04变数(变量)与档案存取_台大郭彦甫课程笔记

  • 一、变数/变量-string
    • 1、类型
    • 2、double 转 integer
    • 3、Character(Char)字元
  • 二、变数/变量-structure
    • 1、宣告举例——学生作业成绩:
    • 2、函数
    • 3、嵌套结构
  • 三、变数/变量-Cell Array 单元阵列
    • 1、宣告
    • 2、访问(读取) Cell Array 单元阵列
    • 3、函数
    • 4、怎样把矩阵转换成一个单元变量cell variable
    • 5、多维数组
    • 6、检查变量和变量状态
  • 四、File Access文件存取
    • 1、save()& load()
    • 2、电子表格读取:xlsread()
    • 3、电子表格写入:xlswrite()
    • 4、低级文件输入/输出

一、变数/变量-string

1、类型

变量类型含义
double()转换为双精度
single()转换为单精度
int8()转换为8位有符号整数
int16()转换为16位有符号整数
int32()转换为32位有符号整数
int64()转换为64位有符号整数
uint8()转换为8位无符号整数
uint16()转换为16位无符号整数
uint32()转换为32位无符号整数
uint64()转换为64位无符号整数

p.s.变数形态,当作function使用

2、double 转 integer


>> B=int8(A)
B =int820

3、Character(Char)字元

指定一个Character到一个变数,用一个变数储存,用 单引号 来指定,把变数框在里面。

>> s1 = 'h'
whos
s1 ='h'Name      Size            Bytes  Class     AttributesA         1x1                 8  double              B         1x1                 1  int8                s1        1x1                 2  char                >> s1 = 'hex'
s1 ='hex'
>> whosName      Size            Bytes  Class     AttributesA         1x1                 8  double              B         1x1                 1  int8                s1        1x3                 6  char        

>> s1 = 'h'
whos
uint16(s1)
s1 ='h'Name      Size            Bytes  Class     AttributesA         1x1                 8  double              B         1x1                 1  int8                s1        1x1                 2  char                ans =uint16104
>> s2 = 'H'
whos
uint16(s2)
s2 ='H'Name      Size            Bytes  Class     AttributesA         1x1                 8  double              B         1x1                 1  int8                ans       1x1                 2  uint16              s1        1x1                 2  char                s2        1x1                 2  char                ans =uint1672

4、String 多字元
宣告:

s1 = 'Example';
s2 = 'String';s3 = [s1 s2];
s4 = [s1; s2]; %加分号,变矩阵=============================
>> s1 = 'Example';
s2 = 'String';
>> s3 = [s1 s2]
s3 ='ExampleString'
>> s4 = [s1; s2]
错误使用 vertcat
要串联的数组的维度不一致。
%字符串长度不一样,不能放在一个矩阵中

5、逻辑运算和分配
许多数字和逻辑运算符可以应用于字符串

>> str = 'aardvark';
>> str(3)
ans ='r'>> str = 'aardvark';
>> 'a' == str
ans =1×8 logical 数组1   1   0   0   0   1   0   0
%每个位置分别做逻辑运算>> str(str == 'a') = 'Z'
str ='ZZrdvZrk'
%完成的功能是:将 a 都换为 Z
  • 练习1:
    练习:比较整个string和’aardvark’是否相等
    提示:strcmp-比较字符串
str_input = input('Please enter an  8-bit string: ','s');
str_judge = isempty(str_input);
str = 'aardvark';
if str_judge == 1disp('Invalid input');
elsefor i = 1:8result = str_input(i) ==  str(i);disp(result);i = i+1;end    
end============================================
>> class04_practice1
Please enter an 8-bit string: asdfghjk10000001
  • 练习2:编写一个脚本来反转任何给定的字符串
    s1=‘I like the letter E’
    ↓↓
    s2=‘E rettel eht ekil I’
str_input = input('Please enter a  string: ','s');
str_judge = isempty(str_input);
n = length(str_input); 
%length函数用来计算字符串的长度
if str_judge == 1disp('Invalid input');
elsestr = str_input;for i = 1:nstr(n-i+1) = str_input(i);i = i+1;end    
end
disp(str);
==============================================
>> class04_practice2
Please enter a string: I like the letter E
E rettel eht ekil I

二、变数/变量-structure

•一种存储异构数据的方法
•结构包含称为字段的数组

1、宣告举例——学生作业成绩:

1)基本

student.name = 'John Doe';
student.id = 'jdo2@sfu.ca';
student.number = 301073268;
ade = [100, 75, 73; ...95, 91, 85.5; ...100, 98, 72];
student
student =包含以下字段的 struct:name: 'John Doe'id: 'jdo2@sfu.ca'number: 301073268grade: [3×3 double]
>> ade
ans =100.0000   75.0000   73.000095.0000   91.0000   85.5000100.0000   98.0000   72.0000

2)向结构添加信息

>> student(2).name = 'Ann Lane';
student(2).id = 'aln4@sfu.ca';
student(2).number = 301078853;
student(2).grade = [95 100 90; 95 82 97; 100 85 100];
>>
>> student
student =包含以下字段的 1×2 struct 数组:nameidnumbergrade
  • 练习3:检索Ann Lane的第三个成绩
>> student(2).grade(3)
ans =100
>> student(2).grade(1,3)
ans =90

2、函数

函数名解释
cell2struct将单元数组转换为结构数组
fieldnames结构的字段名,或对象的公共字段
getfield结构阵列场
isfield确定输入是否为结构数组字段
isstruct确定输入是否为结构数组
orderfields结构数组的序域
rmfield从结构中删除字段
setfield为结构数组字段赋值
struct创建结构数组
struct2cell将结构转换为单元数组
structfun将函数应用于标量结构的每个字段

举例——

>> fieldnames(student)
ans =4×1 cell 数组{'name'  }{'id'    }{'number'}{'grade' }
>> student
student =包含以下字段的 1×2 struct 数组:nameidnumbergrade
>> rmfield(student,'id')
ans =包含以下字段的 1×2 struct 数组:namenumbergrade

3、嵌套结构

A = struct('data', [3 4 7; 8 0 1], 'nest', ...   %第一个file是一个string,第二个file是一个matrix,第三个file是一个string,第四个file另外一个structure(有4个file)struct('testnum' , 'Test 1', ...'xdata', [4 2 8],'ydata', [7 1 6]));%这样就是一个nesting structure嵌套结构
A(2).data = [9 3 2; 7 6 5];
A(2).stnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9];
A.nest
ans =包含以下字段的 struct:testnum: 'Test 1'xdata: [4 2 8]ydata: [7 1 6]
ans =包含以下字段的 struct:testnum: 'Test 2'xdata: [3 4 2]ydata: [5 0 9]
>> A
A =包含以下字段的 1×2 struct 数组:datanest
>> A(1)
ans =包含以下字段的 struct:data: [2×3 double]nest: [1×1 struct]

三、变数/变量-Cell Array 单元阵列

存储异构数据(阵列)的另一种方法
类似于矩阵,但每个条目包含不同的数据类型
使用{ }声明

1、宣告

1)第一种

>> A(1,1)={[1 4 3; 0 5 8; 7 2 9]};
A(1,2)={'Anne Smith'};
A(2,1)={3+7i};
A(2,2)={-pi:pi:pi};
A
A =2×2 cell 数组{3×3 double        }    {'Anne Smith'}{[3.0000 + 7.0000i]}    {1×3 double  }

2)第二种

>> A{1,1}=[1 4 3; 0 5 8; 7 2 9];
A{1,2}='Anne Smith';
A{2,1}=3+7i;
A{2,2}=-pi:pi:pi; A
A =2×2 cell 数组{3×3 double        }    {'Anne Smith'}{[3.0000 + 7.0000i]}    {1×3 double  }

把 Cell Array 单元阵列当成一个指标(pointer),例如上述将a(1,1)指向一个矩阵,将a(1,2)指向一个字符串等。

  • 练习4:创建具有以下结构的单元数组B
>> B(1,1)={'This is the first cell'};
B(1,2)={[5+j*6 4+j*5]};
B(2,1)={[1 2 3; 4 5 6; 7 8 9]};
B(2,2)={["Tim","Chris"]};
B
B =2×2 cell 数组{'This is the first cell'}    {1×2 double}{3×3 double              }    {1×2 string}

2、访问(读取) Cell Array 单元阵列

>> A(1,1) %是说指到的内容是什么
ans =1×1 cell 数组{3×3 double}%要看cell array中的内容要用大括号
>> A{1,1}
ans =1     4     30     5     87     2     9%要知道矩阵中某一具体元素是多少
>> A{1,1}(1)
ans =1
>> A{1,1}(1,1)
ans =1
>> A{1,1}(1,3)
ans =3

3、函数

函数名解释
cell创建单元格数组
cell2mat将单元格数组转换为数字数组
cell2struct将单元数组转换为结构数组
celldisp单元格数组内容
cellfun对单元格数组中的每个单元格应用函数
cellplot单元阵列结构的图形显示
cellstr从字符数组创建字符串单元格数组
iscell确定输入是否为单元格数组
mat2cell将数组转换为具有不同大小单元格的单元格数组
num2cell将数组转换为大小一致的单元格数组
struct2cell将结构转换为单元数组

structure和cell可以做转化

4、怎样把矩阵转换成一个单元变量cell variable

num2cell
mat2cell
举例:将一个3×3矩阵变成一个3×3cell

%将每一个元素都独立变成cell里面的一个元素
>> a = magic(3)
b = num2cell(a)
a =8     1     63     5     74     9     2
b =3×3 cell 数组{[8]}    {[1]}    {[6]}{[3]}    {[5]}    {[7]}{[4]}    {[9]}    {[2]}%分组,三个列
被放在一起,三个行被分开
>> a = magic(3)
c = mat2cell(a, [1 1 1], 3)
a =8     1     63     5     74     9     2
c =3×1 cell 数组{1×3 double}{1×3 double}{1×3 double}

5、多维数组



1)基础宣告方法

A{1,1,1} = [1 2;4 5];
A{1,2,1} = 'Name';
A{2,1,1} = 2-4i;
A{2,2,1} = 7;
A{1,1,2} = 'Name2';
A{1,2,2} = 3;
A{2,1,2} = 0:1:3;
A{2,2,2} = [4 5]';
>> A2×2×2 cell 数组
A(:,:,1) ={2×2 double        }    {'Name'}{[2.0000 - 4.0000i]}    {[   7]}
A(:,:,2) ={'Name2'   }    {[       3]}{1×4 double}    {2×1 double}

2)concatenation串联:cat()
把两个矩阵这样接起来,就用到这个指令

>> A{1,1} = [1 2;4 5];
A{1,2} = 'Name';
A{2,1} = 2-4i;
A{2,2} = 7;
B{1,1} = 'Name2';
B{1,2} = 3;
B{2,1} = 0:1:3;
B{2,2} = [4 5]';
C = cat(3, A, B)2×2×2 cell 数组
C(:,:,1) ={2×2 double        }    {'Name'}{[2.0000 - 4.0000i]}    {[   7]}
C(:,:,2) ={'Name2'   }    {[       3]}{1×4 double}    {2×1 double}

3)reshape(要改变的矩阵,改变后的行数,改变后的列数)

>> A = {'James Bond', [1 2;3 4;5 6]; pi, magic(5)}
C = reshape(A,1,4)
A =2×2 cell 数组{'James Bond'}    {3×2 double}{[    3.1416]}    {5×5 double}
C =1×4 cell 数组{'James Bond'}    {[3.1416]}    {3×2 double}    {5×5 double}
  • 练习5:使用“reshape”从下面的矩阵A创建矩阵B。
>>  A=[1:3;4:6]
A =1     2     34     5     6
>> B=reshape(A,3,2)
B =1     54     32     6

6、检查变量和变量状态

is+function

四、File Access文件存取


•支持的文件格式:

文件内容扩展说明导入函数导出函数
MATLAB格式数据MAT保存的MATLAB工作区loadsave
Text空格分隔的数字loadsave
电子表格XLS,XLSXxlsreadxlswrite

1、save()& load()

1)将(所有)工作区数据保存到文件:

clear; a = magic(4);
save mydata1.mat
save mydata2.mat -ascii

举例——

>> clear; a = magic(4);
save mydata1.mat
>> a
a =16     2     3    135    11    10     89     7     6    124    14    15     1


打开记事本可查看

2)使用纯文字档案,可以编辑或阅读的档案,资料存储档案,后面要加 ascii
>> save mydata2.mat -ascii

打开记事本可查看

3)加载存储在文件中的数据:
>> load('mydata1.mat')

4)加载存储在 ascii 文件中的数据:
>> load('mydata2.mat','-ascii')

  • 思考题1:如何保存特定变量?
save(filename,variables)

仅保存variables指定的结构体数组的变量或字段

2、电子表格读取:xlsread()

>> Score = xlsread('class04_practice_score.xlsx')
Score =94    83    8976    88    8268    72    75>> Score = xlsread('class04_practice_score.xlsx', 'B2:D4')
Score =94    83    8976    88    8268    72    75

3、电子表格写入:xlswrite()

1)举例——计算平均值并写入Excel电子表格

>> M = mean(Score')';
xlswrite('class04_practice_score.xlsx', M, 1, 'E2:E4');
xlswrite('class04_practice_score.xlsx', {'Mean'}, 1, 'E1');
%“1”是表格1的意思

2)

  • 练习6:计算标准偏差并将其写入F列
>> N = std(Score')';
xlswrite('class04_practice_score.xlsx', N, 1, 'F2:F4');
xlswrite('class04_practice_score.xlsx', {'standard deviations'}, 1, 'F1');


3)在MATLAB中读取标题
在MATLAB中,标题和数据是两种不同的变量,需要分开处理。

>> [Score Header] = xlsread('class04_practice_score.xlsx')
Score =94.0000   83.0000   89.0000   88.6667    5.507676.0000   88.0000   82.0000   82.0000    6.000068.0000   72.0000   75.0000   71.6667    3.5119
Header =4×6 cell 数组列 1 至 5{0×0 char}    {'Test1' }    {'Test2' }    {'Test3' }    {'Mean'  }{'John'  }    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}{'Selina'}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}{'Peter' }    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}列 6{'standard deviat…'}{0×0 char           }{0×0 char           }{0×0 char           }


现在是两个变量,要怎样把这两个变量放在一起,然后储存回去,用xlsread写回去?

  • 思考题2:如何将文本和数字写入Excel文件?
>> for i = 2:4
for j = 2:6
Header{i,j} = Score(i-1,j-1);
j=j+1;
end
i=i+1;
end

4、低级文件输入/输出

•在字节或字符级别读写文件
•文件具有ID fid
•文件中的位置由可移动的指针指定

FunctionDescription
fopen打开文件,或获取有关打开文件的信息
fclose关闭一个或所有打开的文件
fscanf从文本文件读取数据
fprintf将数据写入文本文件
feof文件结尾测试

1)打开和关闭文件:

2)举例——将正弦值写入文件A

思路:
1、生成 x,y
2、打开一个文件
3、把x,y写入文件
4、关闭文件

x = 0:pi/10:pi; 
y = sin(x); 
fid = fopen('class04_','w');
for i=1:11fprintf(fid,'%5.3f %8.4fn', x(i), y(i));
end
fclose(fid); 
type class04_



3)’%5.3f %8.4fn’通过格式化I/O进行读写

符号含义
%c单个字符
%d十进制表示法(有符号)
%e指数记数法
%f定点表示法
%g%e或%f中更紧凑的
%o八进制表示法(无符号)
%s字符串
%u十进制表示法(无符号)
%x十六进制表示法

举例——从文件读取,检查是否为文件结尾:feof(fid)【视频:1:38:20】

本文发布于:2024-02-01 14:47:04,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170677002537357.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:教程   MATLAB
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23