MATLAB学习笔记——第三章

MATLAB学习笔记------第三章

多项式

多项式的表示与运算

多项式的表示:向量形式来表示系数

matlab 复制代码
% 多项式乘法 conv函数
u = [1 0 1];         	% 多项式系数向量
v = [2 7];
w = conv(u,v);

% 多项式除法 deconv函数
[q,r] = deconv(u,v);    % q:商,r:余数

% 多项式求根(方程的解)roots
p = [3 -2 -4];
r = roots(p);

% 根据方程的根得到指定多项式 poly
p = poly(r);

% 将系数向量表示为多项式的手写形式 poly2sym
p1 = poly2sym(p);

% 计算P(x)在x点处的数值   polyval
p = [3 2 1];
x = [5 7 9];
y = polyval(p,x);

% 多项式微分求导   polyder
p = [3 0 -2 0 1 5];
q = polyder(p);

% 多项式积分  polyint
p = [3 0 -4 10 -25];
q = polyint(p);             % 多项式积分    
a = -1; b = 3;              % 定积分的上下限
I = diff(polyval(q,[a b])); % 代入求解

% 多项式曲线拟合   polyfit
x = linspace(0,4*pi,10);
y = sin(x);
p = polyfit(x,y,7);         % 将7次多项式与点拟合
x1 = linspace(0,4*pi);
y1 = polyval(p,x1);
figure
plot(x,y,'o')
hold on
plot(x1,y1)
hold off

多项式的四则运算

matlab 复制代码
% 四则运算
f = [3,-5,2,-7,5,6];
g = [0,0,0,3,5,-3];
poly2sym(f+g);
poly2sym(f-g);
poly2sym(conv(f,g));
poly2sym(deconv(f,[3,5,-3]));
matlab 复制代码
% 求根
f = [3,0,4,-5,-7.2,5];
r = roots(f);               % 求根
g = poly(r);                % 根据根求系数
gx = poly2sym(g);           % 手写体
v = [5,7.8,9.6,12.3];       % 要求的点
polyval(f,v);               % 求多项式在点处的值
matlab 复制代码
% 求导
% 方法一:求导公式
f1 = [3,5,0,-8,1,-5];
f2 = [10,5,0,0,6,0,0,7,-1,0,-100];
f10 = polyder(f1);
f20 = polyder(f2);
f11 = conv(f10,f2);
f12 = conv(f20,f1);
f111 = f11-f12;
f22 = conv(f2,f2);
simplify(poly2sym(f111)/poly2sym(f22))

% 方法二:利用polyder函数
P = [3,5,0,-8,1,-5];
Q = [10,5,0,0,6,0,0,7,-1,0,-100];
[p,q] = polyder(P,Q);
divp = simplify(poly2sym(p)/poly2sym(q))
pretty(divp)

数据拟合

例子

matlab 复制代码
x = 0:0.2:10;
y = 0.25*x+20*sin(x);
plot(x,y,'k.','MarkerSize',15)      % 用点表示原始数据
grid on;    hold on;
[p3,s3,mu3] = polyfit(x,y,3);       % 三阶多项式拟合
y3 = polyval(p3,x,s3,mu3);
[p5,s5,mu5] = polyfit(x,y,5);       % 五阶多项式拟合
y5 = polyval(p5,x,s5,mu5);
[p8,s8,mu8] = polyfit(x,y,8);       % 八阶多项式拟合
y8 = polyval(p8,x,s8,mu8);
plot(x,y3,'c-',x,y5,'r-',x,y8,'b-')
xlabel('X'),ylabel('Y');
hold off
legend('原始数据','3阶拟合','5阶拟合','8阶拟合','Location','best')

多项式平均与置信区间估计

matlab 复制代码
x = 0:0.2:10;
y = 0.25*x + 20*sin(x);
[P,S,MU] = polyfit(x,y,6);
[Y,DELTA] = polyconf(P,x,S,0.05,MU);    % 预测值与置信区间
% fill 函数:在二维区间内填充颜色,三个参数,第一个是横轴x,第二个是纵轴y,第三个是颜色
fill([x,fliplr(x)],[Y-DELTA,fliplr(Y+DELTA)],[0.9706 0.9216 0.9804])
hold on
plot(x,y,'k.','MarkerSize',10);
plot(x,Y,'r-','LineWidth',2);
plot(x,Y-DELTA,'c--');
plot(x,Y+DELTA,'c--');
grid on

