Анонимная функция с использованием полинома - PullRequest
1 голос
/ 18 июня 2020

Допустим, я хочу создать функцию рациональных дробей в GNU Octave. Могу ли я сделать это легко, используя полиномиальные коэффициенты?

В качестве примера я хотел бы построить

f = @(x) x.^2./(2*x^2+3*x+2)

, используя

p1 = [1 0 0]
p2 = [2 3 2]

Ответы [ 2 ]

5 голосов
/ 18 июня 2020

Вы также можете использовать встроенную функцию polyval:

p1 = [1 0 0]
p2 = [2 3 2]

f = @(x,p1,p2) polyval(p1,x)./polyval(p2,x)
3 голосов
/ 18 июня 2020

С:

p1 = [1 0 0]
p2 = [2 3 2]

Вы можете сделать

f = @(x) sum([x.^2, x, 1].*p1) ./sum([x.^2, x, 1].*p2);

или

f = @(x,p1,p2) sum([x.^2, x, 1].*p1) ./sum([x.^2, x, 1].*p2);

Я бы сказал, что второй вариант более понятен, если вы собираетесь пробовать разные коэффициенты полинома.

если вы хотите иметь гибкость в порядке полиномов, вы можете даже go дальше:

f = @(x,p1,p2) sum(x.^[length(p1):-1:0].*p1) ./sum(x.^[length(p2):-1:0].*p2);
...