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
相关产品推荐
相关产品推荐