数据插值

matlab 复制代码
% 最近邻点插值nearest:查询点处的插入值是距样本点最近的值,是一段一段的,不连续
% 线性插值linear:查询点处的插入值基于各维中邻近网格点处数值的线性插值。这是默认插值方法
% 三次样本插值spline:查询点处的插入值基于各维中邻近网格点处数值的三次插值,连续
% 多数情况下使用spline三次插值,因为比较光滑

x = 0:4*pi;
y = sin(x);         % 已知数据点                           
xi = 0:0.1:4*pi;    % 带插入点
methods = {'nearest','linear','spline','cubic'};    % 插值方法
strtitle = {'method = nearest','method = linear','method = spline','method = cubic'};   % 子图标题
for i = 1:4
    yi = interp1(x,y,xi,methods{i});                % 一阶插值
    subplot(2,2,i);                                 % 绘制子图
    plot(x,y,'ro','MarkerFaceColor','r')            % 已知数据点离散绘图
    hold on;    grid on
    plot(xi,yi,'b--','LineWidth',1.5)               % 插值点曲线绘图
    title(strtitle{i});                             % 子图标题
    hold off
end
matlab 复制代码
figure
t = 0:2:24;
et = [12,9,9,10,18,24,28,27,25,20,18,15,13];
ti = 13;
eti = interp1(t,et,ti,'spline')
hold on;grid on
plot(t,et,'r.','MarkerSize',20)
plot(ti,eti,'b.','MarkerSize',20)
legend('已知数据点','13时的数据点','Location','best')
legend('boxoff')
hold off
matlab 复制代码
figure
x = linspace(0,8.534,13);
y = [0,0.914,5.060,7.772,8.717,9.083,9.144,9.083,8.992,8.687,7.376,2.073,0];
x0 = 0:0.0001:8.534;    		% 插值点
y1 = interp1(x,y,x0,"linear");  % 线性插值
y2 = interp1(x,y,x0,'spline');  % 三次样条插值
plot(x,y,'b.','MarkerSize',15);
hold on;grid on
plot(x0,y1,'r--',x0,y2,'g-','LineWidth',1.5);
hold off
legend('已知点','线性','三次样条','Location','b')
S1 = trapz(y1)*0.001;           % 线性插值数值积分(梯形积分)
S2 = trapz(y2)*0.001;           % 三次样条插值数值积分
相关推荐
爱喝水的鱼丶10 分钟前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇)第三篇:SAP ALV 报表样式定制:字段布局与交互功能配置
服务器·开发语言·学习·交互·sap·abap
chao18984410 分钟前
基于SIFT和SURF特征的图像配准(MATLAB)
开发语言·matlab
很楠爱上15 分钟前
Node.js 模块化学习笔记
笔记·学习·node.js
mnasd24 分钟前
RockyLinux 9.5 部署 Kubernetes1.35 集群
笔记
毕竟是shy哥25 分钟前
CLIP:从自然语言监督中学习可迁移的视觉模型
学习
foundbug99928 分钟前
最优化问题的外点罚函数法与内点罚函数法-MATLAB实现
开发语言·matlab
川石课堂软件测试29 分钟前
作为一名测试工程师如何学习Kubernetes(k8s)技能
学习·测试工具·容器·职场和发展·kubernetes·测试用例·harmonyos
tryqaaa_38 分钟前
学习日志(五)【php反序列化全加例题】【pop链,字符逃逸,session,伪协议】
android·学习·php·web·pop·session
jghhh0139 分钟前
MATLAB蒙特卡罗方法求解伊辛模型
数据库·人工智能·matlab
li星野44 分钟前
FastAPI 参数详解:路径参数、查询参数与请求体 —— 从入门到实战
服务器·学习·fastapi