系列更新MATLAB各种运算和操作的说明。
本篇主要包括代数运算相关内容(可利用侧边目录直接定位):
- 数据类型及转换:如“num2str”、“eval”、“double”、“cell2struct”等
- 图像类型转换(灰度图、二值图、动画操作):“rgb2gray”、“im2bw”、“im2double”
- 生成对数间距点:“logspace”
- 取整操作:“fix”、“floor”、“ceil”、“round”
- 数值与符号计算阶乘:“factorial”、“sym”
- 命令查询:“help”、“lookfor”、“which”
前文:
1- 数据类型及转换:如“num2str”、“eval”、“double”、“cell2struct”等
例1:clear; a=1, b=num2str(a), c=a>0, a= =b, a= =c, b= =c
输出:
a=1
b=1
c=logical 1
ans=logical 1
ans=logical 1
ans=logical 1
a为整数1,整型变量,b将a的值’1’转化为字符变量,c为布尔型,若a大于0则赋值1,否则赋值0。并比较abc三者两两间是否相等,答案是a与c相等,b与c、b与a不相等,这是因为a与c是相同整数值,而b为字符型,变量类型与ac不同,无法比较。
例2:clear; fun='abs(x)', x=-2, eval(fun), double(fun)
输出:
fun='abs(x)'
x=-1
ans=2
ans=97 98 115 40 120 41
将-2的绝对值赋值给fun,fun的值是2。利用eval函数将fun转化作为字符串运行,于是fun变为’abx(x)’共六个字符,double函数输入字符串时输出对应的ASCII码,故而输出’abx(x)’的ASCII码。
例3:
B1={1:9;' David Beckham '};
B2={180:-10:100; [100,80,75,;77,60,92;67 28 90;100 89 78]};
B=[B1, B2];
B{1,2}(8)
D=cell2struct(B,{'f1','f2'},2);
[a,b]=D.f1
观察D和B的具体内容。
输出:
ans=110
a=1 2 3 4 5 6 7 8 9
b='David Beckham'
B[1,2](8) 代表B中第一行第二列中的第八个元素,第一行第二列指B2,第八个元素即180-10*(8-1)=110。
B转化为结构体D,[a,b]=D.f1代表,[a,b]对应结构体中f1,即B1,参考B1形式知道a为1:9,b为David Beckham。
Size(B)为2 2,因为size反应维数,B1和B2分别为两行,故而行列维数都为2。
2- 图像类型转换(灰度图、二值图、动画操作):“rgb2gray”、“im2bw”、“im2double”
例:读入图片后,
(a) 转换成灰度图保存。提示:rgb2gray
(b) 将灰度图读入,并转换成二值图(仅黑白两色)。提示:im2bw
(c) 将原彩色图片中的红色成分在10s内随时间逐渐减少至0,完成一个颜色渐变的动画并输出成AVI文件。
原图:
转换为灰度代码(需要注意图片文件位置):
IM=imread('hearthstone.png'); % 读取图片
IM=rgb2gray(IM); % 转换为灰度图
imwrite(IM,'hsgray.png'); % 将新图片存入文件夹
效果:
转换为二值图:
IM=imread('hsgray.png'); % 读取图片
IM=im2bw(IM); % 转换为二值图
imwrite(IM,'hsbw.png'); % 将新图片存入文件夹
效果:
红色成分在10s内随时间逐渐减少至0,形成动画:
IM = imread('hearthstone.png'); % 读取图片文件
IM_double = im2double(IM); % 将图片数据转换为双精度浮点数
v = VideoWriter('myVideo.avi'); % 创建视频写入器对象
v.FrameRate = 10; % 设置视频的帧率为10帧/秒
open(v); % 打开视频写入器
for t = 0:100 % 遍历0到100的整数序列
R(:,:,1) = (IM(:,:,1) .* (100 - t)) ./ 100; % 计算红色通道的值,随着t的增加而逐渐减小
frame = R; % 将当前计算得到的红色通道赋值给frame变量
writeVideo(v, frame); % 将frame写入视频文件
end
close(v); % 关闭视频写入器,释放资源
(将avi转为gif后)效果:
ps:炉石要回归啦!=U=
3- 生成对数间距点:“logspace”
例:logspace(3,4,5)
在10^3和10^4之间生成五个对数间距点并组成向量
4- 取整操作:“fix”、“floor”、“ceil”、“round”
例1:fix(3.5), floor(3.5), ceil(3.5), round(3.5)
输出:
3,3,4,4
分别对小数3.5:向0取整,向下取整,向上取整,四舍五入
例2:fix(3.4), floor(3.4), ceil(3.4), round(3.4)
输出:
3,3,4,3
分别对小数3.4:向0取整,向下取整,向上取整,四舍五入
例3:fix(-3.1), floor(-3.1), ceil(-3.1), round(-3.1)
输出:
-3,-4,-3,-3
分别对小数-3.1:向0取整,向下取整,向上取整,四舍五入
例4:fix(-3.8), floor(-3.8), ceil(-3.8), round(-3.8)
输出:
-3,-4,-3,-4
分别对小数-3.8:向0取整,向下取整,向上取整,四舍五入
5- 数值与符号计算阶乘:“factorial”、“sym”
例:分别用数值和符号两种方法,计算365!,对比结果
命令行输入:
factorial(365), factorial(sym(365))
输出:
Inf,
25104128675558732292929443748812027705165520269876079766872595193901106138220937419666018009000254169376172314360982328660708071123369979853445367910653872383599704355532740937678091491429440864316046925074510134847025546014098005907965541041195496105311886173373435145517193282760847755882291690213539123479186274701519396808504940722607033001246328398800550487427999876690416973437861078185344667966871511049653888130136836199010529180056125844549488648617682915826347564148990984138067809999604687488146734837340699359838791124995957584538873616661533093253551256845056046388738129702951381151861413688922986510005440943943014699244112555755279140760492764253740250410391056421979003289600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
考察运算时间:
符号运算可以得到具体结果,而直接运算超出了显示范围,会显示无穷。利用符号运算计算的更快。利用 length() 可以进一步查看结果的数量级。
6- 命令查询:“help”、“lookfor”、“which”
help获取函数的帮助信息,帮助用户如何使用函数
lookfor搜索带有关键字的词条,很可能获得很多词条
which定位函数在计算机中的位置
以‘abs’为例:
(help)
(lookfor)
(which)
【本篇完】