有功能根的麻烦

时间:2014-06-04 14:38:48

标签: matlab matrix-multiplication

嘿伙计我使用函数'roots'有多个问题。

我必须找到'^ 1000 + 1'的零。 我做了Y =零(1,1000)然后手动将第1000个矩阵改为'1'。但是'root'功能不起作用!


另一个问题是我遇到矩阵乘法问题。问题是找到(s ^ 6 + 6 * s ^ 5 + 15 * s ^ 4 + 20 * s ^ 3 + 15 * s ^ 2 + 6 * s +1)*(s ^ 6 +)的零(根) 6s ^ 5 + 15 * s ^ 4 + 15 * s ^ 2 + 6 * s +1)所以我做了:

a = [1 6 15 20 15 6 1]
b = [1 6 15 0 15 6 1]
y = a.*b;
roots(y)

但是这给了我

-27.9355 + 0.0000i
  -8.2158 + 0.0000i
   0.1544 + 0.9880i
   0.1544 - 0.9880i
  -0.1217 + 0.0000i
  -0.0358 + 0.0000i

我用wolfram计算原始方程式然后我将矩阵表示为:

p = [1 12 66 200 375 492 524 492 375 200 66 12 1]
roots(p)

这给了我:

-3.1629 + 2.5046i   
-3.1629 - 2.5046i
 0.3572 + 0.9340i
 0.3572 - 0.9340i   
-1.0051 + 0.0000i   
-1.0025 + 0.0044i   
-1.0025 - 0.0044i   
-0.9975 + 0.0044i   
-0.9975 - 0.0044i   
-0.9949 + 0.0000i   
-0.1943 + 0.1539i  
 -0.1943 - 0.1539i

我觉得第二种解决方案是正确的(这就是wolfram alpha给我的) 你会如何通过matlab人回答这两个问题?

4 个答案:

答案 0 :(得分:2)

要乘以多项式,你卷积它们的系数:

>> roots(conv(a,b))

ans =

  -3.1629 + 2.5046i
  -3.1629 - 2.5046i
   0.3572 + 0.9340i
   0.3572 - 0.9340i
  -1.0051          
  -1.0025 + 0.0044i
  -1.0025 - 0.0044i
  -0.9974 + 0.0044i
  -0.9974 - 0.0044i
  -0.9950          
  -0.1943 + 0.1539i
  -0.1943 - 0.1539i

答案 1 :(得分:2)

<强> Q1

使用roots查找 s 1000 + 1的根源有点过分。该代码片段给出了解决方案(更正了第一个版本;可以使用De Moivre的公式推导出来):

n = 1000;
k = 0:n-1
u = (2*k + 1)*pi / n;
s = cos(u) + 1i*sin(u)

此外,这种方法是约。快10万倍。

<强> Q2

将两个多项式相乘以找到其产品的根源有点过分。 :-)两个多项式的并集&#39;根集是产品多项式的根集:

s = [roots(a);roots(b)]

此外,这种方法更准确。

答案 2 :(得分:0)

1)描述s ^ 1000 + 1的向量也应以1结尾。

2)

a = [1 6 15 20 15 6 1]
b = [1 6 15 0 15 6 1]
y = a.*b;

这是DOT产品,多项式的乘法不会在元素方面相乘。

答案 3 :(得分:0)

问题1

你需要在系数向量中包含x ^ 0的系数,所以有1001个条目,第一个和最后一个是1

coeffs=zeros(1001,1);
coeffs([1,1001])=1;
roots(coeffs)

问题2

要乘以多项式的系数,需要使用卷积:

roots(conv(a,b))