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;           % 三次样条插值数值积分
相关推荐
小乔的编程内容分享站1 小时前
C语言笔记一维&二维数组
c语言·笔记
非凡ghost2 小时前
Ookla Speedtest安卓版(网速测试工具)
android·windows·学习·智能手机·软件需求
近津薪荼2 小时前
dfs专题7—— 全排列
c++·学习·算法·深度优先
火红色祥云3 小时前
深度学习入门:基于Python的理论与实现笔记
笔记·python·深度学习
Aliex_git3 小时前
gzip 压缩实践笔记
前端·网络·笔记·学习
菡萏如佳人3 小时前
AI时代学习新范式—认知供应链模式(附OpenClaw四步拆解)
人工智能·学习
liuchangng3 小时前
BMAD-METHOD实战笔记_20260213112550
笔记
2501_901147833 小时前
打家劫舍问题的动态规划解法与性能优化笔记
笔记·算法·动态规划
像豆芽一样优秀4 小时前
Easy-Vibe Task02学习笔记
笔记·学习