MATLAB建模与可视化技术文档:从二维到三维
目录
引言
一、二维数据可视化
1.1 基础二维绘图
1.2 高级二维图表
二、三维数据可视化
2.1 三维曲线与散点图
2.2 三维曲面图
三、高级可视化技巧
3.1 动态可视化
3.2 交互式可视化
四、建模应用实例:热传导模型
4.1 模型建立
4.2 结果可视化
引言
MATLAB作为一款强大的科学计算软件,在数学建模和可视化领域具有广泛应用。其集成的绘图功能使研究人员能够直观展示复杂数据,将抽象数学模型转化为直观图形。本文全面介绍MATLAB在建模与可视化方面的应用,涵盖二维和三维图形绘制技术,并提供可直接运行的代码示例。
一、二维数据可视化
1.1 基础二维绘图
% 基础线图与散点图
x = linspace(0, 4*pi, 100);
y_sin = sin(x);
y_cos = cos(x);figure('Position', [100, 100, 800, 600])
subplot(2,1,1)
plot(x, y_sin, 'LineWidth', 2, 'Color', [0.2, 0.5, 0.8])
hold on
plot(x, y_cos, '--', 'LineWidth', 2, 'Color', [0.8, 0.2, 0.4])
title('三角函数曲线', 'FontSize', 14, 'FontWeight', 'bold')
xlabel('x', 'FontSize', 12)
ylabel('函数值', 'FontSize', 12)
legend('sin(x)', 'cos(x)', 'Location', 'northeast')
grid on
set(gca, 'FontSize', 11)% 散点图示例
subplot(2,1,2)
data = randn(200,2);
scatter(data(:,1), data(:,2), 60, 'filled', ...'MarkerFaceAlpha', 0.6, ...'MarkerEdgeColor', 'k')
title('随机数据散点图', 'FontSize', 14)
xlabel('特征1', 'FontSize', 12)
ylabel('特征2', 'FontSize', 12)
colormap(jet)
colorbar
1.2 高级二维图表
% 多类型图表组合
x = 1:10;
y1 = [45, 62, 58, 75, 81, 92, 88, 76, 68, 55];
y2 = [28, 35, 42, 51, 49, 38, 45, 52, 60, 65];figure('Color', 'white', 'Position', [100, 100, 900, 500])% 条形图与折线图组合
yyaxis left
bar(x, y1, 'FaceColor', [0.3, 0.6, 0.9], 'EdgeColor', 'none')
ylabel('销售量', 'FontSize', 12)yyaxis right
plot(x, y2, '-o', 'LineWidth', 2.5, 'Color', [0.9, 0.4, 0.2], ...'MarkerSize', 8, 'MarkerFaceColor', 'w')
ylabel('增长率 (%)', 'FontSize', 12)title('销售数据分析', 'FontSize', 16)
xlabel('月份', 'FontSize', 12)
legend('销售量', '增长率', 'Location', 'northwest')
set(gca, 'FontSize', 11, 'XGrid', 'on', 'YGrid', 'on', 'Box', 'off')
二、三维数据可视化
2.1 三维曲线与散点图
% 三维螺旋线
t = linspace(0, 10*pi, 500);
x = sin(t);
y = cos(t);
z = t/10;figure('Color', 'white', 'Position', [100, 100, 800, 700])
subplot(2,1,1)
plot3(x, y, z, 'LineWidth', 2.5, 'Color', [0.8, 0.2, 0.4])
grid on
title('三维螺旋线', 'FontSize', 14)
xlabel('X轴')
ylabel('Y轴')
zlabel('Z轴')
view(35, 30)% 三维散点图
subplot(2,1,2)
[X, Y, Z] = peaks(50);
scatter3(X(:), Y(:), Z(:), 40, Z(:), 'filled')
title('Peaks函数三维散点图', 'FontSize', 14)
xlabel('X轴')
ylabel('Y轴')
zlabel('Z轴')
colormap(turbo)
colorbar
view(-45, 20)
2.2 三维曲面图
% 三维曲面绘制
[X, Y] = meshgrid(-3:0.1:3);
Z = sin(X) .* cos(Y) .* exp(-0.2*(X.^2 + Y.^2));figure('Color', 'white', 'Position', [100, 100, 1000, 800])% 基础曲面图
subplot(2,2,1)
surf(X, Y, Z)
title('基础曲面图', 'FontSize', 12)
shading interp
colormap(parula)
colorbar% 网格曲面图
subplot(2,2,2)
mesh(X, Y, Z)
title('网格曲面图', 'FontSize', 12)
colormap(hot)% 带轮廓的曲面图
subplot(2,2,3)
surfc(X, Y, Z)
title('带轮廓的曲面图', 'FontSize', 12)
shading flat
colormap(jet)% 光照效果曲面图
subplot(2,2,4)
surf(X, Y, Z, 'FaceAlpha', 0.9, 'EdgeColor', 'none')
title('光照效果曲面图', 'FontSize', 12)
light('Position', [1, 0.5, 0.5], 'Style', 'infinite')
lighting gouraud
material shiny
colormap(spring)
view(30, 45)sgtitle('三维曲面可视化示例', 'FontSize', 16, 'FontWeight', 'bold')
三、高级可视化技巧
3.1 动态可视化
% 三维动态演示
figure('Color', 'white', 'Position', [100, 100, 800, 600])
[x, y] = meshgrid(-2:0.2:2);
z = x .* exp(-x.^2 - y.^2);
h = surf(x, y, z);
shading interp
colormap(jet)
axis([-2 2 -2 2 -0.5 0.5])
title('动态曲面演示', 'FontSize', 14)% 创建动画
for az = -37.5:0.5:30view(az, 30)drawnowpause(0.05)
end
3.2 交互式可视化
% 交互式可视化
figure('Color', 'white', 'Position', [100, 100, 900, 700])
data = randn(500, 3);
scatter3(data(:,1), data(:,2), data(:,3), 50, data(:,3), 'filled')
title('交互式三维散点图 (旋转/缩放/平移)', 'FontSize', 14)
xlabel('X轴')
ylabel('Y轴')
zlabel('Z轴')
colormap(turbo)
colorbar
rotate3d on% 添加数据游标
dcm = datacursormode(gcf);
set(dcm, 'UpdateFcn', @(src, event) sprintf('X:%.2f\nY:%.2f\nZ:%.2f',...event.Position(1), event.Position(2), event. Position(3)))
四、建模应用实例:热传导模型
4.1 模型建立
% 热传导方程数值解
L = 1; % 金属棒长度
T = 0.5; % 总时间
nx = 50; % 空间离散点数
nt = 1000; % 时间离散点数
alpha = 0.01; % 热扩散系数dx = L/(nx-1);
dt = T/nt;% 初始条件 (中心加热)
u = zeros(nx, nt);
u(round(nx/2), 1) = 100;% 边界条件
u(1, :) = 0;
u(nx, :) = 0;% 有限差分求解
for k = 1:nt-1for i = 2:nx-1u(i, k+1) = u(i, k) + alpha*dt/dx^2 * (u(i+1, k) - 2*u(i, k) + u(i-1, k));end
end
4.2 结果可视化
% 热传导结果可视化
x = linspace(0, L, nx);
t = linspace(0, T, nt);figure('Color', 'white', 'Position', [100, 100, 1200, 500])% 三维曲面图
subplot(1,2,1)
[X, T] = meshgrid(x, t);
surf(X, T, u', 'EdgeColor', 'none')
title('热传导过程三维可视化', 'FontSize', 14)
xlabel('位置 (m)', 'FontSize', 12)
ylabel('时间 (s)', 'FontSize', 12)
zlabel('温度 (°C)', 'FontSize', 12)
colormap(jet)
colorbar
view(30, 45)% 二维时间切片图
subplot(1,2,2)
hold on
time_points = [1, 100, 300, 600, 1000];
colors = lines(length(time_points));for i = 1:length(time_points)idx = time_points(i);plot(x, u(:, idx), 'LineWidth', 2.5, ...'Color', colors(i,:), ...'DisplayName', sprintf('t=%.3fs', t(idx)))
endtitle('不同时刻温度分布', 'FontSize', 14)
xlabel('位置 (m)', 'FontSize', 12)
ylabel('温度 (°C)', 'FontSize', 12)
legend('show', 'Location', 'northeast')
grid on
set(gca, 'FontSize', 11)