“MATLAB程序设计(王赫然)”阅读笔记(一)——基础部分与图形可视化

代码下载

1.开发环境配置

1.多显示器桌面布局
2.设置长期工作目录:在matlabrc.m文件中加入:

cd('工作目录路径');

3.设置字体字号:12
4.配置字体与背景色:https://blog.csdn.net/qq_32412759/article/details/77855792

2.编辑器窗口

1.代码自动填充:输入前几个字符后,按Tab键调出自动填充项,使用箭头选,再次按Tab键确认。
2.重视代码分析器的判断,红色:语法错误,橙色:警告,绿色:正常
3.%%为代码节的起始标志,Ctrl+Enter表示运行当前代码节,Ctrl+R打出一个百分号用于注释起始,Ctrl+T表示取消上一个Ctrl+R的注释
4.函数提示功能:输入函数名称与左括号,按Ctrl+F1,调出函数提示器。
5.智能缩进功能:Ctrl+I

3.工作区

1.表头右击可以调出其他显示项,如大小。
2.右击变量可以绘图,进行可视化

4.使用帮助文档

1.学习函数使用:帮助文档中单击“函数”,左侧模型树单击MATLAB,显示按类型分类的函数
2.设置本地帮助文档:预设-帮助-安装到本地,这样就不需要联网了。
3.搜索需要的函数:在命令行中输入:doc 函数名,就可以迅速搜到需要的函数的详细介绍。

5.MATLAB入门基础

1.变量命名:驼峰命名法:首字母小写,如cityLocation,studentName
2.分号;表示命令执行完后不输出,逗号,表示输出结果
3.空格或逗号均可表示同一行内的元素分割,分号;称为行间分隔号
4.较大型矩阵的运算之前,最好预先开辟一块储存空间,以防止矩阵维度或元素数目多次变化引起计算效率的降低。这样的函数有:zeros()和ones()
5.索引。索引有两种,一种是单索引,如a(2),表示对a向量化后取第二个。另一种是角标索引,如a(3,1)。向量化操作:b=a(:),b是矩阵a的向量化结果。
6.使用续行号:... 表示这行写不下,转到下一行接着写。
7.左除:A\b表示A的逆乘以b
8.disp()函数用于在命令行中快速显示字符串或变量。
9.for循环变量如果是行向量,则每层循环中变量取行向量中的各元素;如果循环变量是矩阵,则取矩阵中各列的向量为一个元素作为每层循环中的变量。

a = [1 2; 3 4];
for i = a
     i
end

输出为

i = 2x1
	1
	3
i = 2x1
	2
	4

10.不建议两个浮点数之间直接判断是否相等,而应采用判断差的绝对值的方法,这是由于数值之间存在计算精度的考虑。
11.MATLAB文字的存储有两种方式,即“字符”和“字符串”,字符用单引号,字符串用双引号。字符矩阵可以同时赋值一串字符,而且显示时也会将一行中的字符连续显示出,但这并不表示它是一个字符串,仍旧是字符类型。
12.符号数学:syms xsym('x')两种方式定义符号变量;
13.维度(行,列,页)
14.优先考虑矩阵运算,其次向量运算,最后元素运算。

6.矩阵编程要点

1.编程前要对矩阵讲行内存预分配。
编程前,首先使用如zeros()ones()函数,将要处理的矩阵的内存空间开辟出来,以避免在程序运行的中途反复更改矩阵的规模,这会消耗大量的时间与算力。
2.矩阵意义要单一且明确。
每个矩阵只有一个涵义,矩阵中的每个维度也只有单一意义,不要再一个矩阵中存储多种类型信息;要借助良好的命名以及清晰的注释保证每个矩阵的意义明确。
3.编程过程中检查和确认矩阵的规模。
4.优先使用逻辑索引操作。
5.慎用循环语句。矩阵编程>向量编程>元素编程
6.多向量计算是的遍历网格化。

[X,Y] = meshgrid(-5:0.1:5,-2.5:0.1:2.5);
Z = sin(abs(X.*Y));

7.元胞数组和结构体的使用;
8.对于以0元素为主的矩阵,尽量使用稀疏矩阵。

7.MATLAB图形可视化

1.MATLAB基于面向对象的编程思想来搭建图形,一条线即为一个对象,对象具有属性值,可以通过对属性赋值来改变对象的设置。

