0%

Matlab(Octave 4.0.0)常用知识总结

strsplit 函数:   以指定的分隔符分割字符串

  C = strsplit(str);   切割后的结果是cell类型,分隔符可以是下面的任一种 {‘ ‘,’\f’,’\n’,’\r’,’\t’,’\v’}.

  C = strsplit(str,delimiter );   可以将字符串str 按指定的 分隔符进行分割.

input 函数:   请求用户输入

  x = input(prompt);   显示prompt中的文本值并等待 回车键;

  str = input(‘’,’s’);   返回输入的文本;

printf 函数: 将参数按照指定格式输出到屏幕; fprintf 函数: 可以将参数按照指定格式发送到指定文件;

  用法如下: printf(format, …); fprintf(fid, format, …)

  Octave 支持两种; matlab 仅支持 fprintf.

** matlab 数据类型及类型转换 **

1.整数型(int8, unit8, int16, uint16, int32, uint32, int64, uint64)

  可以通过intmax(class) 和 intmin(class) 返回类型的最大最小值

  范围大小: int8:-1*2^7 ~ 2^7-1; uint8: 0 ~ 2^8-1;   需要特别注意的是,当数据结果溢出后,matlab 采用饱和处理超出上下界时系统讲结果分别取为上下限; C语言出现整数溢出的时候,无符号数时会与范围进行求模,而符号数溢出时,是是未定的行为,不同的编译器可能出现不同的结果。

int32(double): 四舍五入的整形

fix() 向0取整; floor() 向下取整

round() 四舍五入取整; ceil() 向上取整

2.浮点型(single,dounle)

  分别表示单精度和双精度,使用 realmax(class) 和 realmin(class) 可以返回表示的最大值或和最小值。

3.逻辑型(logic)

4.字符型(char)

  当字符数组的字符串长度不等时,matlab 会自动填充空字符使长度相等

常见的的字符操作函数:

abs(s) 将字符串转化成ascii 码; char(num) 将ascii 码转化成字符串

blank(n) 返回n个空字符; deblank(s) 移除字符串尾部包含的空字符

(string) 将字符串作为命令执行; findstr(s1,s2) 搜索字符串

ischar(s) 判断是否为字符串; isletter(s) 判断是都为字母

lower(s) 转换为小写; upper(s) 转换为大写

strcmp(s1,s2) 比较字符串是否相同 strncmp(s1,s2,n) 比较字符串中的前n个字符串是否相同

strrep(s1,s2,s3) 将s1中的字符s2替换为s3

strfind(s1,s2) 字符串内查找字符串; 输出 s2 在 s1 中每次出现的起始索引。

5.日期和时间

6.结构

7.构建结构数组

8.元胞数组(cell)

  8.1 每个单元可以包含任意类型的数据结构;

  8.2 创建: 可以直接赋值,也可以先用cell初始化,然后再赋值;

  8.3 访问: cellVar(n) 访问的是第n个单元; cellVar{n} 访问的是第n个单元存储的内容;

  函数: cell2mat: 将cell转化成普通矩阵(cell 单元的内容类型必须相同); mat2cell: 将普通矩阵转化为cell


**说明:** 上述内容节选自以下链接,若有侵权,告知立删:

CSDN:fff2zrx matlab中cell数组用法

9.函数句柄

说明: 上述内容节选自以下链接,若有侵权,告知立删:

  iteye_13202:matlab数据类型和转换

Input 函数使用扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
clc; clear; close all;  # initialize
try
ii = 0; # count for number of input lines
while 1
ii = ii + 1;
inStr = input('','s'); # inStr: 1*m1 char
data{ii} = inStr; # data: 1*n cell,
basInfo = strsplit(data{1}); # 1*m2 cell
nStud = str2num(basInfo{1}); # 1*1 double
nOper = str2num(basInfo{2}); # 1*1 double

if ii == 2
score = str2num(inStr); # 1*m3 double
elseif ii > 2 # strOper: (n-2)*m4 cell
strOper(ii-2,:) = strsplit(data{ii});
end

while ii == nOper + 2
for jj = 1 : nOper
if strcmp(strOper(jj,1),'Q') # logic 1 or 0
indBe = str2num(cell2mat(strOper(jj,2))); # cell2char2double
indEn = str2num(cell2mat(strOper(jj,3))); # cell2char2double
maxScore = max(score(indBe:indEn)); # double
disp(maxScore);

elseif strcmp(strOper(jj,1),'U')
indPos = str2num(cell2mat(strOper(jj,2))); # cell2char2double
upgVal = str2num(cell2mat(strOper(jj,3))); # cell2char2double
score(indPos) = upgVal; # double
end
end
ii = inf; # break the inner while
end


end

catch
end