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

为何Matlab中fplot绘图结果与数学推导不符?

问题分析与解决方法

1. 导数在x=0处特征未呈现的原因及解决

你的导数推导完全正确:f'(x) = - (1/8)sin(x/8)sinx + cos(x/8)cosx,代入x=0后结果确实为1。绘图没体现该特征,主要是因为Matlab默认fplot的x范围(通常为[-5,5])内,导数函数的整体波动可能掩盖了x=0处的细节。

可以通过两种方式验证并强化显示:

  • 直接计算x=0处的导数值:
    disp(dfdx(0)); % 输出结果应为1
    
  • 手动缩小fplot的x范围,聚焦x=0附近区域:
    fplot(dfdx, [-1, 1]); % 清晰观察x=0处的取值
    

2. 积分函数在x=0处不为0的原因及解决

Matlab的int函数返回的是不定积分的一个原函数,不包含积分常数C。而你需要的是满足F(0)=0的原函数,因此必须补充计算常数项:

  1. 先获取不定积分结果:
    F = int(f(x));
    
  2. 计算常数C,使得F(0) + C = 0,即C = -F(0):
    C = -subs(F, x, 0);
    ind_ing = F + C;
    
  3. 此时验证ind_ing(0),结果应为0。

修正后的完整代码

clc;clear;
syms x f(x)
f(x) = cos(x/8)*sin(x);
dfdx = diff(f(x));

% 修正积分部分,添加常数项满足F(0)=0
F = int(f(x));
C = -subs(F, x, 0);
ind_ing = F + C;

% 验证关键节点数值
disp(['f(0) = ', char(f(0))]); % 输出0
disp(['f''(0) = ', char(dfdx(0))]); % 输出1
disp(['ind_ing(0) = ', char(ind_ing(0))]); % 输出0

% 指定x范围绘图,搭配图例和网格便于观察
fplot(f(x), [-2*pi, 2*pi], 'DisplayName', 'f(x)');
hold on;
fplot(dfdx, [-2*pi, 2*pi], 'DisplayName', 'f''(x)');
fplot(ind_ing, [-2*pi, 2*pi], 'DisplayName', 'F(x)');
hold off;
legend;
grid on;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:28:23