MATLAB教学_04变数(变量)与档案存取

视频地址:https://www.bilibili.com/video/av68228488?p=4
本文主要学习了变数、字符串、结构体、单元数组

各类型所占空间

关于有符号和无符号型,有符号型最高位为符号,所以能使用的空间最大为2^7,
在这里插入图片描述
以上内容摘自CSDN博主「LANGZI7758521」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/langzi7758521/article/details/51512215

在MATLAB中,创建的一个数,默认是double,如果要转换其类型,可以使用以下函数。
double()
single()
int8()
int16()
int32()
int64()
uint8()
uint16()
uint32()
uint64()

例如:

A=8;
B=int8(A)

Char

保存字符时要用单引号括起来。例如: s= ‘h’

clear all;     %17分钟练习
str='aardvark';    %MATLAB默认是从1开始,不是0
str(3)
'a'==str           %注意这里 == 是等号的判断,是判断是否有相等的,不是赋值。采用布尔,相同为1,不相同为0。会判断str的每一个位置
str(str=='a')='Z'    %把里面是‘a’的元素提取出来换成 'Z'
clear;                 %22分钟练习
str1='aardvark';
str2=zeros(1,8);
str2=input('please input your string:','s');
for i=1:8
    if str2(i) == str1(i)     %这里有个BUG,如果输入的字符比如为: aar,后面再不输,他会一直比较下去,没办法解决。
        i+1;
    else
        disp('sorry, you are wrong.')
        break;
    end
    if i==8
        disp('your string is right.')
    end
end

%%
clear;                 %22分钟练习
str1='aardvark';     
str2=zeros(1,8);
str2=input('please input your string:','s');
tf=strcmp(str1,str2);     %这里是个弹幕大神给的比较字符串的方法,正确。
if tf==1
    disp('you are right.')
else
    disp('you are wrong.')
end

strcmp() - 比较字符串函数

此 MATLAB 函数 比较 s1 和 s2,如果二者相同,则返回 1 (true),否则返回 0
(false)。如果文本的大小和内容相同,则它们将视为相等。返回结果 tf 的数据类型为 logical。

tf = strcmp(s1,s2)

22分钟练习

在这里插入图片描述

clear;          %%22分钟练习
s1='I like the letter E';
for i=1:size(s1,2)     %%这里size(s1,1)是获取s1的行,如果 是size(s1,2)是获取列
    s2(i)=s1(size(s1,2)-i+1);
end
disp(s2)

%%
clear;          %%22分钟练习可以引申为输入随机的字符串
s1=input('please input your string:','s');
for i=1:size(s1,2)
    s2(i)=s1(size(s1,2)-i+1);
end
disp(s2)

Structure

一个类下面可以有多个领域。如果一个类下面有多个学生,就可以使用类似矩阵的方式。

在这里插入图片描述

student(1).name='John Doe';   %%31分钟练习
student(1).id='jd2@sfu.ca';
student(1).number=301073268;
student(1).grade=[100 75 73;95 91 85.5;100 98 72];
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)
student(2).grade(7)   %%可以参考MATLABE教学_02的博文
student(2).grade(1,3)

Structure 的函数

函数功能举例
cell2struct将单元数组转换为struct,注意里面的fields都要写领域名称cell2struct(student,{‘name’,‘id’,‘number’,‘grade’},1)
fieldnames显示struct的领域fieldnames(student)
getfield获取某一个structure的领域getfield(student(1),‘id’)
isfield检查名为student的struct里是否包含名为id的领域,返回布尔值isfield(student,‘id’)
isstruct检查是否为struct类型,返回布尔值isstruct(student)
orderfields此 MATLAB 函数 对 struct中的每个领域进行排序,使新的结构体数组 s 的字段名称按 ASCII 码字典的顺序排列。
rmfield移除某一个领域refield(student,‘id’)
setfield为指定的field指定内容setfield(student(1),‘name’,33)
struct访问某个structstruct(student)
struct2cell将struct转换为单元数组
structfun

structure的嵌套

在这里插入图片描述

这里老师讲的不太对。在定义时前一个是名字,后一个是属性值,是成对出现的。应该是
在这里插入图片描述

