簡體   English   中英

Matlab中的一階導數

[英]First derivative in matlab

我想用matlab計算函數的一階導數。 但是,我不知道函數的公式,我只能訪問它的輸入和輸出。 例如:

f([1 2 3 4 5]) = [1 4 9 16 25]; %Square function for the example

我對以下輸出不滿意:

diff([1 2 3 4 5]) %Which is [3 5 7 9]

我在這個論壇上看到,我並不是唯一一個嘗試使用matlab計算函數的一階導數的人。 但是由於我不知道函數的數學公式,因此無法使用符號數學工具箱。

所以我的問題是:

  • 我如何僅通過知道函數的輸入和輸出就可以在matlab中計算函數的導數?
  • 我可以找到一種方法來檢索函數的數學公式,以便可以使用符號數學工具箱嗎?

謝謝您的幫助。

假設您可以輕松評估函數,這是一種估算導數的簡單方法。 (假設該函數表現良好)

x = 1:5
h = 0.0001;

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

注意,這與導數的定義非常相似。

為了解決您描述的問題,我將結合使用polyfitpolyval與蠻力方法。 這樣的事情。

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為主的多項式。

但是,似乎更好的方法是使用導數的定義或更可靠的數值方法,然后使用其他人建議的簡單區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM