Разделение и выделение членов разложения в ряды Тейлора в MATLAB - PullRequest
1 голос
/ 07 мая 2019

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

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

Этот код может быть наиболее простым представлением вечного аннуитета. Я хочу показать, как изменение ставки дисконтирования (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", напримерВот почему я хочу разделять и назначать отдельные термины систематически, а не вручную.

1 Ответ

1 голос
/ 07 мая 2019

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

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
...