功能差异

时间:2020-03-15 00:17:50

标签: matlab

我有一个功能:

enter image description here

|| x ||是欧几里得距离。

对于给定的n个(变量数),我希望Matlab区分该函数,然后将实数替换为该函数。

我真正不知道该怎么做的是:

1)如何让Matlab创建所有这些新的n个变量以供以后区分?

2)每个变量都是一个维数为d的矢量,即x = [x1,x2,... xd],因此稍后我想针对某些矢量元素(例如针对x1)区分函数,我该怎么办?

编辑1:每个x_i的函数应有所区别,其中i = 1:n

1 个答案:

答案 0 :(得分:1)

总和的导数是每个元素的导数的总和...因此,我们只需要查找一次导数(如果像玩具示例中的简单函数,则可以手动执行此操作,但我们通常使用Symbolic Math Toolbox来做到这一点)

syms x y z % declaring 3 symolic variables
F = 1/(norm([x,y,z])); % declaring a function
f = diff(F,x) % calculate the derivative with regard to the symbolic variable x

f =-(abs(x)* sign(x))/(abs(x)^ 2 + abs(y)^ 2 + abs(z)^ 2)^(3/2)

您现在有不同的选择。您可以使用subs评估函数f(只需将数字值分配给xyz并调用subs(f)。或者,您可以使用matlabFunction创建(数字)函数句柄(我更喜欢这种方式)

fnc = matlabFunction(f); % convert to matlab function

然后,您只需要总结创建的向量(嗯,您需要总结两个向量元素中每个向量的和...)

% create arbitrary vector
n = 10;
x = rand(n+1,3);

% initialize total sum
SumFnc = 0;
% loop through elements
for i = 1:n
    % calculate local sum
    s = x(i,:)+x(i+1,:);
    % call derivative-function + sum up
    SumFnc = SumFnc + fnc(s(1),s(2),s(3));
end