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

标签 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 循环创建一个值向量来解决这个问题,但我只是想知道,是否可以更改我的代码,这样它就可以工作?

最佳答案

使用行向量和列向量(而不是两个行向量)可以轻松解决该问题:

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/

相关文章:

matlab - 从 OpenCV 代码到 FPGA 代码的转换是否比 Matlab 代码更容易?

matlab - 如何获得垂直于一组向量的向量(使用Matlab)?

c++ - 如何正确销毁 vector 的c++ vector 并释放内存

c++11 - 用较小的 std::vector 替换 std::vector 的一部分

c++如何通过复制将结构 vector 复制到另一个结构 vector 中

algorithm - 使用 MATLAB 将 2D 图像转换为 3D

matlab - 如何精确控制 MATLAB 绘图中的线条粗细?

image - 如何在 MATLAB 中创建复古图像?

c++ - 在 opengl c++ 中计算顶点法线(gouraud 着色)

c++ - C++ 中的 char 星 vector