首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >matlab中的一阶导数

matlab中的一阶导数
EN

Stack Overflow用户
提问于 2016-06-28 13:48:25
回答 2查看 1.4K关注 0票数 0

我想用matlab计算函数的一阶导数。但是,我不知道函数的公式,我只能访问它的输入和输出。例如:

代码语言:javascript
运行
复制
f([1 2 3 4 5]) = [1 4 9 16 25]; %Square function for the example

我对以下各项的产出不满意:

代码语言:javascript
运行
复制
diff([1 2 3 4 5]) %Which is [3 5 7 9]

我在这个论坛上看到,我不是唯一一个试图用matlab计算函数的一阶导数的人。但是,由于我不知道我的函数的数学公式,所以我不能使用符号数学工具箱。

所以我的问题是:

  • 如何通过只知道函数的输入和输出来计算matlab中函数的导数?
  • 我能否找到一种方法来检索我的函数的数学公式,以便我可以使用符号数学工具箱?

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2016-06-28 14:00:09

假设您可以轻松地计算函数,这里有一种不同的简单方法来估计导数。(假设函数运行良好)

代码语言:javascript
运行
复制
x = 1:5
h = 0.0001;

dir_est= (f(x)-f(x+h))/h

请注意,这非常类似于可派生性的定义。

票数 3
EN

Stack Overflow用户

发布于 2016-06-28 15:18:36

为了像前面所描述的那样解决您的问题,我将使用polyfitpolyval与蛮力方法的结合。就像这样。

代码语言:javascript
运行
复制
in = [1 2 3 4 5];
out = fun(in); % in this case, simply y = x.^2 
epsilon = 0.000001;
test = inf;
best = 0;
% some large term count
test = inf;
best = 0;
for n = 0:7
    p = polyfit(in, out, n);
    val = sqrt(sumsqr(polyval(p, in) - out));
    if ((val < test) & (abs(val - test) > epsilon))
        best = n;
        test = val;
    end
end
p = polyfit(in, out, best);
syms x, f;
expo = best:-1:0;
f = p * (x.^expo).';

然后,您可以对变量f使用符号数学。对于您提供的示例,它返回一个由x^2主导的多项式。

然而,似乎更好的方法是使用导数的定义或更稳健的数值方法,而不是像其他人所建议的那样有一个简单的区别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38078054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档