多项式运算及插值
这个我的一份读书笔记,希望对刚入门的朋友有所帮助。参考资料matlab7.0从入门到精通 求是科技 编著-------------------------------------------------程序略有改动------------------------------------------------------------------------
一 多项式函数及其运算
在matlab7.0中多项式是用向量来表示的:按降幂,缺项补零。
(1)多项式求值
>> P=;
>> polyval(P,)
ans =
6 11
18 27
(2)多项式乘法与除法
多项式的乘法用卷积conv来实现,除法用deconv来实现
>> P1=(1:3);
>> P2=(2:4);
>> P=conv(P1,P2)
ans =
2 7 16 17 12
意义:(x^2+2*x+3)*(2*x^2+3*x+4)=2*x^4+7*x^3+16*x^2+17*x+12
注意:在使用deconv的时候,有时候得到的是近似解。可以通过简单的向量验证
(3)导数与微分
k=polyder(P);返回多项式P的倒数
k=polyder(a,b);返回多项式a与b乘积的倒数
=polyder(b,a);返回多项式b除以a的商的倒数,并以q/d格式表示
(原书此处有错,写成a除以b的商的倒数)
polyint(P,K);返回多项式P的积分,设积分常数项为K
polyint(P);返回多项式P的积分,设常数项为零
(4)多项式的求根和由根创建多相式
r=roots(c);返回多项式c的所有根r,r是向量长度等于根的个数的向量
p=poly(r);r是多项式的所有根,则返回的是多项式的行向量形式
P=ploy(A);A是N阶方阵,则返回N+1阶行向量形式,它是矩阵A的特征多项式
(5)部分分式展开
=residue(b,a);求b/a的部分分式展开
=residue(r,p,k);从部分分式到多项式向量
(6)多项式曲线拟合
p=polyfit(x,y,n);采用n阶多项式P来拟合数据x和y
(7)曲线拟合的图像用户接口
----Figure窗口的Tool\Basic Fitting菜单中--------
x=0:0.2:10;
y=0.25*x+20*sin(x);
plot(x,y,'ro');
------更多功能请使用cftool-----------------------
二 插值
(1)一维多项式插值
yi=interp1(x,y,xi,method);x必须是向量,y可是是向量也可以是矩阵。如果y是向量,
则必须与x具有相同的长度,这时xi可以是标量、向量和任意维矩阵,yi与xi具有
相同的大小;如果y是矩阵,则其大小必须是(n是向量x的长度)
函数对d1*d2*d3...*dk组y值都进行插值。
yi=interp1(y,xi);默认x为1:n,其中n是向量y的长度。
yi=interp1(x,y,xi,method);输入变量method用于指定插值方法
yi=interp1(x,y,xi,method,'extrap');对超出插值范围的数据指定外推方法'extrap'
yi=interp1(x,y,xi,method,extrapval);对超出差值范围的数值返回extrapval的值
一般为0或者NaN(Not a Number)
PP=interp1(x,y,method,'pp');返回值pp为数据y的分段多项式形式。method指定产生
多项式的方法。
y=interpft(x,n);“一维快速傅立叶插值”
y=interpft(x,n,dim);在dim指定的维度上进行操作
interp1_exm.m
%用不同方法对一维数据进行插值,并比较其不同。
clear;
a=5;
x=0:1.2:10;
y=sin(x);
xi=0:0.1:10;
yi_nearest=interp1(x,y,xi,'nearest');
yi_linear=interp1(x,y,xi);%默认线性插值
yi_spline=interp1(x,y,xi,'spline');
yi_cubic=interp1(x,y,xi,'cubic');
yi_v5cubic=interp1(x,y,xi,'v5cubic');
yi_pchip=interp1(x,y,xi,'pchip');
hold on
subplot(231),plot(x,y,'ro',xi,yi_nearest),title('最临近插值')
subplot(232),plot(x,y,'ro',xi,yi_linear),title('线性插值')
subplot(233),plot(x,y,'ro',xi,yi_spline),title('三次样条插值')
subplot(234),plot(x,y,'ro',xi,yi_cubic),title('三次多项式插值')
subplot(235),plot(x,y,'ro',xi,yi_v5cubic),title('三次多项式插值matlab5')
subplot(236),plot(x,y,'ro',xi,yi_pchip),title('三次厄米多项式插值')
yi=interpft(y,a*length(y));
xii=0:1.2/a:10+1.2/a-eps;
figure(2)
plot(x,y,'ro',xii,yi),title('一维快速傅立叶插值')
-------------------------------------------------------------------------------------------------------------------------------------
[ 本帖最后由 花如月 于 2007-8-4 16:40 编辑 ] (2)二维插值
zi=interp2(x,y,z,xi,yi);原始数据x,y,z决定插值函数z=f(x,y),返回zi是(xi,yi)
在函数f(x,y)上的值
zi=interp2(z,xi,yi);若z=m×n,则x=1:n,y=1:m;
zi=interp2(z,ntimes);在2点之间递归插值ntimes次;
zi=interp2(x,y,z,xi,yi,method);指定方法插值
zi=interp2(...,method,extrapval);当数据超过原始数据范围时,用extrapval指定一种外推方法;
interp2_exm.m
%采用二维插值对三维高斯型分布函数进行插值
clear;
=meshgrid(-3:0.8:3);
=meshgrid(-3:0.25:3);
z=peaks(x,y);
zi_nearest=interp2(x,y,z,xi,yi,'nearest');
zi_linear=interp2(x,y,z,xi,yi);%默认线性插值
zi_spline=interp2(x,y,z,xi,yi,'spline');
zi_cubic=interp2(x,y,z,xi,yi,'cubic');
hold on
subplot(231),surf(x,y,z);title('原始数据')
subplot(232);surf(xi,yi,zi_nearest);title('最临近插值')
subplot(233);surf(xi,yi,zi_linear);title('线性插值')
subplot(234);mesh(xi,yi,zi_spline);title('三次样条插值')
subplot(235);mesh(xi,yi,zi_cubic);title('三次多项式插值')
%很奇怪,绘出的图title加不上去,不知何故?
三 数据分析与傅立叶变换
(1)基本的数据分析函数
max,min,mean,median,std,var,sort,sortrows,sum,prod(求元素的连续乘),hist/histc
trapz(等间距梯形数值积分),cumsum(矩阵的累加),cumprod,cumtrapz,cov,corrcoef
diff,gradient
grarident_exm.m
%计算二维高斯函数的梯度场
v=-2:0.25:2;
=meshgrid(v,v);
z=exp(-(x.^2+y.^2+0.5*x.*y));
=gradient(z,0.25);
contour(v,v,z,4);%画出4条等高线
hold on;
quiver(v,v,px,py);
(2)信号的滤波和卷积
filter,filter2,conv,conv2,deconv,detrend 非常感谢,真的学习到了!
页:
[1]