我有一个功能:
|| x ||是欧几里得距离。
对于给定的n个(变量数),我希望Matlab区分该函数,然后将实数替换为该函数。
我真正不知道该怎么做的是:
1)如何让Matlab创建所有这些新的n个变量以供以后区分?
2)每个变量都是一个维数为d的矢量,即x = [x1,x2,... xd],因此稍后我想针对某些矢量元素(例如针对x1)区分函数,我该怎么办?
编辑1:每个x_i的函数应有所区别,其中i = 1:n
答案 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
(只需将数字值分配给x
,y
和z
并调用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