Разделение и выделение членов разложения в ряд Тейлора в MATLAB

Как можно «разделить» члены разложения в ряд Тейлора на отдельные части? Я использую этот инструмент для анализа отклонений в управленческом учете.

Мне нужно присвоить отдельные термины влияющим факторам.

Этот код может быть самым простым представлением бессрочной ренты. Я хочу показать, как изменение ставки дисконтирования (b) и денежного потока (a) влияет на стоимость.

syms a b a1 b1 test;
test = evalin(symengine,'mtaylor(a/b , [a = a1, b = b1], 4)')
dtest = subs(test, [a, a1, b, b1],[40,150,0.01,0.12])-(a1/b1)
dtest2 = subs(dtest, [a1,b1],[150,0.12])   
test =
 a1/b1 + (a - a1)/b1 - (a1*(b - b1))/b1^2 - ((a - a1)*(b - b1))/b1^2 + (a1*(b - b1)^2)/b1^3 - (a1*(b - b1)^3)/b1^4 + ((a - a1)*(b - b1)^2)/b1^3

dtest2 =
 545875/864

Следующее разделение было сделано вручную:

+(a - a1)/b1                  affected by delta cashflow
-(A1*(b - B1))/B1^2           affected by delta discount rate
-((a - a1)*(b - b1))/b1^2     affected by a mix of cashflow and disc. rate
+(a1*(b - b1)^2)/b1^3         affected by delta discount rate
-(a1*(b - b1)^3)/b1^4         affected by delta discount rate
+((a - a1)*(b - b1)^2)/b1^3   affected by a mix of cashflow and disc. rate

dtest2 -->>> The whole deviation 

Чтобы уменьшить оставшуюся часть расширения серии, я хочу расширить до порядка «200», например. Вот почему я хочу разделять и назначать отдельные термины систематически, а не вручную.


person Benjamin Schrammen    schedule 07.05.2019    source источник


Ответы (1)


Найдите два последовательных расширения серии Тейлора, затем вычтите текущую серию из предыдущей, вы получите дополнительные отдельные части, которые вам нужны.

syms a b a1 b1 test test2;
n = 4 % Taylor Expansion degree
for i = 1:n
    test(i) = evalin(symengine,strcat('mtaylor(a/b , [a = a1, b = b1], ', num2str(i), ')'));
     if i == 1
        test2(i) = test(i);
     else
        test2(i) = test(i)-test(i-1);
     end
end

test2(1) = a1/b1
test2(2) = (a - a1)/b1 - (a1*(b - b1))/b1^2
test2(3) = (a1*(b - b1)^2)/b1^3 - ((a - a1)*(b - b1))/b1^2
test2(4) = ((a - a1)*(b - b1)^2)/b1^3 - (a1*(b - b1)^3)/b1^4

Тест фильтрации2(2)

  filter = children(test2(2) + (a-a1) + (b-b1));
  filter = [ a, -a1, b, -b1, (a - a1)/b1, -(a1*(b - b1))/b1^2]

Игнорировать 4 первых элемента массива

filter(5) = (a - a1)/b1
filter(6) = -(a1*(b - b1))/b1^2

Тест фильтрации2(3)

filter = children(test2(3) + (a-a1) + (b-b1));
filter = [ a, -a1, b, -b1, -((a - a1)*(b - b1))/b1^2, (a1*(b - b1)^2)/b1^3]

Игнорировать 4 первых элемента массива

filter(5) = -((a - a1)*(b - b1))/b1^2
filter(6) = a1*(b - b1)^2)/b1^3
person Adam    schedule 07.05.2019
comment
Большое спасибо за ваш быстрый и полезный ответ! Это прекрасно работает, но у меня есть еще один вопрос. Как я могу отфильтровать уравнения по количеству влияющих факторов? Например: test2(2) = (a - a1)/b1 - (a1*(b - b1))/b1^2 содержит как (a - a1), так и (b - b1). Следовательно, существует смешанное влияние и воздействие от изменения (денежного потока). - person Benjamin Schrammen; 07.05.2019
comment
Спасибо еще раз за помощь. Как я могу выбрать элементы из матричного фильтра по их содержанию? Например, filter(5), если он содержит (a-a1) и (b-b1). - person Benjamin Schrammen; 08.05.2019