为何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的原函数,因此必须补充计算常数项:
- 先获取不定积分结果:
F = int(f(x)); - 计算常数C,使得
F(0) + C = 0,即C = -F(0):C = -subs(F, x, 0); ind_ing = F + C; - 此时验证
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
相关产品推荐
相关产品推荐

