matlab可以画图的例题
时间: 2023-08-07 12:40:24 浏览: 94
当然可以,Matlab是一款非常强大的数学软件,它不仅可以进行各种数学计算,还可以绘制各种图表。以下是一个简单的例子,演示如何使用Matlab绘制函数图像:
```matlab
% 定义x的范围
x = -5:0.1:5;
% 定义函数f(x)
f = sin(x)./x;
% 绘制函数图像
plot(x,f);
% 添加标题和标签
title('sinc函数图像');
xlabel('x');
ylabel('f(x)');
```
上述代码可以绘制出sinc函数的图像,其中包括函数曲线、x轴、y轴和标题等元素。
除了绘制函数图像,Matlab还可以绘制各种其他类型的图表,比如散点图、柱状图、饼图、雷达图等等。只需要调用不同的绘图函数,传入相应的数据即可。Matlab的绘图功能非常强大,可以满足各种绘图需求。
相关问题
最短路径问题的MATLAB带图片例题和答案全解
这里为您提供一个最短路径问题的 MATLAB 带图片例题和答案全解:
【例题】一张地图如图所示,从起点 A 到终点 B,求最短路线。

【解答】
1. 用矩阵表示地图:
```MATLAB
map = [0, 2, 0, 0, 0, 0, 0, 0, 0;
2, 0, 3, 0, 0, 0, 0, 0, 0;
0, 3, 0, 4, 4, 0, 0, 0, 0;
0, 0, 4, 0, 3, 0, 0, 0, 0;
0, 0, 4, 3, 0, 2, 0, 0, 0;
0, 0, 0, 0, 2, 0, 3, 3, 0;
0, 0, 0, 0, 0, 3, 0, 2, 0;
0, 0, 0, 0, 0, 3, 2, 0, 2;
0, 0, 0, 0, 0, 0, 0, 2, 0];
```
其中,0 表示两点不直接相连,其他数表示两点之间的距离。
2. 用 Dijkstra 算法求最短路线:
```MATLAB
start_point = 1; % 起点
end_point = 2; % 终点
distance = inf(1, 9); % 到各点的距离(初始值为无穷大)
distance(start_point) = 0; % 起点到起点的距离为 0
visited = zeros(1, 9); % 是否访问过(初始值为 0)
path = zeros(1, 9); % 路径(初始值为 0,表示无路径)
for i = 1:8
% 找到未访问过的距离最小的点
min_dist = inf; % 最小距离
u = -1; % 最小距离的点
for j = 1:9
if ~visited(j) && distance(j) < min_dist
min_dist = distance(j);
u = j;
end
end
if u == -1 % 未找到符合条件的点,跳出循环
break;
end
visited(u) = 1; % 标记为已访问
% 更新距离
for v = 1:9
if ~visited(v) && map(u, v) > 0 && distance(u) + map(u, v) < distance(v)
distance(v) = distance(u) + map(u, v);
path(v) = u;
end
end
end
% 输出最短路线
path_str = sprintf('%d', end_point);
current_p = end_point;
while path(current_p) ~= start_point
path_str = strcat(sprintf('%d', path(current_p)), '->', path_str);
current_p = path(current_p);
end
path_str = strcat(sprintf('%d', start_point), '->', path_str);
fprintf('最短路线:%s\n', path_str);
```
最短路线:1->2。
3. 画出最短路线:
```MATLAB
x = [200, 100, 0, 0, 100, 200, 300, 300, 200]; % 横坐标
y = [0, 100, 200, 300, 400, 400, 300, 200, 200]; % 纵坐标
h = figure(1); % 新建图形
set(h, 'position', [100, 100, 400, 500]); % 设置图形大小和位置
hold on; % 启动画图保持功能
axis equal; % 设置横纵坐标比例相同
plot(x, y, 'k-'); % 画出地图
% 画出起点和终点
plot(x(start_point), y(start_point), 'ro', 'MarkerSize', 8, 'LineWidth', 2);
plot(x(end_point), y(end_point), 'r*', 'MarkerSize', 8, 'LineWidth', 2);
% 画出最短路线
current_p = end_point;
while path(current_p) ~= start_point
plot([x(current_p), x(path(current_p))], [y(current_p), y(path(current_p))], 'r-', 'LineWidth', 2);
current_p = path(current_p);
end
plot([x(current_p), x(path(current_p))], [y(current_p), y(path(current_p))], 'r-', 'LineWidth', 2);
text(x(start_point), y(start_point)+10, 'A'); % 标注 A
text(x(end_point), y(end_point)-10, 'B'); % 标注 B
```
结果如图所示:

