《MATLAB简介输入及输出格式与多项式函数.ppt》由会员分享,可在线阅读,更多相关《MATLAB简介输入及输出格式与多项式函数.ppt(39页珍藏版)》请在三一办公上搜索。
1、Matlab输入输出格式及多项式函数,在运算式中常需要做数据的输入及输出,采用的方式可以是交谈式的或是指定格式。,输入及输出 交谈式的输入 输出格式,Matlab输入及输出格式,我们来看一个例子,计算面积 Area=可利用指令input在荧幕印出提示文字做为交谈式的输入。r=input(Type radius:)%在两个单引号 之间键入提示文字 Type radius:%现在键入 2 做为半径值 r=2 area=pi*r2;%键入面积算式,交谈式的输入,name=input(Your name please:,s)%要键入文字则须在加上s,s 是代表字串(string)Your name p
2、lease:%键入名字 J.C.Wu name=J.C.Wu,输出格式,至于输出有二种格式:自由格式(disp)和格式化输出(fprintf)。要直接输出文字或是一数值,可使用disp,例如 temp=20;disp(temp);disp(degrees C);disp(度 C)%中文也接受呢!20 degrees C 度 C,而指令fprintf则是用来控制输出数据及文字的格式,它的基本格式如 fprintf(The area is%8.5fn,area)在二个单引号间包括输出的字串The area is,接着是输出数据的格式%8.5f,再来是跳行符号以避免下一个输出 数据或是提示符号也挤在
3、同一行,最后键入要输出的数据名area。The area is 12.56637%输出值为8位数含5位小数注意输出格式前须有%符号,跳行符号须有符号,在此要稍加说明的是输出数据的格式,以下的例子各说明了不同型态的输出格式 fprintf(f_form:%12.5fn,12345.2)%输出值为12位数,含5位小数 f_form:12345.20000 fprintf(f_form:%12.3fn,1.23452)%输出值为12位数,含3位小数 f_form:1.235,fprintf(e_form:%12.5en,12345.2)%输出值为指数格式的12位数,含5位小数 e_form:1.23
4、452e+004 fprintf(f_form:%12.0fn,12345.2)%输出值为整数格式的12位数 f_form:12345,MATLAB常用的三角函数 sin(x):正弦函数 asin(x):反正弦函数 cos(x):余弦函数 acos(x):反余弦函数 tan(x):正切函数 atan(x):反正切函数 sinh(x):超越正弦函数 asinh(x):反超越正弦cosh(x):超越余弦函数 acosh(x):反超越馀弦函数 tanh(x):超越正切函数 函数 atanh(x):反超越正切函数,Matlab多项式函数,多项式常被用来模拟一个物理现象的解析函数,之所以采用多项式,是因
5、为它很容易计算。在这里我们将说明如何做多项式的计算及解多项式的根。,令p(x)代表一个多项式如下 MATLAB 以一最简便方式代表上述的多项式 p=1 4-7-10,其中的数值是多项式的各阶项(从高到低)的 各个系数,其实p 也是一个阵列不过是用以代表这个多项式。有了多项式的表示式后,我们即可来计算其函数值。假设要计算一组数据x对应的多项式值,依照一般的函数 计算须以下列式子计算:,p=x.3+4*x.2-7*x-10 为了能直接运用多项式,可以用函数 polyval直接做运算,语法为 polyval(p,x),其中p 即是代表多项式各阶系数 的阵列。因此 x=linspace(-1,3,N)
6、;p=1 4 7-10;v=polyval(p,x);,y=polyval(p,x)返回n次多项式p在x处的值。输入变量p=p0 p1 p2pn是一个长度为n+1的向量,其元素为按降排列的多项式系数。y=pn+pn-1*x+p0*xnx可以是一个矩阵或者一个向量,在这两种情况下,polyval计算在X中任意元素处的多项式p的估值。,用法:linspace(x1,x2,N)功能:linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。其中x1、x2、N分别为起始值、终止值、元素个数。若缺省N,默认点数为100。在matlab的命令窗口下输入help linspace或者d
7、oc linspace可以获得该函数的帮助信息。,我们接着说明如何对二个多项式做加减乘除运算。当二个多项式间要做加减乘除时,加 减运算可以直接进行。假设有二个多项式 a(x)和 b(x)定义如下:,如果多项式 c(x)为上述二多项式相加,即 c(x)=a(x)+b(x),因此,如果是二多项式相减得到的多项式为 d(x)=a(x)-b(x),则,以下就介绍相关范例,来说明二个多项式的加减运算:,a=1 2 3 4;b=1 4 9 16;c=a+b c=2 6 12 20 d=a-b d=0-2-6-12,而将两个多项式相乘可以得到一新的多项式 e(x)=a(x)b(x),如果是两个多项式相除,即
8、:,上述二个运算式不能直接运算,须要另外定义函数conv做乘法运算以及函数deconv做除法运算。当二多项式相乘,在数学上等于二个阵列做卷积(convolution)运算(因为我们是以阵列来代表一个多项式的各阶系数),因此可利用conv函数做乘法运算,其语法为conv(a,b),其中a,b代表二个多项式的阵列。而二多项式相除就相 当于反卷积(de-convolution)运算,因此有 deconv 函数,其语法稍有不同 q,r=deconv(a,b),其中q,r分别代表整 除多项式及余数多项式。,以下就介绍相关范例,来说明二个多项式的乘除运算:a=1 2 3 4;b=1 4 9 16;,e=c
9、onv(a,b)e=1 6 20 50 75 84 64 g=e+0 0 0 c g=1 6 20 52 81 96 84,(c=2 6 12 20),f,r=deconv(e,b)f=1 2 3 4 r=0 0 0 0 0 0 0%因为是整除所以余数多项式的各系数皆为零,h,r=deconv(g,a)h=1 4 9 18 r=0 0 0 0 2 6 12%余数多项式为 2*x2+6*x+12,多项式的根,一个多项式视其阶数而定,它的根可以有一个到数个,可能为实数也可能是复数。要求一高阶多项式的根往 往须借助数值方法,所幸MATLAB已将这些数值方法写成一函数roots(p),我们只要输入多项
10、式的各阶系数(以 p 代表)即可求解到对应的根,p=1 3 2;r=roots(p)r=-2-1 p=1-12 0 25 116;%注意二阶项系数为零须要输入,否则多项式的阶数就不对 r=roots(p)%有实数根及复数根 r=11.7473 2.7028-1.2251+1.4672i-1.2251-1.4672i,与 roots 相关的函数尚有 poly,real,这二个函数的用途是要验算求解的根展开能求得原多项式。例如有一个二次方程式的根为-2,-1,则以下式计算原多项式 p(x)=(x+2)(x+1)=x2+3x+2 poly 函数就是在求出多项式的各阶系数,其语法为 poly(r),其
11、中 r 是代表根的阵列。而 real 则是用来去除因计算时产生的假虚部系数,为何会有此种情形请参考以下的例子。,r=-2-1;pp=poly(r)%pp=(x+2)(x+1)=x2+3x+2 pp=1 3 2 p=1-4 6-4;r=roots(p)r=2.0000 1.0000+1.0000i 1.0000-1.0000i pp=poly(r)%这个多项式的系数与原多项式 p 相同 pp=1-4 6-4,pp=1 7 12 9;%再看另一个多项式 r=roots(pp)r=-4.9395-1.0303+0.8721i-1.0303-0.8721i pp=poly(r)%注意因计算的误差会有假
12、虚部产生 pp=1.0000 7.0000 12.0000 9.0000+0.0000i pp=real(pp)%可以real将假虚部去除,将原多项式还原 pp=1.0000 7.0000 12.0000 9.0000,非线性方程的实根,如果求根的方程不为多项式的形式,就不能用 roots 函数。而这类的方程多半是非线性方程,其函数形式变化很大。对于解这类方程的根,可以用 fzero函数,它其实是用来找一函数 f(x)的 x 值代入时,会使该函数值为零(f(x)=0);而这也就是根的特性,因此我们可以用 fzero求根。,要求任一方程的根有三步骤:(1)先定义方程。要注意必须将方程安排成 f(
13、x)=0 的形式,例如一方程为sin(x)=3,则该方程式应表示为 f(x)=sin(x)-3。可以 用m-file 定义方程。(2)代入适当范围的 x,y(x)值,将该函数的分布图画出,藉以了解该方程的长相。,(3)由图中决定y(x)在何处附近(x0)与 x 轴相交,以fzero的语法fzero(function,x0)即可求出在 x0附近的根,其中 function 是先前已定义的函数名称。如果从函数分布图看出根不只一 个,则须再代入另一个在根附近的 x0,再求出下一个根。以下分别介绍几个方程式,来说明如何求解它们的根。,例一、方程为 sin(x)=0 我们知道上式的根有,求根方式如下:r
14、=fzero(sin,3)%因为sin(x)是内建函数,其名称为sin,%因此无须定义它选择 x=3 附近求根 r=3.1416 r=fzero(sin,6)%选择 x=6 附近求根 r=6.2832,例二、方程为MATLAB 内建函数 humps,我们不须要知道这个方程的形态为何,不过我们可以将它画出来,再找出根的位置。求根方式如下:x=linspace(-2,3);y=humps(x);plot(x,y),grid%由图中可看出在0和1附近有二个根 r=fzero(humps,1.2)r=1.2995,例三、方程式为 这个方程式其实是个多项式,我们说明除了用 roots 函数找出它的根外,
15、也可以用这节介绍的方法求根,注意二者的解法及结果有所不同。求根方式如下:,%m-function,f_1.m function y=f_1(x)%定义 f_1.m 函数 y=x.3-2*x-5;x=linspace(-2,3);y=f_1(x);plot(x,y),grid%由图中可看出在2和-1附近有二个根,r=fzero(f_1,2);%决定在2附近的根 r=2.0946 p=1 0-2-5 r=roots(p)%以求解多项式根方式验证 r=2.0946-1.0473+1.1359i-1.0473-1.1359i,例四、方程式为 求根方式如下:%m-function,f_2.m funct
16、ion y=f_2(x)%定义 f_2.m 函数 y=x.2.*sin(x)+cos(x);x=linspace(-3,3);y=f_2(x);plot(x,y),grid%由图中可看出在-1和3附近有二个根 r=fzero(f_2,-1);%决定在-1附近的根,r=-0.8952 r=fzero(f_2,3);%决定在3附近的根 r=3.0333,例五、方程式为 求根方式如下:%m-function,f_3.m function y=f_3(x)%定义 f_3.m 函数 y=2*exp(-x).*sin(2*pi*x)-0.5;x=0:0.1:2;y=f_3(x);plot(x,y),grid%由图中可看出在0,0.5和1附近有三个根 r=fzero(f_3,0)%决定在0附近的根 r=0.0420,r=fzero(f_3,0.5)%决定在0.5附近的根 r=0.4368 r=fzero(f_3,1)%决定在1附近的根 r=1.1435,