Matlab基础知识
- 前言:笔者在学习数据分析时,发现像Matlab、R语言、Python这些都是工具,它们和Java和C系语言不一样的是它们比较灵活,使用者不必像Java一样要完全理解整个语言,而主要是现学现用的多,尤其是现在的工具包日新月异,脚本语言,拿来就可以用,就可以跑出我们的模型才是目的,不必死扣细节。
- 先来个例题:解如下方程:
x2−3x+1=0 x 2 − 3 x + 1 = 0
>> p = [1,-3,1]
>> a = roots(p)
a =
2.6180
0.3820
>> x = -5:0.1:5; #从-5到5的向量,步长为0.1
>> plot(x,y1) %绘制图片
数据类型
- 整型
- 有符号 int8、int16、int32、int64:分别代表8位,16位,32位,64位的有符号整数,如:int8: -128~127
- 无符号 uint8、uint16、uint32、uint64:分别代表8位,16位,32位,64位的无符号整数 如:uint8:0~255
- 浮点型
- single 单精度浮点数,4字节
- double 双精度浮点数,8字节
- 复数:如A = 6+5*i,(在matlab中 i与j 都默认代表复数的虚部单位,且 i*j = -1)
- 实部:双精度浮点型
- real(A) :求A的实部
- 虚部:双精度浮点型
- imag(A) :求A的虚部
- 实部:双精度浮点型
- 函数
- 形如:函数名(函数自变量),自变量一般都是矩阵,常数也是特殊的矩阵,返回的是与自变量同型的矩阵,都是矩阵
- 数学函数
- 以弧度度为单位的函数
- sin()、cos()、tan()等,输入的是弧度,如:sin(pi/2);
- 以角度为单位的函数
- sind()、cosd()、tand()等,输入的是弧度,如:sind(90);
- abs
- 取实数绝对值
- 取复数的模
- 字符串的ASCII码值
- 取整,和其它软件包差不多
- fix:去掉小数
- floor:向下取整
- ceil:向上取整
- round:四舍五入取整
- 判断素数:isPrime(),是素数则返回1,不是返回0
- 以弧度度为单位的函数
矩阵
创建矩阵
方括号:>> A = [1,2,3;4,5,6]
A = 1 2 3 4 5 6
由小矩阵列构造:C = [A,B ; B,A];
- 复数矩阵:A=B + i*C
- 冒号表达式:A = e1 : e2 : e3;
A = 1:0.1:2
A =
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 1.9000 2.0000 - 定数等分:linspace(a,b,n),a是第一个元素,b是最后一个元素,n是元素总数,公差就等于(b-a)/ n
- 还有结构矩阵、单元矩阵
- 矩阵元素的引用
- A(m,n) ,如:A(4,5)取第四行第五个元素
- 序号(矩阵的序号从第一列的第一个元素排到第一列最后一个元素,然后从第二列排… …)
- ind2sub() : 通过序号获取下标
- sub2ind():通过下标获取序号
- 通过序号取元素,A(4)
- 子矩阵
- A(i , : )
- A( : , j)
- end运算符:行或者列的末尾下标
- 删除元素
- 删除即把元素置空,如:A = [];
- 也可以把某行或某列删除,B( : , [2,4] ) = [] 删除第2、4列元素
- reshape(A,m,n):把矩阵A排成(m,n)形
- A = A( : )化成列向量
- 整型
- 字符串
- 字符串相当于行向量,如:ch = ‘abcde’; ch(1:5);取前五个字符
- 字符串倒序: ch = ch(end:-1:1); 前面取矩阵元素的原理
- 执行字符串命令:eval( s );
- ASCII码与字符
- abs( s )、double(s)都可以取字符矩阵S的ASCII码矩阵
- char( a + 32 ) :取(a+32)对应的字符
- 字符串的比较(按照ASCII码比)
- strcmp(s1,s2);判断两个字符串是否相等,若是则返回1,否则返回0
- strncmp(s1,s2,n) 判断前n个字符是否相等
- strcmpi(s1,s2) 忽略大小写比较两个字符串是否相等
- strncmpi(s1,s2,n) 忽略大小写比较两个字符串的前n个字符是否相等
- 运算
- 算术运算(所讨论的都是矩阵运算)
- +
- -
- *叉乘
- / 右除 B / A = B * inv(A) ,inv(A)求的是A的逆
- \ 左除 B \ A = inv(A) * B
- ^乘方 a^2
- 点运算
- 矩阵中每个元素都与另一个矩阵对应的元素进行数学运算
- 如: A.*B :A点乘B
- 矩阵中每个元素都与另一个矩阵对应的元素进行数学运算
- 关系运算
- < 判断左边是否小于右边,若是返回1,否则返回0
- <= 小于或等于
- > 大于
- >= 大于或等于
- == 判断相等
- 如:判断偶数,p = (rem(A,2) == 0),rem()是取余运算
- ~= 判断左右两边是否不相等
- 逻辑运算,与其它编程语言差不多
- 与 &
- 或 |
- 非 ~
- 算术运算(所讨论的都是矩阵运算)
码完已是深夜,这是笔者的笔记,纯手码,还没有过多地用于实践,有了实践经验会再分享
- 读者如果想练习下,可以做下水仙花数,即:找出三位数中,所有位数的立方和等于它本身的数,如:153 = 1*1*1 + 5*5*5 + 3*3*3
- 顺便贴下代码
%求水仙花数
m = 100:999;
m1 = rem(m,10);
m2 = rem(fix(m/10),10);
m3 = fix(m/100);
k = find(m == m1.*m1.*m1 + m2.*m2.*m2 + m3.*m3.*m3);
f = m(k)