Cell

相当于不同的矩阵合集。里面的每一块可以放置不同类型的数据,是因为有指针的关系。在输入时是使用大括号,可以有两种输入方式。

  1. 大括号放到后面去,例如: A(1,1)={[1 4 3; 0 5 8; 7 2 9]}
  2. 大括号放到前面来,例如:A{1,1}=[1 4 3; 0 5 8;7 2 9]

在这里插入图片描述

A(1,1)      %这个只能查看到A(1,1)是个什么类型
A{1,1}      %可以看到A(1,1)里具体的数据
A{1,1}(4)   %可以看到A(1,1)这个矩阵里面的第4个数据为 4
A{1,2}(1)   %可以看到A(2,1)这个字符串里面的第1个数据为  'A'
函数功能举例
cell创建一个cellcell(n) 返回由空矩阵构成的 n×n 元胞数组
cell2mat将cell转换为基础数据类型的普通数组,元胞数组的元素必须全都包括相同的数据类型,并且生成的数组也是该数据类型。cell2mat(n)
cell2struct将Cell转换为structstructArray = cell2struct(cellArray, fields, dim)
celldisp显示cell的每个具体内容
cellfun对元胞数组中的每个元胞应用函数cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞
cellplot将cell中每个数据所占的位置用图形的方式展示出来
iscell确定是否为cell
mat2cellmat2cell(a, [10 20 30], [10 20]),这里假设a是一个60行30列的矩阵,将它转换为cell后,是把行分为了10行,20行和30行各一个Cell,将30列分为了10列和20列
struct2cell
num2cell

CAT()函数

CAT函数的第1个参数,1代表按行连接,2代表按列连接,3代表按页连接
在这里插入图片描述

reshape()

此 MATLAB 函数 使用大小向量 sz 重构 A 以定义 size(B)。例如,reshape(A,[2,3]) 将 A 重构为一个 2×3 矩阵。sz
必须至少包含 2 个元素,prod(sz) 必须与 numel(A) 相同。
注意:1. A的size(A)= 重构后的行 * 列
2. reshape在重构时,里面的元素是按照顺序排列的。不是说跟矩阵的转置一样。

File Access

MATLAB存储文件有两种方式。一种是存储为 *.mat 格式, 一种为EXCEL。

save mydata1.mat         %将工作区所有的变数全部保存到名为mydata1的 *.mat  文件中,比ascii的格式要存储的内容要多
save mydata2.mat -ascii  %  %将工作区所有的变数全部保存到名为mydata1的 *.mat  文件中,并且以ASCII码的格式存储
save mydata1.mat, A     %将工作区中A这个变数存到mydata1.mat 文件中

load('mydata1.mat', )           %读取 mydata1.mat
load('mydata1.mat', '-ascii')   %如果 mydata1.mat是用 ASCII格式存储的,那么读取时要用这个格式
xlswrite('04.xlsx',M)             %将变数M存到04.xlsx
xlswrite('D:\04.xlsx',M)          %将变数M存到04.xlsx,位置放到D盘
xlswrite('04.xlsx',M,1,'E2:E4')       % 将娈数M放到04.xlsx的SHEET1,位置为E2:E4
xlswrite('04.xlsx',{'Mean'},1,'E1')   % 将字符串 Mean 放到04.xlsx的SHEET1,位置为E1

xlsread('04Score.xlsx')            %读取04Score.xlsx
xlsread('04Score.xlsx','B2:D4')    %读取04Score.xlsx的B2:D4

[Score Header] = xlsread('04.xlsx')  %可以看到所有的数据都放到Score,所有的标题放到 Header

Low-level File I/O Functions

在这里插入图片描述

clear all;
x=0:pi/10:pi;     %%95分钟练习
y=sin(x);
fid= fopen('sinx.txt','w');    %% fopen 打开文件, W是写,R是读
for i= 1:11
    fprintf(fid, '%5.3f %8.4f\n', x(i),y(i));  %%写入的数据 
end
fclose(fid);
type sinx.txt

在这里插入图片描述

  • 33
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值