Matlab仿真技术

乔世坤

目录

  • 1 实验一Matlab基础与入门
    • 1.1 Matlab简介
    • 1.2 变量与数值
    • 1.3 矩阵运算
    • 1.4 数组运算
    • 1.5 常用数学函数
    • 1.6 Matlab帮助系统
    • 1.7 实验内容
    • 1.8 思考题
  • 2 实验二 Matlab程序设计基础
    • 2.1 M文件
    • 2.2 Matlab程序流控制
    • 2.3 实验内容
    • 2.4 思考题
  • 3 实验三Matlab图形绘制
    • 3.1 二维曲线的绘制
    • 3.2 三维曲线的绘制
    • 3.3 实验内容
    • 3.4 思考题
  • 4 MATLAB数值计算与符号运算
    • 4.1 线性代数中的应用
    • 4.2 多项式运算
    • 4.3 数据分析与统计
    • 4.4 功能函数
    • 4.5 常微分方程的数值求值
    • 4.6 符号运算
    • 4.7 Matlab数值计算部分实验题
    • 4.8 Matlab符号运算部分实验题
    • 4.9 Matlab程序设计部分实验题
    • 4.10 思考题
  • 5 Simulink仿真基础
    • 5.1 Simulink概述
    • 5.2 Simulink建模与仿真
    • 5.3 子系统及其封装技术
    • 5.4 SIMULINK模块库简介
    • 5.5 Simulink仿真基础实验题
    • 5.6 Simulink仿真应用实验题
    • 5.7 思考题
  • 6 Matlab在电路分析中的应用
    • 6.1 Matlab在电路中的仿真应用
    • 6.2 数字逻辑电路仿真
    • 6.3 实验内容
    • 6.4 思考题
  • 7 MATLAB在信号与系统中的应用
    • 7.1 连续时间信号及其表示
    • 7.2 线性时不变系统
    • 7.3 线性时不变系统的时域分析
    • 7.4 线性时不变系统的频域分析
    • 7.5 实验内容
    • 7.6 思考题
  • 8 Matlab在数字信号处理中的应用
    • 8.1 信号的表示与信号的基本运算
    • 8.2 实验内容
    • 8.3 思考题
  • 9 MATLAB在通信原理中的应用
    • 9.1 脉冲编码调制仿真
    • 9.2 实验内容
多项式运算
  • 1 文档
  • 2 视频
  • 3 PPT

多项式理论及其计算在很多学科的计算中有着重要的应用,Matlab提供了多项式的多种运算。

4.2.1多项式的基本运算

  1. 多项式表示



>>p=[1 2 0 3 -10];                                    %必须包括零系数项

2. 多项式的基本运算

1)多项式的加减运算是将表示它的向量进行加减运算,注意多项式的维度必须相同。多项式的乘法运算可以调用conv函数进行。多项式运算举例如下

>> a=[1 2 3];

>> b=[1 4 5];

>> d=a+b

d =

     2     6    8

>> w=conv(a,b)

w =

     1     6   16    22    15


2)多项式相除运算应用deconv函数进行。其格式如下

[q,r]=deconv(w,b)

说明:q表示w除以b的商式,r表示余式。接上例:

>> [q,r]=deconv(w,b)                               %整除,余式等于零

q =

    1     2     3

r =

    0     0     0    0     0

>>c=[1 2] ;[q,r]=deconv(w,c)                   

q =

    1     4     8    6

r =

    0     0     0    0     3


3)多项求导函数应用polyder函数实现。结果仍然是多项式。导函数polyder格式如下:

polyder(p)

polyder(u,v) 

[q,d]=polyder(u,v) 

说明:当输入参数为uv,函数输出变量只有一个时,表示计算uv乘积的导数;输出变量为[q,d]时,表示计算u/v的导数,q为分子多项式系数,d为分母多项式系数。

>> w=[1 6 20 50];

>> y1=polyder(w)

ans =

     3    12   20

>> a=[1 2 3]; b=[1 4 5]; y2=polyder(a,b)

ans =

     4    18   32    22


>>a=[1 2 3]; b=[1 4 5];

>> [q,d]=polyder(a,b)

q =

     2     4   -2

d =

     1     8   26    40    25


>> p=[ 1 -8  19  -12];

>> r=roots(p)'

r =

    4.0000    3.0000   1.0000

>> poly(r)                                  %验证结果。

ans =

    1.0000   -8.0000  19.0000  -12.0000

poly函数还有求矩阵特征多项式系数的功能。

3. 多项式求值

多项式求值应用函数polyvalpolyvalm实现。其格式如下

y=polyval(p,x)

y=polyvalm(p,x)

说明:前者计算x数组元素代入多项式p的结果。后者是x以矩阵为单位代入多项式p的结果。


>> p=[1 2 3];

>> polyval(p,[1:3;4:6;7:9])

ans =

     6    11   18

    27    38   51

    66    83   102


>> polyvalm(p,[1:3;4:6;7:9])

ans =

    35    40   48

    74    94  108

   116   142  171

其结果等于x*x+2*x+3的结果。

4.2.2多项式拟合与多项式插值

在大量的数据处理中,数据的函数拟合与插值是一项很重要的工作。Matlab提供了多项式拟合与插值在工程计算与科学研究中都有广泛的应用。

1. 多项式拟合


取得最小值,称为多项式拟合函数,显然多项式拟合的数学原理是求解超定方程组的最小二乘法。残差平方和为Matlab提供了polyfit函数求多项式拟合曲线。

[4-11] 某种铝合金的含铝量为x%,其熔解温度为y,测量数据见表,求其拟合多项式。

                           

 

含铝量%

 
 

36.9

 
 

46.7

 
 

63.7

 
 

