Я хочу автоматически вычислять разложения многочленов, где есть переменные (x1, x2, ...), а также коэффициенты (c1, c2, ...). Моя цель состоит в том, чтобы вычислить p(1)*(c1*x1+c2*x2+...)^n+ ... + p(n)*(c1*x1+c2*x2+...)^n .
Полиномиальное расширение: разделительные полиномиальные коэффициенты и x's
Как можно заметить, полученное выражение можно записать в виде F(x1,x2...)*g(c1,c2,...)
[где Р представляет собой матрицу строк и г есть матрица-столбец], т.е. есть некоторая мультипликативная развязка между коэффициентами и переменными.
Сейчас я использую символический набор инструментов MATLAB и строю F и g, вручную изучая полученные символические разложения. Это не очень возможно, как если бы n было большим, а c=(c1,c2,...)
слишком велико, слишком много терминов, и его больше невозможно вручную. Например, для (c1*x1+c2*x2+c3)
и n=2
, я хочу следовать.
>> p=[2 5]
p =
2 5
>> syms c1 c2 c3
>> syms x1 x2
>> expression= p(1)*(c1*x1+c2*x2+c3)^2 + p(2)*(c1*x1+c2*x2+c3);
>> expand(expression)
ans =
2*c1^2*x1^2 + 4*c1*c2*x1*x2 + 4*c1*c3*x1 + 5*c1*x1 + 2*c2^2*x2^2 + 4*c2*c3*x2 + 5*c2*x2 + 2*c3^2 + 5*c3
>> F=[5*x1 5*x2 5 4*x1*x2 4*x1 4*x2 2*x1^2 2*x2^2 2]
F =
[ 5*x1, 5*x2, 5, 4*x1*x2, 4*x1, 4*x2, 2*x1^2, 2*x2^2, 2]
>> g=[c1 c2 c3 c1*c2 c1*c3 c2*c3 c1^2 c2^2 c3^2].'
g =
c1
c2
c3
c1*c2
c1*c3
c2*c3
c1^2
c2^2
c3^2
>> expand(F*g)
ans =
2*c1^2*x1^2 + 4*c1*c2*x1*x2 + 4*c1*c3*x1 + 5*c1*x1 + 2*c2^2*x2^2 + 4*c2*c3*x2 + 5*c2*x2 + 2*c3^2 + 5*c3
Я нашел следующее question и, похоже, может быть способ сделать это автоматически, используя conv
и т.д. Если можно придумать автоматизированное решение (или, по крайней мере, некоторые идеи к такой автоматизации) для случай, когда x=(x1,x2) and c=(c1,c2,c3) and n=2
, дело, изображенное выше; Наверное, я могу обобщить его на более крупные случаи.
Примечание: порядок терминов в F или g не имеет значения, учитывая, что они упорядочены в некотором структурированном виде.
Спасибо за хороший ответ. Например, для моих аргументов полномочия в g являются '[100,010,001,110,101,011,200,020,002]'. Есть ли хороший способ генерировать этот вид вектора. Для любых 'm' и' n'. – YBE