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

MATLAB中gradient计算曲线斜率与手动计算结果不符问题

斜率计算结果不匹配的原因

你得到的结果和手动计算不一致,核心是代码里梯度计算的参数传错,计算的导数和你绘图、手动取点计算的导数根本不是同一组变量的变化率:

  • 你代码里写的sl = gradient(y,x),按照MATLAB的gradient(函数值, 自变量)语法,这行计算的是y对x的导数dy/dx,但你绘图用的是plot(inx,y),图上横轴是inx、纵轴是y,你手动取点算的是Δy/Δinx,两个斜率的物理意义完全不同,结果自然不匹配。
  • 你现在代码算出0.25是必然结果:x是1到5均匀生成的1001个点,相邻点间隔为(5-1)/(1001-1)=0.004;y是-1到0均匀生成的1001个点,相邻点间隔为(0 - (-1))/(1001-1)=0.001。均匀序列的内部点数值梯度就是间隔比值0.001/0.004=0.25,不管你取哪个索引位置,返回的梯度值都是0.25,这个值和inx变量没有任何关系。
  • 如果你要计算绘制出的y-inx曲线在目标位置的斜率,需要把梯度计算的自变量替换成inx,正确代码如下:
% 替换原代码中sl的赋值行,计算y对inx的导数,即图中曲线的斜率
sl = gradient(y, inx);
s1_po = sl(idinx)

注意:你的inx是随x增大单调递减的序列(因为inx = mep./x),find(inx > dinx,1)返回的是序列开头(inx值最大的一侧)第一个满足阈值条件的点索引,手动取点计算时不要找错对应位置,否则也会出现数值误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:00:52