x = 0:pi/15:2*pi;
y1 = sin(x);
y2 = sin(x-0.8);
y3 = sin(x-1.6);
p = plot(x,y1,x,y2,x,y3)
p(1).LineStyle = "--";
p(2).Marker = 'o';
p(3).Color = [0.4 0.8 0.1];
[p.LineWidth] = deal(3);
axis equal

其中,p是结构体,包含三个对象;
打开属性检查器,可以预览更改属性的属性值后的各种效果,同时也可以按Tab键智能提示属性名。
打开属性检查器的方法

2.当输入矩阵中有NaN或Inf值时,线图绘制将强行断开,但仍属于一条线,共享同样的线性、颜色等属性。应用:需要绘制多条同外观的不连续线段时,可以将数据尾部加NaN再相接后直接绘图即可。

x = [0:pi/15:2*pi NaN 3*pi:pi/15:5*pi];
y = sin(x);
p = plot(x,y)

不连续线段
3.使用显函数图fplot()或隐函数图fimplict()作图(需要使用函数句柄@,且隐函数图要求方程整理为表达式等于0的形式),因为作图精准,绘图点分配是曲率自适应的。

y = @(x) sin(x);
f = fplot(y);
f.XRange = [-2*pi 2*pi];
f.LineWidth = 2;

4.grid minor开启次网格线
5.画热图,作用是将数据量化为颜色,实现对每一类数据点的多少一目了然。

clc
T = readtable('outages.csv');
h = heatmap(T,'Region','Cause');
h.Title = '美国电力中断事故起因与地区热图';
h.XLabel = '地区(Region)';
h.YLabel = '起因(Cause)';
h.FontSize = 12;

热图效果图
6.作图文本信息:

clc
x = 0:0.1:15;
y_alpha = sin(x);
y_beta = sin(x.^1.1);
p = plot(x,y_alpha);
hold on;
plot(x,y_beta,'--');
hold off;
t = title('函数图');
t.FontSize = 12;
t.FontWeight = "bold";
xlabel('x');
te = text(3,sin(3),'\leftarrow sin(3)');
yline(0);
l = legend(["t_{\alpha}=sin(x)","y_{\beta}=sin(x^2)"]);
l.FontSize = 12;
annotation('textbox',[0.18 0.2 0.1 0.1],'String','对比');

作图文本信息
7.代码自动生成
在图形中修改,而后点击“自动生成代码”,即可生成修改修改图形后对应的代码。
8.图像修改

clc
I = imread('peppers.png');
subplot(3,3,1);imshow(I);title('原图');
J = imcrop(I,[260 140 300 200]);
subplot(3,3,2);imshow(J);title('剪裁');
s = imresize(J,0.1);
subplot(3,3,3);imshow(imresize(J,0.1));title('尺寸缩小');
%矩阵中存储的信息量已经只有原来的1/10,但是被强行拉大,所以是糊的
subplot(3,3,4);imshow(imresize(J,10));title('尺寸放大'); % 默认双三次插值
subplot(3,3,5);imshow(imresize(J,10,"nearest"));title('尺寸放大-不插值');
subplot(3,3,6);imshow(fliplr(J));title('左右翻转');
subplot(3,3,7);imshow(flipud(J));title('上下翻转');
subplot(3,3,8);imshow(imrotate(J,10));title('旋转-不插值');
subplot(3,3,9);imshow(imrotate(J,10,"bicubic"));title('旋转-插值');

9.创建视频文件:
大致流程有四步:
1.图形准备
2.创建一个视频文件并打开
3.进入动画循环,修改要变化的属性并更新,然后使用getframe()函数将当前的画面取出,再使用writeVideo()函数将画面写入视频;
4.退出循环并关闭视频文件

clc
[x,y,z] = ellipsoid(0,0,0,8,4,4,250);
figure;
ax = gca;% 取当前坐标区
s = surf(x,y,z);
axis vis3d;% 旋转时纵横比不变
colormap copper; % 铜配色
shading interp; % 插值着色
l = light(ax); % 打开光照
l.Position = [0 -10 1.5]; % 调整光照位置
material metal; % 金属质感
axis equal; axis off;
% 创建视频并打开
v = VideoWriter('videoRot.avi');open(v)
for k = 30:2:390
    ax.View = [k 30];
    drawnow
    m = getframe(gcf);writeVideo(v,m);
end
close(v) %关闭视频文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值