如何创建接受向量的多项式?

时间:2017-04-15 17:53:50

标签: matlab vector

我在Matlab中创建任意长度的多项式函数时遇到问题,当与向量一起用作参数时,它会起作用。

我必须做一个算法,包括并返回一个多项式的值。 贝娄是我的代码:

n = 4 % For simplicity, could be arbitrary positive integer
f = @(x) x.^[0:n] %Coefficients are 1 (for this example), if not, would be multiplied with vector of them
p = @(x) sum(f(x))  %My polynomial

>> p(5)
ans =
781

这就像计划一样。但是因为我需要一个情节,我需要我的多项式能够接收值的向量并返回它们。但是当我这样做时,会弹出一个错误。 例如:

>>p([1 2 3 4])
Error using  .^ 
Matrix dimensions must agree.

Error in @(x)x.^[0:n]

Error in @(x)sum(f(x))

我希望它返回的是一个长度为4的向量,其值为我的多项式[p(1) p(2) p(3) p(4)] 我通过使用for循环创建一个值向量来解决这个问题,但我只是想知道,是否可以更改我的代码,这样可以工作?

1 个答案:

答案 0 :(得分:2)

使用行和列向量可以很容易地修复问题,而不是使用两个行向量:

p([1 2 3 4]')

并明确定义要求求和的维度:

p = @(x) sum(f(x), 2)

<强>解释

请注意.^是一个元素明智的操作。 p([1 2 3 4 5])有效,因为两个行向量都具有相同的大小,但不会返回所需的结果,即它会计算1^0 + 2^1 + 3^2 + 4^3 + 5^4 = 701

Matlab自动扩展( in伪matlab代码

[1  .^ [0 1 2 3 4]
 2
 3
 4]

[1 1 1 1   .^ [0 1 2 3 4
 2 2 2 2       0 1 2 3 4
 3 3 3 3       0 1 2 3 4
 4 4 4 4]      0 1 2 3 4]

向后兼容性(2006-2016a)

应更改f的定义,因为matlab尚不支持automatic arithmetic expansion

f = @(x) bsxfun(@power, x, 0:n);

向后兼容性(1996-2005)

bsxfun尚不存在,因此应该诉诸repmat