Дифференциация функций - PullRequest
       0

Дифференциация функций

0 голосов
/ 15 марта 2020

У меня есть функция:

enter image description here

Где || x || это евклидово расстояние.

Для заданного n (числа переменных) я хочу, чтобы Matlab дифференцировал эту функцию, а затем подставил в нее действительные числа.

Что я действительно не понимаю, как это сделать is:

1) Как позволить Matlab создать все эти новые n переменных для последующего дифференцирования?

2) Каждая переменная является вектором измерения = d, то есть x = [x1, x2,. .. xd], поэтому позже я хочу дифференцировать функцию по определенным векторным элементам, например по x1, как я могу это сделать?

РЕДАКТИРОВАТЬ 1: функция должна быть дифференцирована в каждом x_i, где I = 1: N

1 Ответ

1 голос
/ 15 марта 2020

Производная суммы - это сумма производных каждого элемента ... поэтому нам нужно найти производную только один раз (вы можете сделать это вручную, если это простая функция, как в вашем примере с игрушкой). , но мы делаем это в общем виде, используя Symboli c 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 (просто присвойте числовые c значения x, y и z и вызовите subs(f). Или вы создаете дескриптор функции (цифра c) с использованием 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...