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

Octave中求sin(x)在x=π/4处二阶导数(步长h⁻¹)的代码问题

在Octave中估算sin(x)在x=π/4处的二阶导数

你遇到的问题是函数句柄的语法错误——Octave里的函数句柄@(...)括号内必须是输入参数列表,而不是直接写表达式,而且你重复用f作为函数名也导致了混淆。下面是正确的实现方案:

步骤1:理解中心差分公式

二阶导数的中心差分估算公式是:

f''(x) ≈ [f(x+h) - 2f(x) + f(x-h)] / h²
这里h是步长(你提到的h⁻¹可能是笔误?如果是指步长为1/h,只需要把公式里的h替换成1/h即可,但通常我们用小步长h来获得更精确的结果)。

步骤2:正确定义函数句柄

方案1:针对sin(x)的专用估算函数

先定义原函数的句柄,再定义二阶导数估算函数:

% 定义原函数sin(x)的句柄
f = @(x) sin(x);

% 定义二阶导数估算函数,输入参数是x和步长h
second_deriv_est = @(x, h) (f(x+h) - 2*f(x) + f(x-h)) / h^2;

方案2:通用型二阶导数估算函数(支持任意函数)

如果需要复用这个估算逻辑到其他函数,可以把原函数作为参数传入:

% 通用二阶导数估算函数,输入参数为原函数f、目标点x、步长h
second_deriv_general = @(f, x, h) (f(x+h) - 2*f(x) + f(x-h)) / h^2;

步骤3:计算x=π/4处的二阶导数

以方案1为例,执行以下代码:

x_target = pi/4;
h = 0.01; % 步长,可根据精度调整,比如h=1e-4会更精确

% 计算估算值
estimated = second_deriv_est(x_target, h);
% sin(x)的二阶导数实际是 -sin(x),计算实际值用于对比
actual = -sin(x_target);

% 输出结果
disp(['x=π/4处sin(x)二阶导数的估算值: ', num2str(estimated)]);
disp(['x=π/4处sin(x)二阶导数的实际值: ', num2str(actual)]);

运行后你会看到估算值非常接近实际值(-√2/2 ≈ -0.7071)。

为什么你的原代码出错?

你写的f=@(f(x+h)-2*(f(x))+(f(x-h)))./h^2;违反了Octave函数句柄的语法规则:

  • @()括号内必须是参数名(比如x, h),不能直接写表达式
  • 你用f同时作为函数句柄名和原函数名,导致命名冲突和解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:02:33