MATLAB绘制复合函数导数矢量图报错求助
MATLAB向量场绘制问题修正
错误原因
- 匿名函数
d需要传入t、x、y三个参数,直接调用d(1),d(2)既缺失必要输入,也误解了函数句柄的调用逻辑。 - 向量场随时间
t动态变化,必须指定具体时刻才能绘制静态向量场。 - 原代码中使用了矩阵乘法
*和幂运算^,而非元素-wise运算.*和.^,无法对网格矩阵的每个点独立计算。 quiver要求输入的导数矩阵U、V必须和网格矩阵x、y维度完全匹配,需将函数返回的向量转换为对应网格大小的矩阵。
修正后的静态向量场代码
% 定义函数与偏导数(使用元素-wise运算适配矩阵输入) f = @(t,x,y) 0.02*sin(2*pi*t).*(x.^2 - 2*x) + x; dfdx = @(t,x,y) 0.02*sin(2*pi*t).*(2*x - 2) + 1; d = @(t,x,y) [-pi*sin(pi*f(t,x,y)).*cos(pi*y); ... pi*cos(pi*f(t,x,y)).*sin(pi*y).*dfdx(t,x,y)]; t = linspace(0,4,100); t_val = t(1); % 选择绘制t=0时刻的向量场,可替换为t中任意索引值 figure [x,y] = meshgrid(0:.1:2,0:0.1:1); % 获取该时刻所有网格点的导数 derivs = d(t_val, x, y); % 转换维度匹配网格矩阵 U = reshape(derivs(1,:), size(x)); V = reshape(derivs(2,:), size(y)); % 绘制向量场 quiver(x,y,U,V); xlabel('x'); ylabel('y'); title(['t = ', num2str(t_val), ' 时的向量场']);
动态向量场绘制(可选)
如果需要观察向量场随时间的变化,可添加循环实现实时更新:
figure [x,y] = meshgrid(0:.1:2,0:0.1:1); for idx = 1:length(t) t_val = t(idx); derivs = d(t_val, x, y); U = reshape(derivs(1,:), size(x)); V = reshape(derivs(2,:), size(y)); quiver(x,y,U,V); xlabel('x'); ylabel('y'); title(['t = ', num2str(t_val, '%.2f'), ' 时的向量场']); drawnow; % 实时刷新图像 end
内容的提问来源于stack exchange,提问作者Brittany Lazzaro
相关产品推荐
相关产品推荐

