DAY9 MATLAB学习笔记—MATLAB多项式

多项式的建立:
clc
claer all;
p1=[7 5 3 87];%多项式的系数,最高次幂就是x3,系数7
y=polyasym(p1)%由向量创建多项式
disp(y)%显示多项式
利用多项式的根建立多项式:
clc
clear all;
r=[4 6 8];%三个根
p=poly®;%通过poly求取多项式
y=poly2sym§%显示多项式
多项式的求值:
clc;
clear all;
p=[2 -3 -4];%多项式的系数向量
x=1:6;
y=polyval(p,x)%多项式在x处的值,以数组或矩阵中的元素为计算单位
多项式求值的另一种函数,导致结果不一样:
clc;
clear all;
x=[1 2 ;5 6];
p=[1 2 3];%多项式的系数向量
y1=polyvalm(p,x)%采用此函数时,以矩阵为计算单位
x=[1 2 ; 5 6];
p=[1 2 3];
多项式的求根和根据根求多项式:
clc;
clear all;
p=[1 0 0 -5 -2]; %多项式系数
x1=roots§ %对多项式p求根
x2=[2 4]; %已知根
y=poly(x2); %求以x2为根的多项式系数
y=poly2sym(y) %显示多项式
多项式的相乘和相除:
多项式相乘:

clc;
clear all;
p1=[6 3 0 7]; %缺少的幂次用0补齐 多项式系数
p2=[1 2 3];
y1=poly2sym(p1)%显示多项式
y2=poly2sym(p2)
p3=conv(p1,p2); %多项式相乘 如果是两个向量相当于卷积
y=poly2sym(p3) %显示
syms x %另一种方法
p1=sym2poly(3x3+3*x2+8)
p2=sym2poly(6
x^2+3*x+4)
p3=conv(p1,p2); %多项式相乘
y=poly2sym(p3)

clc;
clear all;
p1=[4 3 8 1 4];
p2=[2 3 1];
[q,r]=deconv(p1,p2); %多项式p1除以p2
y1=poly2sym(q) %商
y2=poly2sym® %余数
多项式的求导:
clc;
clear all;
p1=[3 2 6];
p2=[3 3 2];
y1=polyder(p1);%对多项式p1求导
y1=poly2sym(y1)
y2=polyder(p1,p2); %对多项式p1和p2的乘积求导
y2=poly2sym(y2)
[q,d]=polyder(p1,p2);%对多项式p1除以p2的商求导
q=poly2sym(q) %分子
d=poly2sym(d) %分母
多项式的积分:
clc;
clear all;
p1=[2 6 8];
y1=polyint(p1,7); %对多项式p1进行积分,常数项为7
y1=poly2sym(y1)
y2=polyint(p1); %对多项式p1进行积分,默认常数项为0
y2=poly2sym(y2)
多项式的拟合:
clc;
clear all;
x=[0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8];
y=[1 2 3 5 6 7 6 5 4 1];
p5=polyfit(x,y,5);%5阶多项式拟合
y5=polyval(p5,x);
p5=vpa(poly2sym(p5),5)%显示5阶多项式
p9=polyfit(x,y,9);%9阶多项式拟合
y9=polyval(p9,x);
figure;%画图显示
plot(x,y,‘bo’);
hold on;
plot(x,y5,‘r:’);
plot(x,y9,‘g–’);
legend(‘原始数据’,‘5阶多项式拟合’,‘9阶多项式拟合’);
xlabel(‘x’);
ylabel(‘y’);
曲线拟合:
x0 = -pi:0.1:pi;
y0 = sin(x0);
% 4次多项式拟合
p0 = polyfit(x0, y0, 4);
y1 = polyval(p0, x0);
plot(x0, y0, x0, y1, ‘r’);
多项式拟合效果:
阶次越高,并不一定拟合效果越好
x1 = -1:0.2:1;
y1 = 1./(1 + 25*x1.^2);
分别使用3次、5次、8次多项式拟合
p3 = polyfit(x1, y1, 3);
p5 = polyfit(x1, y1, 5);
p8 = polyfit(x1, y1, 8);

x = -1:0.01:1;
y = 1./(1 + 25*x.^2);
y3 = polyval(p3, x);
y5 = polyval(p5, x);
y8 = polyval(p8, x);
figure
plot(x, y, x, y3, ‘r-’, x, y5, ‘m:’, x, y8, ‘b–’);
legend(‘原始’, ‘3次’, ‘5次’, ‘8次’);

使用非多项式拟合方法:
首先建立拟合选项结构体
options = fitoptions(‘Method’, ‘NonlinearLeastSquare’);
options.Lower = [-Inf, -Inf, -Inf];
options.Upper = [Inf, Inf, Inf];
通过fittype建立非线性拟合模型
type = fittype(‘a/(b + c*x^n)’, ‘problem’, ‘n’, ‘options’, options);
拟合
[cfun gof] = fit(x1’, y1’, type, ‘problem’, 2);
拟合效果
ynp = feval(cfun, x);
figure
hl = plot(x, y, ‘k’);
set(hl, ‘LineWidth’, 5);
hold on
plot(x, ynp, ‘r’);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值