Scilab中numderivative函数用法疑问:返回矩阵原因及与diff的区别
关于numderivative返回矩阵的问题
numderivative的核心设计是计算单个输入点处的数值导数或雅可比矩阵,当你传入长度为100的数组x时,它会将整个数组识别为一个100维的输入向量,最终返回100×100的雅可比矩阵:只有对角线上的元素是对应位置的导数值3,其余位置均为0,和你得到的运行结果一致。
如果你要获取每个单点的导数,可以对每个x的元素单独调用该函数,示例代码如下:
// Define limits x0 = 0; x1 = 2; // Define array x for which the derivative will be calculated. n = 100; x = linspace (x0, x1, n); // Define function f(x) deff('y=f(x)','y=3*x'); // 逐点计算导数 myDiff = zeros(1, n); for i = 1:n myDiff(i) = numderivative(f, x(i)); end
运行上述代码后得到的myDiff就是全为3的一维序列,符合你的预期。
函数选型与numderivative的用途
你确实是选错了函数的适用场景:
numderivative主要面向多输入多输出函数的雅可比矩阵计算,比如输入为n维向量、输出为m维向量的函数,调用后可直接得到m×n的雅可比矩阵,多用于优化、非线性方程组求解等场景,不适合单变量函数多点位导数的批量计算。- 如果你需要快速计算单变量函数在离散序列上的导数,可以用
diff函数实现,计算效率更高,示例代码如下:
dx = x(2) - x(1); y = f(x); // diff计算得到长度为n-1的差分结果,补最后一位对齐原x序列长度 myDiff_diff = [diff(y)/dx, diff(y)/dx($)];
Scilab相关提问的适配性
本站支持Scilab相关问题的提问,多个Stack Exchange子社区都设有Scilab标签,只要你的提问符合社区规范(包含可复现的代码、明确的问题描述等),都可以正常发布。
内容的提问来源于stack exchange,提问作者Dr. Manuel Kuehner
相关产品推荐
相关产品推荐

