我在 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 循环创建一个值向量来解决这个问题,但我只是想知道,是否可以更改我的代码,这样它就可以工作?
最佳答案
使用行向量和列向量(而不是两个行向量)可以轻松解决该问题:
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
。
关于matlab - 如何创建接受向量的多项式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43429381/