Matlab画图问题

img


这个图怎么用Matlab画出来?类似的像这样的小山峰图怎么随意调整某个地方的凸起凹陷?

(1)问题分析
可以把每一座山峰用高斯函数表示,用高斯函数的幅值、中心、标准差分别表示山峰的高度、位置、形状,从而可以画出各种想要的山峰组合。
(2)问题的matlab解决代码

%绘制三维山峰图
close all;
clear;clc;

%初始化
Gauss_fun_2D=@(x_mat,y_mat,amp,pos,std)amp*...
    exp(-((x_mat-pos(1)).^2+(y_mat-pos(2)).^2)/(2*std^2)); %通过匿名函数定义二维高斯函数
x_vec=-10:0.5:10; %给出画图的x范围
y_vec=(-10:0.5:10).'; %给出画图的y范围
peak1_amp=5; %设置第一个山峰的高度
peak1_pos=3*[1,-1];  %设置第一个山峰的位置
peak1_std=2; %通过高斯函数标准差设置第一个山峰的形状
peak2_amp=2; %设置第二个山峰的高度
peak2_pos=3*[-1,1]; %设置第二个山峰的位置
peak2_std=2; %通过高斯函数标准差设置第二个山峰的形状

%绘制三维山峰
x_num=length(x_vec);
y_num=length(y_vec);
x_mat=repmat(x_vec,y_num,1);
y_mat=repmat(y_vec,1,x_num);
peaks_val=Gauss_fun_2D(x_mat,y_mat,peak1_amp,peak1_pos,peak1_std)+...
    Gauss_fun_2D(x_mat,y_mat,peak2_amp,peak2_pos,peak2_std);
mesh_handle=mesh(x_vec,y_vec,peaks_val);
set(mesh_handle,'EdgeColor',0.25*[1 1 1]);  %设置画图的线条为浅灰色
view(-69,33); %设置方位角和仰角
axis off;  %去掉坐标轴

(3)代码的运行结果截图

img

这本质上是个数学问题,要想获得不同峰值效果的前提,是需要有三维绘图多峰函数的具体表达式;
由于在三维中峰值和三元指数函数有关,尝试了一下根据peaks函数返回的定义式,经修改后得到的自定义函数,可获得以下类似的大致效果:

clc,clear,close all;
figure
[x,y,z] = peaks(50);
z =  5*(1+2*x).^2.*exp(-(x.^2) - (y+1).^2) + 20*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2)... 
%    - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ... 
%    - 1/3*exp(-(x+1).^2 - y.^2) 
mesh(x,y,z)

img

把z中<0的值全部置为nan可仅显示z>0的部分

clc,clear,close all;
figure
[x,y,z] = peaks(50);
z = 5*(1+2*x).^2.*exp(-(x.^2) - (y+1).^2) + 20*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) 
z(z<0) = nan;
mesh(x,y,z)

img

并将线条置为黑色:

clc,clear,close all;
figure
[x,y,z] = peaks(50);
z = 5*(1+2*x).^2.*exp(-(x.^2) - (y+1).^2) + 20*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) 
z(z<0) = nan;
s = mesh(x,y,z);
set(s,'EdgeColor',[0 0 0])

img

peaks函数定义式可参考官方文档:https://ww2.mathworks.cn/help/matlab/ref/peaks.html?searchHighlight=peaks&s_tid=srchtitle_peaks_1

这样行吗?

from turtle import color
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import math

x = np.arange(-3,3,0.25)
y = np.arange(-3,3,0.25)
X, Y = np.meshgrid(x, y)
Z = np.cos(Y)-np.sin(X)

fig = plt.figure("image", figsize=(10, 8))
fig.canvas.manager.window.wm_geometry('+450+50')

ax = Axes3D(fig)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,color="#d8dcd6")  #平面
# ax.plot3D(np.ravel(X),np.ravel(Y),np.ravel(Z))  --3D图
plt.show()
```python

这里面的Z可以随意调换,只要清楚正余弦型函数性质即可(比如Z=1/2cos(Y+90°)-sin(X))

画什么?

您好!,可以参考:https://blog.csdn.net/weixin_57109262/article/details/123427730