77.8

 
 

84.0

 
 

87.5

 
 

熔解温度

 
 

181

 
 

197

 
 

235

 
 

270

 
 

283

 
 

292

 

程序如下:

x=[36.9 46.7 63.7 77.8 84 87.5];

y=[181 197 235 270 283 292];

p1=polyfit(x,y,1);

x1=linspace(35,90,100);

y1=polyval(p1,x1);

plot(x,y,'o',x1,y1,'b');

legend('原始数据', '1阶多项式');


4-2多项式拟合曲线

2.多项式插值

多项式拟合问题是研究如何寻找平滑的曲线能够很好地拟合那些给定的数据点,并不要求拟合曲线都要经过这些数据点,而插值则是在认定所给数据点是完全正确的情况下,利用这些给定的数据点,根据各种插值多项式估算新的数据点。

1)一维多项式插值函数

下面介绍一维多项式插值函数interp1。格式如下

yi=interp1(x,y,xi,'method')

说明:其中xy是已知数据点的坐标,xi表示需要插值数据点组成的向量,yi表示根据插值算法求得的与xi对应的数据值,method指所采用的插值算法,包括最邻近插值法(nearest)、线性插值(linear)、三次样条插值(spline)、分段三次埃尔米特插值(pchip)。表4-1列出了各种插值算法的特点与适用情况。

4-1 interp1的插值算法

                             

 

method

 
 

含义

 
 

特点与适用情况

 
 

linear

 
 

线性插值

 
 

仅用作连接图上的数据点,速度较快,有足够精度,最常用,作为缺省设置

 
 

nearest

 
 

最邻近插值法

 
 

速度最快,占用内存最少,精度最低;实时使用,特大数据量处理,需要保持数据而不增加新函数值的特殊场合

 
 

spline

 
 

三次样条插值

 
 

速度慢,精度最高,最平滑,常作为平滑使用

 
 

pchip

 
 

分段三次埃尔米特插值

 
 

速度慢,精度高,平滑性好,常作为平滑使用,可保持数据形状

 

[4-12]已知十组数据见表所示,求0-9之间插值,并绘图输出。

                                           

 

 
 

0

 
 

1

 
 

2

 
 

3

 
 

4

 
 

5

 
 

6

 
 

7

 
 

8

 
 

9

 
 

 
 

0

 
 

1.8

 
 

2.1

 
 

0.9

 
 

0.2

 
 

-0.5

 
 

-0.2

 
 

-1.7

 
 

-0.9

 
 

-0.3

 

程序如下:

x=0:9;

y=[0,1.8,2.1,0.9,0.2,-0.5,-0.2,-1.7,-0.9,-0.3];

x1=5;

temp=interp1(x,y,x1,'spline');

disp('x=5点的插值');

disp(temp);

x1=0:0.01:9;

y1=interp1(x,y,x1,'nearest');                       %最邻近插值法

y2=interp1(x,y,x1,'linear');                         %线性插值linear

y3=interp1(x,y,x1,'spline');                         %三次样条插值spline

y4=interp1(x,y,x1,'pchip');                         %分段三次埃尔米特插值

plot(x,y,'ok',x1,y1,'-r',x1,y2,'-.b',x1,y3,':c',x1,y4,'--k');

运行程序x=5点的插值结果为-0.5000,准确等于已知数据表中值0-9之间插值绘图结果如图4-3所示。

4-3 多项式插值

[4-13] 已知数据如下表,对所给数据进行插值,并画出它们在区间上的插值函数曲线。

                           

 

 
 

-1

 
 

-0.96

 
 

-0.65

 
 

0.1

 
 

0.4

 
 

1.0

 
 

 
 

-1

 
 

-0.1512

 
 

0.386

 
 

0.4802

 
 

0.8838

 
 

1

 

程序如下:

x=[-1 -0.96 -0.65 0.1 0.4 1];

y=[-1 -0.1512 0.386 0.4802 0.8838 1];

x1=-1:0.01:1;

y1=interp1(x,y,x1,'linear');                   %线性插值

y2=interp1(x,y,x1,'spline');                    %三次样条

y3=interp1(x,y,x1,'pchip');                   %插值

plot(x,y,'ok',x1,y1,':g',x1,y2,'-.b',x1,y3,'r');

legend('原始数据', '线性插值','三次样条','分段三次埃尔米特插值');

4-4 多项式插值

2二维插值函数

二维数据插值基于同一维函数插值一样的基本思想,它是对两个变量的函数进行插值,二维插值主要用于图像处理与数据的可视化。该函数的格式为

zi=interp2(x,y,z,xi,yi,’method’)

说明:其中xyz是已知数据点,xy是独立的,维数相同,z为矩阵,xiyi分别表示需要插值数据点横坐标、纵坐标的组成向量,zi表示根据插值算法求得的与xiyi对应的数据值,method指所采用的插值算法,包括线性插值'linear',最邻近插值法 'nearest',立方插值'cubic',缺少设置为线性插值。

[4-14] 对由函数peaks产生的三维高斯分布进行二维插值

[x,y]=meshgrid(-4:1:4);

z=peaks(x,y);

subplot(2,2,1),surf(x,y,z);

title('原始数据图形');

[x1,y1]=meshgrid(-4:0.1:4);

z1=interp2(x,y,z,x1,y1,'nearest');

subplot(2,2,2),surf(x1,y1,z1);

title('最邻近插值');

z2=interp2(x,y,z,x1,y1,'linear');

subplot(2,2,3),surf(x1,y1,z2) ;

title('线性插值');

z3=interp2(x,y,z,x1,y1,'cubic');

subplot(2,2,4),surf(x1,y1,z3);

title('立方插值');

4-5二维插值