声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4680|回复: 8

[编程技巧] 如何提取系数多项式

[复制链接]
发表于 2008-6-17 15:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我想对下面这个多项式的系数进行提取,变成一个行向量,如下:
y=4*x^5+3*x^4-2*x^2-6;
并且按照从低次幂到高次的顺序进行排列!!如何做?
谢谢
回复
分享到:

使用道具 举报

发表于 2008-6-17 16:00 | 显示全部楼层
c = sym2poly(s)
returns a row vector containing the numeric coefficients of a symbolic polynomial. The coefficients are ordered in descending powers of the polynomial's independent variable. In other words, the vector's first entry contains the coefficient of the polynomial's highest term; the second entry, the coefficient of the second highest term; and so on.
结果是按降幂排列的,经过c=c(length(c):-1:1)变成升幂排列。

评分

1

查看全部评分

发表于 2008-6-18 09:23 | 显示全部楼层
提取多项式中指定变量var的系数 wzqcongcong 发表于: 2008-4-15 16:49 来源: Matlab中文学习站
费了好大劲,终于把它搞定了,该函数同样可以处理多变量的多项式,可以提取其中某个特定变量的系数,超好用:

CODE:
function coef=poly_coef(f,var)
%提取多项式f中指定变量var的系数,将结果赋给数组coef
%f可以是含多变量的多项式
%var是多项式中指定的变量,可选,默认是x
%要用到函数poly_degree()来获得f中指定变量var的最高次幂
if nargin==1, var=sym('x'); end
degree=poly_degree(f,var); temp_f=f;
coef(degree+1)=subs(temp_f,var,0);
for n=1:degree
    temp_f=simple((temp_f-coef(degree+2-n))/var);
    coef(degree+1-n)=subs(temp_f,var,0);
end

举几个例子:
>> syms x y; f1=x^4+2*x+1; f2=y^6+5*y^3+3;
>> f3=x^5+2*x^3*y^4+x*y^2+4;
>> poly_coef(f1)
ans =
                                [1, 0, 0, 2, 1]
>> poly_coef(f1,y)
ans =
                                [ 4          ]
                                [x  + 2 x + 1]
>> poly_coef(f2)
ans =
                                [ 6      3    ]
                                [y  + 5 y  + 3]
>> poly_coef(f2,y)
ans =
                             [1, 0, 0, 5, 0, 0, 3]
>> poly_coef(f3)
ans =
                            [         4      2   ]
                            [1, 0, 2 y , 0, y , 4]
>> poly_coef(f3,y)
ans =
                            [   3            5    ]
                            [2 x , 0, x, 0, x  + 4]

[ 本帖最后由 ChaChing 于 2009-4-2 10:50 编辑 ]

评分

1

查看全部评分

发表于 2009-1-3 23:26 | 显示全部楼层
发表于 2009-4-2 09:28 | 显示全部楼层

回复 板凳 hoyuxi411 的帖子

您好,非常感谢您的这个帖子!
我想问一下:poly_degree()是不是还得写个程序呢?这个怎么写呢?
最后得出来的是两个数组阿,能不能把他们写在一起呢,因为得出来的结果还要参加其它的运算阿!
比如要让他的系数等于某些值,然后算出来X或y
我是个初学者,有好多地方不懂,希望您能指教!
发表于 2009-4-2 10:58 | 显示全部楼层

回复 5楼 286654367 的帖子

poly_degree应该是自编的, 搜过并无此函数, 印象中matlab也很少如此命名!
发表于 2009-6-6 08:20 | 显示全部楼层
syms z1 z2;
s = collect(s,z1);
n = double (maple('degree',s,z1));
for i = n :-1 : 0
    p(i+1) = maple('[coeff]',s,z1,(n-i));
end
p 中所存的即为各个系数

syms x y;
s =collect(x^5+2*x^3*y^4+x*y^2+4,x);
n =double (maple('degree',s,x));
for i = n :-1 : 0
    p(i+1) = maple('[coeff]',s,x,(n-i));
end

结果p =

[     1,     0, 2*y^4,     0,   y^2,     4]

[ 本帖最后由 咕噜噜 于 2009-6-6 08:21 编辑 ]

评分

1

查看全部评分

发表于 2010-8-17 20:24 | 显示全部楼层
好贴啊啊啊

貌似上面的程序不能用啊

评分

1

查看全部评分

发表于 2010-8-22 20:25 | 显示全部楼层
本帖最后由 ChaChing 于 2010-8-23 00:12 编辑

首先声明,内容完全来自网络!
  1. function degree=poly_degree(f,var)
  2. %返回多项式f中指定变量var的最高次幂,将结果赋给degree
  3. %f可以是含多变量的多项式
  4. %var是多项式f中指定变量,可选,默认为x
  5. if nargin==1
  6. var=sym('x');
  7. end
  8. temp=f;
  9. n=0;
  10. while 1
  11. if diff(temp,var)==0
  12. break
  13. end
  14. n=n+1;
  15. temp=diff(temp,var);
  16. end
  17. degree=n;
复制代码

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 13:56 , Processed in 0.065291 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表