[matlab]获取多项式的系数,表达式的系数

 

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)

 

你可能感兴趣的:(数学建模,matlab,机器学习)