获取系数


clc;clear all;close all;
%%   matlab 提取多项式各幂次的系数;使用sym2poly函数 (多项式,一元高阶) 通过A的length 可以确定阶数
%% E1:
syms x
f=3*x^5 + 2*x^2;% F(x)
A=sym2poly(f)% A =3  0 0 2  0  0  -->  f(x)=3*x^5+0*x^4+0*x^3+2*x^2+0*x^1+0*x^0
%% E2
syms x
sym2poly(x^3 - 2*x - 5) 
% ans =1 0 -2 -5 
 
 
%%  matlab  表达式变量系数,方程里未知数的系数. 使用coeffs(y)可以提取符号表达式的系数,但是所得的系数矩阵是按照表达式的逆向顺序排列的(多元一阶)
clc;clear all;close all;
%% E1
syms x1 x2 x3 y1 y2 y3
z=2*x1+4*x2+x3+5*y1+2*y2+6*y3
b=coeffs(z) %所得系数矩阵为逆向顺序 [ 6, 2, 5, 1, 4, 2]
%% E2 Matlab 提取多元齐次多项式系数 P的 x1^2*x2^2的系数
syms x1 x2
p=x1^4 + 2*x1^3*x2 + x1^2*x2^2 + 3*x1*x2^3 - x2^4; % p= 2*x1^3*x2 + 3*x1*x2^3 - x2^4+x1^4+ x1^2*x2^2;
a=sym2poly(subs(p,x2,1)); %[1,2,1,3,-1]  % 自动从低到高阶顺序
b=a(length(a)-2) %x1^2*x2^2的系数b=a(length(a)-2)  
% 当变量和项数增多 sym2poly(subs(subs(p,x1^2*x2^2,sym('h')),[x1 x2 x3 ... xn],[0
% 0]));   ???????????
 
%% E3 
syms x y z n
expr = x*y*z;%如何将y*z作为一个整体,然后求出其的系数x 
% coeffs(expr,y*z);% 结果 Error   ,貌似是不能输入表达式做为第二个参数
subs(expr,y*z,n);% 将 y*z这个表达式替换成一个变量比如n   .ans =n*x 
coeffs(subs(expr,y*z,n),n) % ans =x
% subs(expr,y,n);  以及 subs(expr,x*y*z,n);
% subs(expr,y,n) -->n*x*z ;  coeffs(subs(expr,y,n))-->coeffs(n*x*z)-->1;
% coeffs(subs(expr,y,n),x)-->n*z     
 
% 1.将expr转换为str,然后提取各项,匹配
% 2.具体分析这个问题,取巧 E2 http://zhidao.baidu.com/question/246232648.html
% 3.利用表达式除法
%% E4 连用两个coeff  提取expr = x^5*y+x*5 的系数
syms x y
expr = x^5*y+x*5; 
% coeffs(expr) % [ 5, 1]
% 先用一次[c,t]=coeffs(expr,x)
[c,t]=coeffs(expr,x)% 时可以得到的c是有两个个元素 c =[ y, 5]   t =[ x^5, x]
% 还需要判断哪一个是x^5*y那一项,赋给expr
% coeffs(expr,y

获取多项式的每一项的常数的方法:
syms x y z m n
f=2x^2y+3zm+8ny
[a,b]=coeffs(f);
得a=[2, 3, 8] b=[x^2y, zm, n*y]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值