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

如何在MATLAB中绘制常微分方程组解分量的导数曲线

问题原因

你遇到的报错是因为f1、f2都是定义在coupled函数内部的局部变量,MATLAB主工作区没有这些变量的定义,直接调用自然会提示变量未识别。你可以通过以下两种常用方法解决问题:


方法1:在主脚本手动计算导数

你可以直接在绘图前根据公式定义f1和f2,再计算需要的导数分量,代码如下:

% 接你之前的求解代码之后运行
% 定义和coupled函数内部规则一致的f1、f2,用点运算适配向量计算
f1 = 1./(t+1);
f2 = 1./(t+2);
% 计算两个目标导数分量
dwdt1 = z(:,2) - f1.*z(:,1);
dwdt3 = z(:,4) - f2.*z(:,3);
% 开启hold on叠加绘图
hold on
plot(t, dwdt1, 'r--', t, dwdt3, 'b--')
% 更新图例
legend('x(t)','y(t)','dx/dt','dy/dt')

方法2:直接调用coupled函数批量计算导数

如果不想手动重写公式避免出错,可以直接调用你已经写好的coupled函数,批量拿到所有时间点的导数向量:

% 接你之前的求解代码之后运行
% 批量计算所有时间点对应的导数
dwdt = arrayfun(@(ti, zi) coupled(ti, zi), t, num2cell(z,2), 'UniformOutput', false);
dwdt = cell2mat(dwdt');
% 提取需要的两个分量
dwdt1 = dwdt(:,1);
dwdt3 = dwdt(:,3);
% 叠加绘图
hold on
plot(t, dwdt1, 'r--', t, dwdt3, 'b--')
legend('x(t)','y(t)','dx/dt','dy/dt')

这种方法的优势是后续如果你修改了coupled内部的导数公式,不需要同步修改主脚本的计算逻辑,不会出现两边公式不一致的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:39:01