Как автоматически вычислить производные в течение -1 oop в Matlab? - PullRequest
0 голосов
/ 30 апреля 2020

В целях обобщения, я надеюсь, что Matlab может автоматически вычислить 1-ю и 2-ю производные ассоциированной функции f (x). (в случае, если я изменяю f (x) = sin (6x) на f (x) = sin (8x))

Я знаю, что существуют встроенные команды с именами diff() и syms, но я Не могу понять, как с ними бороться с индексом i в for-l oop. Это ключевая проблема, с которой я борюсь.

Как мне внести изменения в следующий набор кодов? Я использую MATLAB R2019b.

n = 10;
h = (2.0 * pi) / (n - 1);
for i = 1 : n
  x(i) = 0.0 + (i - 1) * h;
  f(i) = sin(6 * x(i));
  dfe(i) = 6 * cos(6 * x(i));   % first derivative
  ddfe(i) = -36 * sin(6 * x(i));   % second derivative 
end

1 Ответ

2 голосов
/ 30 апреля 2020

Вы можете просто использовать subs и double, чтобы сделать это. Для вашего случая:

% x is given here
n = 10;
h = (2.0 * pi) / (n - 1);
syms 'y';
g = sin(6 * y);
for i = 1 : n
  x(i) = 0.0 + (i - 1) * h;
  f(i) = double(subs(g,y,x(i)));
  dfe(i) = double(subs(diff(g),y,x(i)));   % first derivative
  ddfe(i) = double(subs(diff(g,2),y,x(i)));   % second derivative 
end

С помощью комментария @Daivd вы также можете векторизовать l oop:

% x is given here
n = 10;
h = (2.0 * pi) / (n - 1);
syms 'y';
g = sin(6 * y);
x = 0.0 + ((1:n) - 1) * h;
f = double(subs(g,y,x));
dfe = double(subs(diff(g),y,x));   % first derivative
ddfe = double(subs(diff(g,2),y,x));   % second derivative 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...