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

MATLAB绘制复合函数导数矢量图报错求助

MATLAB向量场绘制问题修正

错误原因

  1. 匿名函数d需要传入t、x、y三个参数,直接调用d(1),d(2)既缺失必要输入,也误解了函数句柄的调用逻辑。
  2. 向量场随时间t动态变化,必须指定具体时刻才能绘制静态向量场。
  3. 原代码中使用了矩阵乘法*和幂运算^,而非元素-wise运算.*和.^,无法对网格矩阵的每个点独立计算。
  4. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:45:06