/ / Полиномно разширяване: Разделяне на полиномични коефициенти и x-те - matlab, polynom-math, символно-математика, binomial-коефициенти

Разширение на полиноми: Разделяне на полиномните коефициенти и x's - matlab, полинома-математически, символно-математически, биномични коефициенти

Искам автоматично да изчисля разширения на полиноми, където има променливи (x1, x2, ...), както и коефициенти (c1, c2, ...). Целта ми е да изчисля p(1)*(c1*x1+c2*x2+...)^n+ ... + p(n)*(c1*x1+c2*x2+...)^n .

Както можете да забележите, полученият израз може да бъде написан като F(x1,x2...)*g(c1,c2,...) [където F е редовна матрица, а g е матрица на колоните], т.е. има някакво мултипликативно разделяне между коефициентите и променливите.

В момента използвам символния набор от инструменти 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

Намерих следното въпрос и изглежда, че може да има начин да го направите автоматично, използвайки conv и т.н. Ако човек може да излезе с автоматизирано решение (или поне някаква идея за подобна автоматизация) за случая, където x=(x1,x2) and c=(c1,c2,c3) and n=2, случаят, изобразен по-горе; Предполагам, че може би ще успея да го обобщя на случаи с по-голям размер.

Забележка: подреждането на термини във F или g няма значение, като се има предвид, че те са подредени по някакъв структуриран начин.

Отговори:

2 за отговор № 1

Коефициентите от различни термини не се припокриват. Първият член, p(1)*(c"*x)^1, има само термини от степен 1 ​​инча xi и ci, и така нататък. Така че става въпрос за изчисляване на коефициентите на един термин в даден момент.

Това също има "прост" израз:

p(k)*(c"*x)^k = sum(i1,..,im>=0 with sum(i_)=k)
M(k;i1,..,im)*x1^i1*...*xm^im * c1^i1*...*cm^im

където сумирането е такова, че сумата от всички i равно на k, и M е мултиномиален коефициент.

За m=3, n=2, i"е в реда на вашия пример: 110,101,011,200,020,002, M (2; 110) = 2, така че първият термин е `p (2) * M (2; 110) * x1 * x2 = 4 * x1 * x2".

Вашите F и g условия са:

F(...) = p(k)*M(k;i1,..,im)*x1^i1*...*xm^im
g(...) = c1^i1*...*cm^im