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

MATLAB按数学公式填充数组及绘制曲面的报错问题求解

MATLAB数组填充与绘图报错解决方案

报错根因梳理

1. 赋值维度不匹配报错

原代码中x(k+1) = x0 + s*f*sin(k)行直接调用了全量数组f(长度为126的一维向量),而左侧是单个元素的赋值位置,左右维度不一致导致报错。你后续修改为调用f(k+1)取当前迭代的单个值的操作是正确的,可解决该报错。

2. surface函数调用报错

surface函数要求输入的X、Y、Z参数均为二维矩阵,用于表示曲面网格上每个节点的坐标与高度值,你当前计算得到的x、y、f均为一维向量,不符合输入要求,因此触发ZData维度错误。

对应解决方案

根据你的实际需求二选一即可:

方案1:绘制三维参数曲线(适配你当前的一维计算逻辑)

你的现有逻辑是按参数k逐点生成的一维序列,属于空间参数曲线,直接将surface替换为plot3即可正常出图,优化后的代码如下:

clear; clc;
% 调整步长为0.1,避免步长过大导致曲线粗糙
t = 0:0.1:40*pi;
f = zeros(size(t));
x = zeros(size(t));
y = zeros(size(t));
x0 = 0;
y0 = 0;
s = 5; 
% 用索引遍历避免浮点数作为索引的潜在问题
for idx = 1:length(t)
    k = t(idx);
    f(idx) = exp(cos(k)) - 2*cos(4*k) - (sin(k/12))^5;
    x(idx) = x0 + s*f(idx)*sin(k);
    y(idx) = y0 + s*f(idx)*cos(k);
end
% 调用plot3绘制三维曲线
plot3(x, y, f, 'r');
xlabel('x'); ylabel('y'); zlabel('f');
grid on;

方案2:绘制曲面图

如果明确需要输出曲面,需要先构造二维参数网格,将计算逻辑调整为生成二维矩阵,代码如下:

clear; clc;
% 生成二维参数网格
k_theta = linspace(0, 2*pi, 200);
k_rad = linspace(0, 40*pi, 200);
[K_theta, K_rad] = meshgrid(k_theta, k_rad);
% 逐元素计算二维矩阵的f、x、y
f = exp(cos(K_rad)) - 2*cos(4*K_rad) - (sin(K_rad/12)).^5;
x = 5*f.*sin(K_rad + K_theta);
y = 5*f.*cos(K_rad + K_theta);
% 绘制曲面
surface(x, y, f, 'EdgeColor', 'none', 'FaceColor', 'r');
xlabel('x'); ylabel('y'); zlabel('f');
view(3);
shading interp;

内容的提问来源于stack exchange,提问作者Oleg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:01