2017-04-15 63 views
2

我在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循环值向量,但我只是想知道,是值的载体可以改变我的代码,所以这将工作?

回答

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的自动展开(在伪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

+0

我尝试了你的建议,并得到了和以前一样的错误。 – Ravonrip

+0

你正在使用哪个matlab版本? – m7913d

+0

我使用Matlab版本R2015b – Ravonrip

相关问题