Laxfriedrichs格式与LaxWendroff格式求解双曲型偏微分方程例题matlab程序
由于不知道您具体要求的偏微分方程,下面以一维线性对流方程为例,演示Lax-Friedrichs格式和Lax-Wendroff格式的求解方法。
一、Lax-Friedrichs格式
偏微分方程为:
$$u_t+au_x=0$$
其中,$a$为常数。
离散化方法:
$$\frac{u_i^{n+1}-\frac{1}{2}(u_{i+1}^n+u_{i-1}^n)}{\Delta t}+a\frac{u_{i+1}^n-u_{i-1}^n}{2\Delta x}=0$$
整理可得:
$$u_i^{n+1}=\frac{1}{2}(u_{i+1}^n+u_{i-1}^n)-\frac{a\Delta t}{2\Delta x}(u_{i+1}^n-u_{i-1}^n)$$
matlab程序如下:
clc;
clear;
a=1; % 常数a
L=1; % 区间长度
T=1; % 时间长度
dx=0.01; % 空间步长
dt=0.001; % 时间步长
x=0:dx:L; % 空间网格
t=0:dt:T; % 时间网格
n=length(t); % 时间步数
m=length(x); % 空间步数
u=zeros(m,n); % 初始化解向量
% 边界条件
u(1,:)=0;
u(m,:)=0;
% 初始条件
u(:,1)=exp(-100*(x-0.5).^2);
% Lax-Friedrichs格式求解
for i=2:m-1
u(i,2)=(u(i+1,1)+u(i-1,1))/2-a*dt/(2*dx)*(u(i+1,1)-u(i-1,1));
end
for j=2:n-1
for i=2:m-1
u(i,j+1)=(u(i+1,j)+u(i-1,j))/2-a*dt/(2*dx)*(u(i+1,j)-u(i-1,j));
end
end
% 画图
[X,T]=meshgrid(x,t);
surf(X,T,u');
xlabel('x');
ylabel('t');
zlabel('u');
二、Lax-Wendroff格式
偏微分方程同上。
离散化方法:
$$u_i^{n+1}=u_i^n-\frac{a\Delta t}{2\Delta x}(u_{i+1}^n-u_{i-1}^n)+\frac{a^2\Delta t^2}{2\Delta x^2}(u_{i+1}^n-2u_i^n+u_{i-1}^n)$$
matlab程序如下:
clc;
clear;
a=1; % 常数a
L=1; % 区间长度
T=1; % 时间长度
dx=0.01; % 空间步长
dt=0.001; % 时间步长
x=0:dx:L; % 空间网格
t=0:dt:T; % 时间网格
n=length(t); % 时间步数
m=length(x); % 空间步数
u=zeros(m,n); % 初始化解向量
% 边界条件
u(1,:)=0;
u(m,:)=0;
% 初始条件
u(:,1)=exp(-100*(x-0.5).^2);
% Lax-Wendroff格式求解
for i=2:m-1
u(i,2)=u(i,1)-a*dt/(2*dx)*(u(i+1,1)-u(i-1,1))+a^2*dt^2/(2*dx^2)*(u(i+1,1)-2*u(i,1)+u(i-1,1));
end
for j=2:n-1
for i=2:m-1
u(i,j+1)=u(i,j)-a*dt/(2*dx)*(u(i+1,j)-u(i-1,j))+a^2*dt^2/(2*dx^2)*(u(i+1,j)-2*u(i,j)+u(i-1,j));
end
end
% 画图
[X,T]=meshgrid(x,t);
surf(X,T,u');
xlabel('x');
ylabel('t');
zlabel('u');
以上程序可以直接复制到matlab中执行,可以得到解的三维图像。需要注意的是,由于这两种格式的数值稳定性不同,所以在选择时间步长和空间步长时需要注意,以免出现数值不稳定的情况。
阅读全文
相关推荐












