Matlab画三维图像给xy设定范围,定义域可是任意形状

用matlab画曲面图时,比如画一个旋转抛物面,如果如下写程序:

x=-1:0.02:1;
y=x;
[x1,y1]=meshgrid(x,y);%生成画图用的xy网格数据
z=x1.^2+y1.^2;
%C=0.1*z;%设置图像颜色的矩阵,跟z同形状
mesh(x1,y1,z)%画三维网格图
figure
surf(x1,y1,z)%画三维曲面图

图像就会这样:

 

 跟我们想象的旋转抛物面不怎么一样,边界是方的。一种方法是用极坐标生成网格数据,这种方法的局限性较大,生成的xy轴定义域网格数据都是圆形的(能否生成其他形状定义域没有好好研究),下面的方法基本是任意形状的定义域都可以。先上程序和图:

x=-1:0.001:1;
y=x;
[x1,y1]=meshgrid(x,y);%生成画图用的xy网格数据
z=x1.^2+y1.^2;
[m,n]=size(x1);
for i=1:m
    for j=1:m
        if x1(i,j)^2+y1(i,j)^2>1
            x1(i,j)=nan;%将不想要的点横坐标或纵坐标值改为nan
        end
    end
end
figure
mesh(x1,y1,z)%画三维网格图
figure
surf(x1,y1,z)%画三维曲面图
%shading flat;%去掉绘图时网格线的黑边,防止点太密时曲面呈黑色
shading interp%绘图时网格线颜色自动插值,让图像像颜色更自然

因为去掉了surf画图的黑色网格线,所以上面这段程序用surf和mesh画图结果一样。 

为防止边缘出现毛边,该段程序取点时取得比较密集。

原理通过程序大家应该看清楚了,就是把不想要的点横坐标或纵坐标改成nan。比如本例中不想要x1^{2}+y1^{2}>1的点,就将其横坐标都改为了nan,这样三维坐标缺少一维,图像自然就不显示了。

再来个马鞍面:

x=0:0.01:1;
y=x;
[x1,y1]=meshgrid(x,y);
[m,n]=size(x1);
for i=1:m
    for j=1:n
        if abs(x1(i,j))+abs(y1(i,j))>1
            x1(i,j)=nan;
            y1(i,j)=nan;
        end
    end
end
z=x1.*y1;
mesh(x1,y1,z)

### 使用 MATLAB 绘制吸引域 在 MATLAB 中绘制吸引域通常涉及定义系统的动力学方程并求解其稳定点或周期轨道。通过数值方法可以找到这些区域,并将其可视化。下面是一个简单的例子,展示如何使用 MATLAB 来绘制二维平面内的洛伦兹吸引子的吸引域。 #### 定义系统动态行为 首先需要建立描述系统演化的微分方程式。对于经典的洛伦兹系统来说: \[ \frac{dx}{dt} = \sigma(y-x),\quad \frac{dy}{dt}=x(\rho-z)-y,\quad \frac{dz}{dt}=xy-\beta z \] 其中 \( \sigma=10 \),\( \rho=28 \),\( \beta=\frac{8}{3} \)[^1]。 ```matlab function dx = lorenz(t,x) sigma = 10; beta = 8/3; rho = 28; % Define the Lorenz equations. dx = zeros(3,1); dx(1) = sigma * (x(2) - x(1)); dx(2) = x(1)*(rho - beta*x(3); end ``` #### 计算轨迹数据 接着利用 `ode45` 函数来积分上述常微分方程组得到一段时间内状态变量的变化情况。 ```matlab % Set initial conditions and time span for integration. initial_conditions = [1; 1; 1]; time_span = [0, 100]; % Solve ODEs using ode45 solver. [t, y] = ode45(@lorenz, time_span, initial_conditions); % Remove transient part of solution to focus on attractor region. transient_period = find(t >= max(t)/2, 1); t = t(transient_period:end); y = y(transient_period:end,:); ``` #### 可视化吸引域 最后一步就是将所得的数据绘制成三维图象表示出来。 ```matlab figure(); plot3(y(:,1), y(:,2), y(:,3)); hold on; xlabel('X Axis'); ylabel('Y Axis'); zlabel('Z Axis'); title('Lorenz Attractor Phase Space Trajectory'); grid on; view(-17, 29); axis tight; shading interp; camlight left; material shiny; hold off; ``` 此段代码展示了如何创建一个基本版本的洛伦兹吸引子相空间轨迹图像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值