You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB R2014b中使用ezsurf绘制带约束条件的函数曲面

MATLAB带约束曲面绘制问题解决

代码错误点

  • 计算函数值f时,两个多项式乘积使用了矩阵乘法*,未使用逐元素乘法.*,无法得到每个网格点对应的正确函数值,这是无图形显示的核心原因。
  • 逐个对X1、X2赋值NaN的写法效率偏低,且容易引入额外的运算错误。
  • 约束判断使用<=和题目要求的<存在微小偏差,虽然影响不大但不符合题面要求。

修正后的完整代码

% 生成网格点,可适当调小步长获得更光滑的曲面
x = 0:0.05:2;
y = 0:0.05:2;
[X1,X2] = meshgrid(x,y);

% 定义所有约束,满足条件为逻辑值1,不满足为0
constraint1 = -X1 < 0;
constraint2 = -X2 < 0;
constraint3 = 3*X1 - X1.*X2 + 4*X2 -7 < 0;
constraint4 = 2*X1 + X2 -3 < 0;
constraint5 = 3*X1 - 4*X2.^2 -4*X2 <0;

% 合并约束,所有约束同时满足的点才是有效点
valid = constraint1 & constraint2 & constraint3 & constraint4 & constraint5;

% 计算函数值,所有逐元素运算的乘方、乘法都需要加.前缀
f = ((X1+1.5).^2 + 5*(X2-1.7).^2) .* ((X1-1.4).^2 + 0.6*(X2-0.5).^2);

% 不满足约束的点函数值设为NaN,绘制时会自动忽略
f(~valid) = NaN;

% 绘制曲面
surf(X1,X2,f);
shading interp; % 可选配置,让曲面颜色过渡更光滑
xlabel('x1');
ylabel('x2');
zlabel('f');

补充说明

如果运行后还是无图形显示,可以适当放大x、y的取值范围,确认可行域是否在你设置的网格范围内;也可以先用mesh(X1,X2,f)绘制网格,验证可行域是否正常生成。

内容的提问来源于stack exchange,提问作者Ongky Denny Wijaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:15:04