Matlab 功能分化

Matlab 功能分化,matlab,Matlab,我有一个功能: 其中| | x | |是欧几里得距离 对于给定的n个变量,我希望Matlab能够区分这个函数,然后将实数代入其中 我真正不明白怎么做的是: 1如何让Matlab创建所有这些新的n个变量,以便以后微分 2每个变量都是一个维数=d的向量,即x=[x1,x2,…xd],所以稍后我想就某些向量元素对函数进行微分,例如,就x1而言,我该如何做呢 编辑1:函数应在每个x_i处区分,其中i=1:n和的导数是每个元素的导数之和。。。因此,如果它是一个简单的函数(如玩具示例中的函数),我们只需手动

我有一个功能:

其中| | x | |是欧几里得距离

对于给定的n个变量,我希望Matlab能够区分这个函数,然后将实数代入其中

我真正不明白怎么做的是:

1如何让Matlab创建所有这些新的n个变量,以便以后微分

2每个变量都是一个维数=d的向量,即x=[x1,x2,…xd],所以稍后我想就某些向量元素对函数进行微分,例如,就x1而言,我该如何做呢


编辑1:函数应在每个x_i处区分,其中i=1:n

和的导数是每个元素的导数之和。。。因此,如果它是一个简单的函数(如玩具示例中的函数),我们只需手动查找一次导数,但我们使用符号数学工具箱以一般方式执行此操作:

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=-absx*signx/absx^2+absy^2+absz^2^3/2

你现在有了不同的选择。您可以使用来计算函数f,只需将数值赋给x、y和z并调用subsf。或者,您可以使用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

嗨,艾克,我很难理解你的问题。你的符号能更精确一点吗?特别是,在求和方程中,x_i是向量x的第i个分量,还是向量x_1,…,x_n序列中的第i个向量?对于要区分的函数,也要更加明确:它的域是n维实数吗?当你说你想要微分时,你想要一个数值格式,还是一个解析解?如果你想要一个解析解,你能保证你的函数处处可微吗?@Michael 1 x_i是序列中的第i个向量。2是的,这个域是实数的d维空间,正如我说的,每个向量都是d维的。最后,我只需要数值,但要达到这一点,正如我所理解的,我首先必须解析地求解它。是的,它在任何地方都是可微的,我所有的向量都是单位向量。1如果你的函数是整个和,即f=sum|i=1}^n | | x|i+x|i+1}| ^-1,那么它的域肯定不是R^d,而是R^d^n,即R^d中的n个向量序列。如果你没有明确的表示法,很难理解你想要计算哪一个导数。R^d中的梯度运算符还是其他什么?你打算自己动手求解导数,还是把它留给MATLAB?如果是后者,我很好奇你怎么知道这个函数处处都是可微的,因为fx=| x |在一维空间中x=0时是不可微的。