1

我在使用 MATLAB 代码时遇到了一些问题。这是一个计算多项式值的函数,x它是要评估的值,是a多项式系数的向量。

function P=nesting(a,x)
P=a(end);
for n=numel(a)-1:-1:1
    P=a(n)+P.*x;
end
return

我如何修改for循环,例如x将 m 向量作为输入,x=(x1,x2,..,xm)并且该函数应该计算每个P(xi)fori=1并将m所有内容作为 m 向量输出?非常感谢任何反馈,谢谢!

4

3 回答 3

1

这可能是一个扩展评论,而不是对您直接问题的回答,但无论如何。

给定一个幂向量,例如

powers = 0:3

和一个系数向量,例如

coeffs = [1 0 1 2]

您可以计算如此定义的多项式 ( x^0+x^2+2x^3) 的值,例如,x==4通过计算

dot(4.^powers, coeffs)

并为自己节省那些令人困惑的循环。

于 2013-02-12T11:14:12.077 回答
1

为什么不使用polyval

如果您想要自己的实现而不是:

function p = nesting( coeff, x )

ex = (numel(coeff)-1) : -1 : 0;
v = bsxfun( @power, x(:), ex ); % vanermonde matrix
p = v * coeff(:)'; % dot product of coeff with respecting x^k
于 2013-02-12T11:48:19.707 回答
0

您可以将其重写为Vandermonde 矩阵作为系统方法。

也许repmatandcumprod功能会帮助你。

于 2013-02-12T11:41:20.493 回答