Ela's Notes
So Be It


Hitokoto ·
[MATLAB][学习笔记1]matlab基本介绍
Elatis   学习笔记, MATLAB   1065 | 文章字数: 3277 字

最近怎么什么都想学啊!!!
现在才开始学matlab还用打数学建模吗?

关于MATLAB这个软件的吐槽

首先是这个界面

emmmm我真的下的是2016版,不是2006版?

代码几乎没有高亮,连个括号都不会自动补全,代码联想要按tab
vscode和jb系列对比之下简直是神作QAQ

matlab初体验

学了一晚上matlab,感觉我之前觉得php反人类真是naive,matlab和其它编程语言差别太太太大了!

书上基础知识讲了三大章,讲了一堆函数的用法,才开始讲编程,我看完矩阵就先跳到编程了,当然调函数这种事情没什么好讲的, 本篇也就讲一些matlab的特性好了

matlab是一种动态语言
和python一样,matlab中的分号不是必须的,只不过没有分号的话会把函数的返回值或是变量直接输出
例如在命令行中这样

>> x = 1

就会得到输出结果

x =

     1

但是加了分号就不会:

x = 1;

函数和表达式也是一样,如

>> cos(1)
ans =

    0.5403

>> 1 + 1
ans =

     2

其中ans是matlab中预留的一个变量, 用以储存函数和表达式的结果

不过matlab不是像python一样根据缩进来判断语句嵌套关系, 而是依赖于end关键字
比如一个if-else语句:

if 1 > 2
    sprintf('if')
else
    sprintf('else')
end

运行结果当然就是

ans =

else

如果没有这个end, matlab就会认为下面的全部都是else中的逻辑, 不管你怎么缩进

sprintf函数和别的语言中的sprintf用法, 作用都一样, 使用%d这种风格来格式化字符串, 返回值当然是字符串, 所以后面不加分号就可以直接输出

当然由于matlab的这种特性, 其实还可以这样输出滑稽

if 1 > 2
    'if'
else
    'else'
end

运行结果和上一个代码完全一致

数据类型

上面已经提过matlab是动态类型检查语言, 所以变量定义和python之类的部分一致, 如

int = 1;
float = 0.1;
str = 'hello world';

至于数组, matlab分为普通数组(向量/矩阵),用中括号[]定义
和单元数组(cell),用大括号定义{}
简单来说普通数组里的每一个元素数据类型必须一样(数字/字符串/对象)
而单元数组中的数据类型不必完全一样

array = [1, 2, 3, 4, 5];         %数组
array = [1 2 3 4 5];             %和上一行效果完全一样

cell = {0.5 'emmmm' [1 2 3 4]}   %单元数组
cell = {0.5, 'emmmm', [1 2 3 4]} %和上一行效果完全一样

matlab中%表示注释

用下标访问数组和别的语言有些不同, 是使用圆括号
并且下标是从1开始的

>> arr = [1 2 3 4 5];
>> arr(3)
ans =

     3

而使用方括号会报错!

矩阵

讲一下矩阵中一些重要的地方吧

如果要定义一个矩阵(多维数组)就用分号把每一行隔开

matrix = [1 2 3;
          4 5 6;
          7 8 9];

上面的代码写在同一行也是可以的

要获取矩阵的某一个值,有两种方法

一种是双下标索引, 基本语法是

matrix(i, j);

另一种是单下标索引, 基本语法是

matrix(index);

注意用的是圆括号

单下标索引是从(1,1)位置开始, 往下数第一行, 数完后开始数第二行,如上面定义的那个矩阵,输入matrix(8),得到的是6

冒号(:)运算符

matlab中的冒号有着特殊的作用
它大概可以理解为"每",常用它来生成数列

基本用法是这样的

x1 : d : x2

例如

>> 1 : 0.5 : 2.5
ans =

    1.0000    1.5000    2.0000    2.5000

也就是1到2.5,生成一个步长为0.5的等差数列
如果x2-x1的差不是d的倍数, 则生成的数列中不包括x2

d的默认值是1,冒号表达式也可以简写为

x1 : x2

>> 1 : 3.5
ans =

     1     2     3

冒号还可以用来遍历向量/矩阵

比如获取第一行的每一个元素,可以写成(反过来也一样)

matrix(1, :)

也就是用一个冒号代替了原来列号占的位置

同理可以遍历整个矩阵:

matrix(:, :)

也可以获取其中的数行数列

matrix(1 : 2, 2 : 3)

matlab编程

matlab大多是结构式编程, OOP相对而言使用较少
每一个*.m文件中可以含有一个或不含有主函数(primary function)
第一个定义的函数即为主函数, 主函数名必须与文件名相同

matlab中的函数定义格局, 与别处是不同的:

function 返回值 = 函数名(参数)
    函数体
end

如果不需要返回值,就直接

function 函数名(参数)
    函数体
end

例如

function ret = test()
    ret = 'I am primary function.';
end

主函数之后可以定义子函数
如果主函数后面没有end, 那么属于主函数的函数体到第一个子函数被定义为止

如:

function ret = test()
    ret = 'I am primary function.';

    subfunc();

function subfunc()
    'I am sub function'

运行结果是

ans =

I am sub function

ans =

I am primary function.

最后, 脚本运行完毕后变量并不会自动释放

就先写到这里吧,已经一点半了,关于类的我也不想写了,这辈子估计都不会愿意用matlab写类的

溜溜球

评论

  1. ⑨BIE

    为何不考虑py呢((

    1. Elatis

      数学狗总要学matlab的qwq

发送失败 可能是您的发言太频繁或联系方式有误

提交评论

Theme LightWhite Made by Archeb With
自豪地使用Typecho
© 2017 - 2019 Ela's Notes 全站共 19.96 W 字
博客已经运行了