【发布时间】:2013-11-23 00:49:48
【问题描述】:
我想自动计算存在变量 (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
我找到了以下question,看起来可能有一种方法可以使用conv 等自动完成。如果有人能想出一个自动化解决方案(或至少对这种自动化有一些想法) x=(x1,x2) and c=(c1,c2,c3) and n=2的情况,上面描述的情况;我想我可以将其推广到更高维的情况。
注意:F 或 g 中术语的顺序无关紧要,因为它们是以某种结构化方式排序的。
【问题讨论】:
标签: matlab polynomial-math symbolic-math binomial-coefficients