8.MATLAB数据分析
概述:
1 clc; 2 clear all; 3 p1=[4 3 2 1]; 4 y=poly2sym(p1) %由向量创建多项式 5 disp(y) %显示多项式
1 多项式的求值与求根
1 clc; 2 clear all; 3 p=[1 -1 -6]; %多项式的系数向量 4 x=2:5; 5 y=polyval(p,x) %多项式在x处的值
1 clc; 2 clear all; 3 x=[1 2 ;3 4]; 4 p=[2 3 4]; 5 y1=polyvalm(p,x) %采用polyvalm( )函数,以矩阵为计算单位 6 7 x=[1 2 ;3 4]; 8 p=[2 3 4]; 9 y2=polyval(p,x) %采用polyval( )函数,以矩阵的元素为计算单位
1 clc; 2 clear all; 3 p=[1 0 0 -1 -6]; 4 x1=roots(p) %对多项式p求根 5 6 x2=[4 5]; 7 y=poly(x2); %求以x2为根的多项式 8 y=poly2sym(y)
2 多项式乘法和除法
1 clc; 2 clear all; 3 p1=[4 2 0 5]; %缺少的幂次用0补齐 4 p2=[5 8 1]; 5 6 %转成表达式 7 y1=poly2sym(p1) 8 y2=poly2sym(p2) 9 10 p3=conv(p1,p2); %多项式相乘 11 y=poly2sym(p3) 12 13 %定义一个变量 14 syms x 15 p1=sym2poly(4*x^3+2*x^2+5) 16 p2=sym2poly(5*x^2+8*x+1) 17 p3=conv(p1,p2); %多项式相乘 18 y=poly2sym(p3)
3 多项式的导数和积分
1 clc; 2 clear all; 3 p1=[4 3 2]; 4 p2=[2 2 1]; 5 y1=polyder(p1);%对多项式p1求导 6 y1=poly2sym(y1) 7 8 y2=polyder(p1,p2); %对多项式p1和p2的乘积求导 9 y2=poly2sym(y2) 10 11 [q,d]=polyder(p1,p2);%对多项式p1除以p2的商求导 12 q=poly2sym(q) 13 d=poly2sym(d)
1 clc; 2 clear all; 3 p1=[3 2 2]; 4 y1=polyint(p1,3); %对多项式p1进行积分,常数项为3 5 y1=poly2sym(y1) 6 y2=polyint(p1); %对多项式p1进行积分,常数项为0 7 y2=poly2sym(y2)
4 多项式展开
1 clc; 2 clear all; 3 b=[1 -1 -7 -1];%分子多项式 4 a=poly([1;5;6]);%分母多项式 5 [r,p,k]=residue(b,a) %进行多项式b/a展开 6 [b1,a1]=residue(r,p,k);%通过余数、极点和常数项来求多项式b1/a1 7 b1=poly2sym(b1) 8 a1=poly2sym(a1) 9 10 b=[1 -1 -7 -1];%多项式a有三重根 11 a=poly([1;1;1]);%分母多项式 12 [r,p,k]=residue(b,a) %进行多项式b/a展开
5 多项式拟合
1 clc; 2 clear all; 3 x=[0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8]; 4 y=[1 2 3 5 6 7 6 5 4 1]; 5 p5=polyfit(x,y,5);%5阶多项式拟合 6 %在x处求值 7 y5=polyval(p5,x); 8 p5=vpa(poly2sym(p5),5)%显示5阶多项式 9 10 p9=polyfit(x,y,9);%9阶多项式拟合 11 %求值 12 y9=polyval(p9,x); 13 14 figure;%画图显示 15 plot(x,y,'bo'); 16 hold on; 17 plot(x,y5,'r:'); 18 plot(x,y9,'g--'); 19 legend('原始数据','5阶多项式拟合','9阶多项式拟合'); 20 xlabel('x'); 21 ylabel('y');
6 曲线拟合图形用户接口
7 一维插值
1 clc; 2 clear all; 3 x=0:0.2:2; 4 y=(x.^2-3*x+5).*exp(-3*x).*sin(x); 5 xi=0:0.03:2; %要插值的数据 6 yi_nearest=interp1(x,y,xi,'nearest'); %临近点插值 7 yi_linear=interp1(x,y,xi); %默认为线性插值 8 yi_spine=interp1(x,y,xi,'spine'); %三次样条插值 9 yi_pchip=interp1(x,y,xi,'pchip'); %分段三次Hermite插值 10 yi_v5cubic=interp1(x,y,xi,'v5cubic'); %MATLAB5中三次多项式插值 11 figure; %画图显示 12 hold on; 13 subplot(231); 14 plot(x,y,'ro'); 15 title('已知数据点'); 16 subplot(232); 17 plot(x,y,'ro',xi,yi_nearest,'b-'); 18 title('临近点插值'); 19 subplot(233); 20 plot(x,y,'ro',xi,yi_linear,'b-'); 21 title('线性插值'); 22 subplot(234); 23 plot(x,y,'ro',xi,yi_spine,'b-'); 24 title('三次样条插值'); 25 subplot(235); 26 plot(x,y,'ro',xi,yi_pchip,'b-'); 27 title('分段三次Hermite插值'); 28 subplot(236); 29 plot(x,y,'ro',xi,yi_v5cubic,'b-'); 30 title('MATLAB5中三次多项式插值');
1 clc; 2 clear all; 3 x=0:1.1:8; 4 y=sin(x); 5 n=2*length(x); %增采样1倍 6 yi=interpft(y,n);%采用一维快速傅立叶插值 7 xi=0:0.55:8.3;%要插值的数据 8 figure;%画图显示 9 hold on; 10 plot(x,y,'ro',xi,yi,'b-'); 11 legend('原始数据','插值后结果');
8 二维插值
1 clc; 2 clear all; 3 [x,y]=meshgrid(-4:0.8:4); %原始数据 4 z=peaks(x,y); 5 [xi,yi]=meshgrid(-4:0.2:4); %插值数据 6 zi_nearest=interp2(x,y,z,xi,yi,'nearest'); %临近点插值 7 zi_linear=interp2(x,y,z,xi,yi); %系统默认为线性插值 8 zi_spline=interp2(x,y,z,xi,yi,'spline'); %三次样条插值 9 zi_cubic=interp2(x,y,z,xi,yi,'cubic'); %三次多项式插值 10 figure; %数据显示 11 hold on; 12 subplot(321); 13 surf(x,y,z); 14 title('原始数据'); 15 subplot(322); 16 surf(xi,yi,zi_nearest); 17 title('临近点插值'); 18 subplot(323); 19 surf(xi,yi,zi_linear); 20 title('线性插值'); 21 subplot(324); 22 surf(xi,yi,zi_spline); 23 title('三次样条插值'); 24 subplot(325); 25 surf(xi,yi,zi_cubic); 26 title('三次多项式插值');
9 样条插值
1 clc; 2 clear all; 3 x=0:10;%原始数据 4 y=sin(x); 5 xi=0:.25:10;%插值数据 6 yi=spline(x,y,xi);%三次样条插值 7 pp=spline(x,y);%产生插值函数 8 y1=ppval(pp,xi); %结果相同y1=yi 9 y2=interp1(x,y,xi,'spline'); %结果相同y2=yi 10 figure;%画图显示 11 plot(x,y,'o',xi,yi); 12 legend('原始数据','三次样条插值');
10 高维插值
1 clc; 2 clear all; 3 [x,y,z,v]=flow(10); 4 [xi,yi,zi]=meshgrid(.1:.25:10,-3:.25:3,-3:.25:3); 5 vi = interp3(x,y,z,v,xi,yi,zi); % vi为25*40*25 6 slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2]); 7 shading flat
11 函数的极限
1 clc; 2 clear all; 3 syms x; 4 f=(3*x^2-1)/(3*x^2-2*x+3); 5 y=limit(f,x,1)
1 clc; 2 clear all; 3 syms x; 4 f=x/(x-1)-2/(x^2-1); 5 y=limit(f,x,1)
1 clc; 2 clear all; 3 syms x; 4 f=((x^x)^x); 5 y=limit(f,x,0,'right')