文档库 最新最全的文档下载
当前位置:文档库 › matlab多项式

matlab多项式

matlab多项式
matlab多项式

matlab多项式

10.1 根

找出多项式的根,即多项式为零的值,可能是许多学科共同的问题,。MA TLAB求解这个问题,并提供其它的多项式操作工具。在

MA TLAB里,多项式由一个行向量表示,它的系数是按降序排列。例如,输入多项式x4-12x3+0x2+25x+116

? p=[1-12025116]

p =

1-12025116

注意,必须包括具有零系数的项。除非特别地辨认,MA TLAB无法知道哪一项为零。给出这种形式,用函数roots找出一个多项式的根

? r=roots(p)

r =

11.7473

2.7028

-1.2251 + 1.4672i

-1.2251 - 1.4672i

因为在MA TLAB中,无论是一个多项式,还是它的根,都是向量,MA TLAB按惯例规定,多项式是行向量,根是列向量。给出一

? pp=poly(r)

pp =

1.0e+002 *

Columns 1 through 4

0.0100-0.12000.00000.2500

Column 5

1.1600 + 0.0000i

? pp=real(pp) %throw away spurious imaginary part

pp =

1.0000-1

2.00000.000025.0000116.0000

因为MA TLAB无隙地处理复数,当用根重组多项式时,如果一些根有虚部,由于截断误差,则poly的结果有一些小的虚部,这是很普

通的。消除虚假的虚部,如上所示,只要使用函数real抽取实部。

10.2 乘法

函数conv支持多项式乘法(执行两个数组的卷积)。考虑两个多项式a(x)=x3+2x2+3x+4和b(x)= x3+4x2+9x+16的乘积:

? a=[1234] ;b=[14916];

? c=conv(a , b)

c =

162050758464

结果是c(x)=x6+6x5+20x4+50x3+75x2+84x+64。两个以上的多项式的乘法需要重复使用conv。

10.3 加法

对多项式加法,MA TLAB不提供一个直接的函数。如果两个多项式向量大小相同,标准的数组加法有效。把多项式a(x)与上面给出的

b(x)相加。

? d=a+b

d =

261220

结果是d(x)= 2x3+6x2+12x+20。当两个多项式阶次不同,低阶的多项式必须用首零填补,使其与高阶多项式有同样的阶次。考虑

上面多项式c和d相加:

? e=c+[000d]

e =

162052819684

结果是e(x)= x6+6x5+20x4+52x3+81x2+96x+84。要求首零而不是尾零,是因为相关的系数象x幂次一样,必须整齐。

如果需要,可用一个文件编辑器创建一个函数M文件来执行一般的多项式加法。精通MA TLAB工具箱包含下列实现:

function p=mmpadd(a,b)

%MMPADD Polynomial addition.

%MMPADD(A,B) adds the polynomial A and B

%Copyright (c) 1996 by Prentice Hall,Inc.

if nargin<2

error(' Not enough input arguments ')

end

a=a(:).' ;%make sure inputs are polynomial row vectors

b=b(:).' ;

na=length(a) ;%find lengths of a and b

nb=length(b) ;

p=[zeros(1,nb-na) a]+[zeros(1,na-nb) b] ;%add zeros as necessary

现在,为了阐述mmpadd的使用,再考虑前一页的例子。

? f=mmpadd(c,d)

f =

162052819684

它与上面的e相同。当然,mmpadd也用于减法。

?g=mmpadd(c , -d)

g =

162048697244

结果是g(x)= x6+6x5+20x4+48x3+69x2+72x+44。

10.4 除法

在一些特殊情况,一个多项式需要除以另一个多项式。在MA TLAB中,这由函数deconv 完成。用上面的多项式b和c

? [q , r]=deconv(c , b)

q =

1234

r =

0000000

这个结果是b被c除,给出商多项式q和余数r,在现在情况下r是零,因为b和q的乘积恰好是c。

10.5 导数

由于一个多项式的导数表示简单,MA TLAB为多项式求导提供了函数polyder。

? g

g =

162048697244

? h=polyder(g)

h =

6308014413872

10.6估值

根据多项式系数的行向量,可对多项式进行加,减,乘,除和求导,也应该能对它们进行估值。在MA TLAB中,这由函数polyval来完

成。

? x=linspace(-1, 3) ; %choose 100 data points between -1and 3.

? p=[14-7-10] ;%uses polynomial p(x) = x3+4x2-7x-10

? v=polyval(p , x) ;

计算x值上的p(x),把结果存在v里。然后用函数plot绘出结果。

? plot(x , v),title(' x^3+4x^2-7x-10 '),xlabel(' x ')

图10.1多项式估值

10.7有理多项式

在许多应用中,例如富里哀(Fourier),拉普拉斯(Laplace)和Z变换,出现有理多项式或两个多项式之比。在MA TLAB中,有理多项式

由它们的分子多项式和分母多项式表示。对有理多项式进行运算的两个函数是residue和polyder。函数residue执行部分分式展开。

? num=10*[12] ; %numerator polynomial

? den=poly([-1; -3; -4]) ;%denominator polynomial

? [res, poles, k]=residue(num, den)

res =

-6.6667

5.0000

1.6667

poles =

-4.0000

-3.0000

-1.0000

k =

[]

结果是余数、极点和部分分式展开的常数项。上面的结果说明了该问题:

这个函数也执行逆运算。

? [n, d]=residue(res, poles, k)

n =

0.000010.000020.0000

d =

1.00008.000019.00001

2.0000

? roots(d)

ans =

-4.0000

-3.0000

-1.0000

在截断误差内,这与我们开始时的分子和分母多项式一致。residue也能处理重极点的情况,

尽管这里没有考虑。

正如前面所述,函数polyder,对多项式求导。除此之外,如果给出两个输入,则它对有理多项式求导。

? [b , a]=polyder(num , den)

b =

-20-140-320-260

a =

116102328553456144

该结果证实:

10.8 M文件举例

本章说明了在精通MA TLAB工具箱中两个函数。这些函数说明了本章所论述的多项式概念和如何写M文件函数。关于M文件的更多信

息,参阅第8章。

在讨论M文件函数的内部结构之前,我们考虑这些函数做些什么。

? n%earlier data

n =

0.000010.000020.0000

? b%earlier data

b =

-20-140-320-260

? mmpsim(n)%strip away negligible leading term

ans =

10.000020.0000

? mmp2str(b)%convert polynomial to string

ans =

-20s^3 - 140s^2 - 320s^1 - 260

? mmp2str(b , ' x ')

ans =

-20x^3 - 140x^2 - 320x^1 - 260

? mmp2str(b , [] , 1)

ans =

-20*(s^3 + 7s^2 + 16s^1 + 13)

? mmp2str(b , ' x ' , 1)

ans =

-20*(x^3 + 7x^2 + 16x^1 + 13)

这里函数mmpsim删除在多项式n中近似为零的第一个系数。函数mmp2str把数值多项式变换成等价形式的字符串表达式。该两个函

数的主体是:

function y=mmpsim(x,tol)

%MMPSIM Polynomial Simplification,Strip Leading Zero Terms.

%MMPSIM(A) Delets leading zeros and small coefficients in the

%polynomial A(s). Coefficients are considered small if their

%magnitude is less than both one and norm(A)*1000*eps.

%MMPSIM(A,TOL) uses TOL for its smallness tolerance.

%Copyright (c) 1996 by Prentice-Hall,Inc.

if nargin<2, tol=norm(x)*1000*eps; end

x=x(:).' ;%make sure input is a row

i=find(abs(x)<.99&abs(x)

x(i)=zeros(1, length(i)) ;%set them to zero

i=find(x~=0) ;%find significant indices

if isempty(i)

y=0 ;%extreme case: nothing left!

else

y=x(i(1) : length(x)) ;%start with first term

end%and go to end of polynomial

function s=mmp2str(p,v,ff)

%MMP2STR Polynomial V ector to String Conversion.

%MMP2STR(P) converts the polynomial vector P into a string. %For example: P = [234] becomes the string ' 2s^2 + 3s + 4 '

%

%MMP2STR(P,V) generates the string using the variable V

%instead of s. MMP2STR([234],' z ') becomes ' 2z^2 + 3z + 4 ' %

%MMP2STR(P,V,1) factors the polynomial into the product of a %constant and a monic polynomial.

%MMP2STR([234],[],1) becomes ' 2(s^2 + 1.5s + 2) '

%Copyright (c) 1996 by Prentice-Hall,Inc.

if nargin<3, ff=0; end%factored form is False

if nargin <2, v=' s ' ; end%default variable is ' s ' if isempty(v), v=' s ' ; end%default variable is ' s ' v=v(1) ;%variable must be scalar

p=mmpsim(p) ;%strip insignificant terms

n=length(p) ;

if ff%put in factored form

K=p(1) ; Ka=abs(K) ; p=p/K;

if abs(K-1)<1e-4

pp=[]; pe=[] ;

elseif abs(K+1)<1e-4

pp=' -(' ; pe= ') ' ;

elseif abs(Ka-round(Ka))<=1e-5*Ka

pp=[sprintf(' %.0f ', K) '*( ' ] ; pe= ') ' ;

else

pp=[sprintf(' %.4g ' , K) '*(' ] ; pe= ') ' ;

end

else%not factored form

K=p(1);

pp=sprintf(' %.4g ' , K) ;

pe=[];

end

if n==1%polynomial is just a constant

s=sprintf(' %.4g ',K);

return

end

s=[pp v ' ^ ' sprintf(' %.0f ',n-1)];%begin string construction for i=2:n-1%catenate center terms in polynomial

if p(i)<0, pm= ' -' ;else,if p(i)<0,pm= ' ;end

if p(i)= =1,pp=[] ; else,pp=sprintf(' %.4g ', abs(p(i))) ;end if p(i)~ =0,s=[spmppv' ^ ' sprintf(' %.0f ',n-i)] ;end

end

if p(n)~ =0,pp=sprintf(' %.4g ',abs(p(n))); else,pp=[];end

if p(n)<0 , pm= ' -' ; elseifp(n)>0 , pm= ' +' ; else,pm=[];end s=[spmpppe];%add final terms

10.9 小结

下列表格概括了在本章所讨论的多项式操作特性。

表10.1

多项式函数

conv(a, b)

乘法

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

除法

poly(r)

用根构造多项式

polyder(a)

对多项式或有理多项式求导polyfit(x, y, n)

多项式数据拟合

polyval(p, x)

计算x点中多项式值

[r, p, k]=residue(a, b)

部分分式展开式

[a, b]=residue(r, p, k)

部分分式组合

roots(a)

求多项式的根

表10.2

精通MA TLAB 多项式操作mmp2str(a)

多项式向量到字符串变换,a(s) mmp2str(a, ' x ')

多项式向量到字符串变换,a(x) mmp2str(a, ' x ', 1)

常数和符号多项式变换mmpadd(a, b)

多项式加法mmpsim(a) 多项式简化

Matlab多变量二次多项式拟合

一、对Y 总做线性多项式拟合:0112288......Y b b X b X b X =+++ 设置显著性水平为0.05,拟合得到: B=[ 0b ,1b ,………., 8b ]= [-60.0349 12.5809 2.2002 -12.9863 20.4145 0.0266 5.1430 17.2416 151.6779] 对应的置信区间为: -161.4058 41.3359 -7.5870 32.7488 -25.5706 29.9709 -33.5089 7.5362 -0.3096 41.1386 -2.5989 2.6520 0.9830 9.3030 -3.2810 37.7642 -64.0209 367.3767 r 2= 0.7454 (越接近于1,回归效果越显著),F= 2.5616, p= 0.1163,(p>0.05, 可知回归模型不成立)。 残差图如下:

从残差图可以看出,除第一个数据和最后一个数据的残差离零点均较远,说明这两个数据可视为异常点,去掉这两个数据之后再做拟合得到: B=[ 0b ,1b ,………., 8b ]= [-478.8 15.7 1.8 -85.3 43 2.8 24.7 135.3 1131.9] 对应的置信区间为: -1048.7 91.1 7.5 23.9 -8 11.6 -183.5 12.8 10.5 75.5 -1.1 6.7 -2 51.4 -25.8 296.4 -206.7 2470.4 r 2= 0.9690 (越接近于1,回归效果越显著),F= 19.5530, p= 0.0023,(p<0.05, 可知回归模型成立)。 残差图如下:

Matlab中多项式的运算

Matlab中多项式的运算 1:直接键入p=[ 1 2 3 4]系统就自动建立起多项式y=x3+2x2+3x+4 2:利用roots(p)命令就可以求解这个多项式的根,例如:>> p=[1 2 3 4 ]; >> roots(p) ans = -1.6506 -0.1747 + 1.5469i -0.1747 - 1.5469i 3:利用poly(a)命令可以由多项式的根求解多项式的系数,其中a=[ 2 3]的表示形式。例如:>> a=[2 3]; >> poly(a) ans = 1 -5 6 则这个多项式为x2+5x+6. 4:多项式的相加减:若干个多项式相加减时就是把它们的系数数组直接相加减,但是系数数组元素的个数必须相等,若不够,可以补0,例如:a=[1 2 3 4]; b=[2 2 1 2]; c=a+b c =[ 3 4 4 6]

5:利用conv(a,b)命令可以求解a,b两个多项式的乘积。例如:>> a=[1 2]; >> b=[1 -2]; >> c=conv(a,b) c = 1 0 -4.因为a=x+2,b=x-2,所以a,b的乘积为c=x2-4. 6:利用polyder(a)命令可以去、求多项式的微分(求导数),例如:>> a=[1 2 0 -5 6]; >> b=polyder(a) b =4 6 0 -5,其中a=x4+2x3-5x+6;b=4x3+6x2-5. 6;给出x的范围,利用polyval(a)命令可以求出x对应的多项式的值,例如:>> x=-1:0.1:2; >> a=[1 2 0 -5 6]; >> y=polyval(a,x); >> plot(x,y) >> grid 绘图结果如下:

matlab实验五多项式和符号运算

实验五:Matlab多项式和符号运算 一、实验目的 1.掌握Matlab多项式的运算。 2.了解符号运算。 二、实验内容 1.将多项式()(2)(3)(7)(1) =-+-+化为x的降幂排列。 P x x x x x syms x; y=(x-2)*(x+3)*(x-7)*(x+1); expand(y) ans = x^4-5*x^3-19*x^2+29*x+42 2.求一元高次方程的根。 98765432 --++--++= 53015027313658204100576-28800 x x x x x x x x x syms x y; y=x^9-5*x^8-30*x^7+150*x^6-1365*x^4-820*x^3+410 0*x^2+576*x-2880; solve(y,x) ans = 6.81947687944124431946 1.42761488953013276419+.8192491831*i 2.865487219+2.49263348244446271927*i

-1.887673354+1.812452594*i -.9583509633 -5.922730991 -1.887673354-1.812452594*i 2.865487219-2.49263348244446271927*i 1.42761488953013276419-.8192491831*i 3.求一元高次方程的根,并画出左边多项式函数在[2,2] x∈-区间内的曲线。 42 -+= x x 210 a=[1 0 -2 0 1]; r=roots(a) syms x; x=-2:2; y=[1 0 -2 0 1]; plot(x,y) r = 1.0000 + 0.0000i 1.0000 - 0.0000i -1.0000 -1.0000

matlab多项式运算和方程组的求解

二、多项式 (1)多项式的表达式和创建 MATLAB中使用一维向量来表示多项式,将多项式的系数按照降幂次序存放在向量中。 例如:多项式2X4+3X3+5X2+1可以用向量[2 3 5 0 1]来表示。 例2-1,输入多项式3x4-10x3+15x+1000 在命令窗口输入: p=[3 -10 0 15 1000] 输出结果如下: (2)多项式求根 1、多项式的根 找出多项式的根,即使多项式为零的值,MATLAB提供了特定的函数roots求解多项式的根。 例2-2,求解多项式3x4-10x3+15x+1000的根。 在命令窗口输入:

输出的结果如下: 2、由根创建多项式 在MATLAB中,无论是一个多项式,还是它的根,都是以向量形式存储的,按照惯例,多项式是行向量,根是列向量。因此当我们给出一个多项式时,MATLAB 也可以构造出相应的多项式,这个过程需要使用函数poly。 例2-3 输入及结果 (3)多项式四则运算 1,多项式的加法 MATLAB并未提供一个特别的函数,如果两个多项式向量大小相同,那么多项

式相加时就和标准的数组加法相同。 例2-4 在命令窗口输入: a=[1 3 5 7 9];b=[1 2 4 6 8]; c=a+b 输出结果: C(x)=2x4+5x3+9x2+13x+17 2、多项式的乘法运算 在MATLAB中,函数conv支持多项式乘法(运算法则为执行两个数组的卷积)。例2-5 在命令窗口输入: a=[1 3 5 7 9]; b=[1 2 4 6 8]; c=conv(a,b) 输出的结果如下:

C(x)=x8+5x7+15x6+35x5+69x4+100x3+118x2+110x+72 PS:conv指令只能进行两个多项式的乘法,两个以上的多项式的乘法需要重复使用conv。 3、多项式的除法运算 在MATLAB中,由函数deconv完成的。 例2-6 在命令窗口输入: c=[1 5 15 35 69 100 118 110 72];b=[1 2 4 6 8]; [a,r]=deconv (c,b) 输出的结果: (4)多项式微分

Matlab的应用-多项式函数及多项式拟合

Matlab的应用-多项式函数及多项式拟合 本节将向大家简要介绍matlab 在多项式处理方面的应用。 多项式函数主要有: roots 求多项式的根 poly 特征多项式 polyval 多项式的计算 poly2str(p,'x')多项式代换 polyfit 多项式曲线拟合 conv 多项式乘法 deconv 多项式除法 polyder 微分多项式 下面我们将介绍这些函数的用法: 1,roots---求多项式的根 格式:roots(c) 说明:它表示计算一个多项式的根,此多项式系数是向量c的元素.如果c有n+1个元素,那么此多项式为: c(1)*x^n+c(2)*x^(n-1)+c(3)*x^(n-2)+--+c(n)*x+c(n+1) 2,poly---特征多项式 格式:poly(a) 说明:(1)如果a是一个n阶矩阵,poly(a)是一个有n+1个元素的行向量,这n+1个元素是特征多项式的系数(降幂排列). (2)如果a是一个n维向量,则poly(a)是多项式(x-a(1))*(x-a(2))*..(x-a(n)),即该多项式以向量a的元素为根。 3,polyval—多项式计算 格式:polyval(v,s) 说明: 如果v是一个向量,它的元素是一个多项式的系数,那麽polyval(v,s)是多项式在s处的值. 如果s是一个矩阵或是一个向量,则多项式在s中所有元素上求值 例如: v=*1 2 3 4+;vv=poly2str(v,’s’)

(即v=s^3+2*s^2+3*s+4) s=2; x=polyval(v,s) x = 26 例如: v=[1 2 3 4]; s=[2 4]; polyval(v,s) ans=26 112 4,conv-多项式乘法 例:as=[1 2 3] as = 1 2 3 >> az=[2 4 2 1] az = 2 4 2 1 >> conv(as,az) ans = 2 8 16 17 8 3 conv(az,as) ans = 2 8 16 17 8 3 5,deconv-多项式除法 例:deconv(az,as)%返回结果是商式的系数 ans = 2 0 [awwq,qw]=deconv(az,as)%awwq是商式的系数,qw是余式的系数 awwq = 2 0 qw = 0 0 -4 1 6,polyder 微分多项式 polyder(as) ans = 2 2 7,polyfit--多项式曲线拟合 格式::polyfit(x,y,n) 说明:polyfit(x,y,n)是找n次多项式p(x)的系数,这些系数满足在最小二乘法意义下p(x(i)) ~= y(i). “人口问题”是我国最大社会问题之一,估计人口数量和发展趋势是我们制定一系列相关政策的基础。有人口统计年鉴,可查到我国从1949年至1994年人口数据资料如下: 年份 1949

matlab多项式拟合

matlab_最小二乘法数据拟合 (2012-10-21 12:19:27) ▼ 标签: matlab 最小二乘 数据拟合 定义: 最小二乘法(又称最小平方法)是一种数学优化技术。它通过最 小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可 以简便地求得未知的数据,并使得这些求得的数据与实际数据之 间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一 些优化问题也可通过最小化能量或最大化熵用最小二乘法来表 达。 最小二乘法原理: 在我们研究两个变量(x,y)之间的相互关系时,通常可以得到一系列成对的数据(x1,y1.x2,y2... xm,ym);将这些数据描绘在x -y直角坐标系中,若发现

这些点在一条直线附近,可以令这条直线方程如(式1-1)。 Yj= a0 + a1 X (式1-1) 其中:a0、a1 是任意实数 1.多项式曲线拟合:polyfit 1.1常见拟合曲线: 直线:y=a0X+a1 多项式: 一般次数不易过高2 3 双曲线:y=a0/x+a1 指数曲线:y=a*e^b 1.2 matlab中函数 P=polyfit(x,y,n) [P S mu]=polyfit(x,y,n) polyval(P,t):返回n次多项式在t处的值 注:其中x y已知数据点向量分别表示横纵坐标,n为拟合多项 式的次数,结果返回:P-返回n次拟合多项式系数从高到低

依次存放于向量P中,S-包含三个值其中normr是残差平方 和,mu-包含两个值 mean(x)均值,std(x)标准差。 1.3举例 1. 已知观测数据为: X: 0 1 2 3 4 5 6 7 8 9 1 Y:- 0.447 1.987 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3 11.2 用三次多项式曲线拟合这些数据点: x=0:0.1:1 y=[- 0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48, 9.3,11. 2] plot(x,y,'k.','markersize',25) hold on axis([0 1.3 -2 16]) p3=polyfit(x,y,3) t=0:0.1:1.2:

MATLAB数据分析与多项式计算_习题答案

第6章 MATLAB数据分析与多项式计算 习题6 一、选择题 1.设A=[1,2,3,4,5;3,4,5,6,7],则min(max(A))的值是()。B A.1 B.3 C.5 D.7 2.已知a为3×3矩阵,则运行mean(a)命令是()。B A.计算a每行的平均值B.计算a每列的平均值 C.a增加一行平均值D.a增加一列平均值 3.在MATLAB命令行窗口输入下列命令: >> x=[1,2,3,4]; >> y=polyval(x,1); 则y的值为()。D A.5 B.8 C.24 D.10 4.设P是多项式系数向量,A为方阵,则函数polyval(P,A)与函数polyvalm(P,A)的值()。D A.一个是标量,一个是方阵B.都是标量 C.值相等D.值不相等 5.在MATLAB命令行窗口输入下列命令: >> A=[1,0,-2]; >> x=roots(A); 则x(1)的值为()。C A.1 B.-2 C.D. 6.关于数据插值与曲线拟合,下列说法不正确的是()。A A.3次样条方法的插值结果肯定比线性插值方法精度高。 B.插值函数是必须满足原始数据点坐标,而拟合函数则是整体最接近原始数据点,而不一定要必须经过原始数据点。 C.曲线拟合常常采用最小二乘原理,即要求拟合函数与原始数据的均方误差达到极小。 D.插值和拟合都是通过已知数据集来求取未知点的函数值。 二、填空题 1.设A=[1,2,3;10 20 30;4 5 6],则sum(A)= ,median(A)= 。 [15 27 39],[4 5 6[ 2.向量[2,0,-1]所代表的多项式是。2x2-1

MATLAB入门及多项式方程的求解

MATLAB入门及多项式方程的求解 实验目的: 1对高等代数实验课的初步了解 2对MATLAB软件的初步了解 3掌握多项式的和、差、积、商式、余式、最大公因式、因式分解等MATLAB语句 4加深对多项式的整除性、最大公因式、因式分解、多项式的重因式、多项式的根等概念的理解实验内容: 程序 实验1.1 a=2*3/8+sqrt(6)-abs(-3) b=sin(pi/3)+cos(pi/6)+sqrt(7)-5*3+1 c=factorial(6)*nchoosek(100,9)/nchoosek(34,18)-log(-9)+log10(7) d=nchoosek(302,298)-nchoosek(301,200)+tan(pi/5)-2+log(2) e=factorial(120)+nchoosek(201,100)-3*sin(pi/3) 实验1.2 f=[1 -5 4 0 1 -2 1 -1] g=[1 0 -3 2 -1 1] [q,r]=deconv(f,g) syms x h=gcd(x^7-5*x^6+4*x^5+x^3-2*x^2+x-1,x^5-3*x^3+2*x^2-x+1) s=sym(x^7-5*x^6+4*x^5+x^3-2*x^2+x-1) factor(s) gl=roots(f) v=polyval(f,2) v=polyval(f,3) v=polyval(f,5) 实验结果分析 实验1.1

a = 0.1995 b = -9.6222 c = 6.2143e+005 d = -1.2392e+082 e = 6.6895e+198 实验1.2 q = r= 因为r≠0 所以g(x)不能整除f(x) h =(f,g)=1 f = f(x)无重因式 gl = 3.9885 v1 = -63 v2 = -475 v3= 12579

MATLAB 数值计算(2)

数值计算 MATLAB 数值计算 第四章MATLAB 1

主要内容 基本数据运算 数据统计与分析 数据插值与曲线拟合 多项式计算 数值微积分 线性方程组求解 非线方与问求解 非线性方程与最优化问题求解2 常微分方程的数值求解

多项式计算 N次多项式表示为 –P(x)=a 0x n +a 1x n-1+a 2x n-2…a n-1x+a n Matlab中n次多项式用一个长度为n+1的行向量(系数向量 )表示 –[a a …a n-1a [01n 1n ] 多项式的四则运算 –多项式的加减运算 ?系数向量的加减运算 要求次数相同不足时用“?要求次数相同,不足时用“0”补起——向量化处理?例 54322()352756f x x x x x x =?+?++3 ()353 g x x x =+?

多项式乘法运算 –函数conv(P1,P2)用于求多项式P1和P2的乘积。这里,P1、P2是两个多项式系数向量 多项式除法运算 –函数[Q,r]=deconv(P1,P2)用于对多项式P1和P2作除法运算。其中Q 返回多项式P1除的商式的余式这里仍是多项式系数向量以P2的商式,r 返回P1除以P2的余式。这里,Q 和r 仍是多项式系数向量。–deconv 是conv 的逆函数,即有P1=conv(P2,Q)+r 。 5432?? 例 –求f(x)+g(x)、f(x)-g(x)。2()352756()353 f x x x x x x g x x x =+++=+?–求f(x)×g(x)、f(x)/g(x)。 –f=[3,-5,2,-7,5,6];g=[3,5,-3];g1=[0,0,0,g];–f+g1%求f(x)+g(x)f+g1 %求f(x)+g(x)–f-g1 %求f(x)-g(x)–conv(f,g) %求f(x)*g(x) []()求()/()商式送余式送 4 –[Q,r]=deconv(f,g) %求f(x)/g(x),商式送Q,余式送r。

第6章MATLAB数据分析与多项式计算_习题答案

第6章MATLAB数据分析与多项式计算 习题6 一、选择题 1.设A=[1,2,3,4,5;3,4,5,6,7],则min(max(A))的值是()。B A.1B.3C.5D.7 2.已知a为3×3矩阵,则运行mean(a)命令是()。B A.计算a每行的平均值B.计算a每列的平均值 C.a增加一行平均值D.a增加一列平均值 3.在MATLAB命令行窗口输入下列命令: >>x=[1,2,3,4]; >>y=polyval(x,1); 则y的值为()。D A.5B.8C.24D.10 4.设P是多项式系数向量,A为方阵,则函数polyval(P,A)与函数polyvalm(P,A)的值()。D A.一个是标量,一个是方阵B.都是标量 C.值相等D.值不相等 5.在MATLAB命令行窗口输入下列命令: >>A=[1,0,-2]; >>x=roots(A); 则x(1)的值为()。C A.1B.-2C.1.4142D.-1.4142 6.关于数据插值与曲线拟合,下列说法不正确的是()。A A.3次样条方法的插值结果肯定比线性插值方法精度高。 B.插值函数是必须满足原始数据点坐标,而拟合函数则是整体最接近原始数据点,而不一定要必须经过原始数据点。 C.曲线拟合常常采用最小二乘原理,即要求拟合函数与原始数据的均方误差达到 极小。 D.插值和拟合都是通过已知数据集来求取未知点的函数值。 二、填空题 1.设A=[1,2,3;102030;456],则sum(A)=,median(A)=。 [152739],[456[ 2.向量[2,0,-1]所代表的多项式是。2x 2-1

2 3 .为 了求a x +b x +c =0的根,相应的命令是(假定a 、b 、c 值)。为了 将求得的根代回方程进行验证,相应的命令是。 x=roots([a,b,c]),polyval([a,b,c],x) 4.如果被插值函数是一个单变量函插值,相应的MATLAB 函数 是。一维,interp1 5.求曲线拟合多项式系数的函数是,计算多项式在给定点上函数值的函数 是。polyfit ,polyval 三、应用题 1.利用M A T L A B 提供的r a n d n 函数生 成符合 正态分 布的10× 5随A ,进行如下 操作: (1)A 各列元素的均值和标。 (2)A 的最大元素和最小元素。 (3)求A 每行元素的和以及全部元素之和。 (4对A 的每列元素按升序、每行元素按降序排序。 第一题: (1): A=randn(10,5) B=mean(A) C=std(A) (2): mx=max(max(A)) mn=min(min(A)) (3): sm=sum(A,2) sz=sum(sum(A)) (4): [Y,I]=sort(A,1) [Z,J]=sort(A,2); rot90(Z,1)'%旋转90度后,再转置便可得到每行按降序排列 2.已知多项式P1(x)=3x+2,P2(x)=5x 2-x+2,P3(x)=x 2-0.5,求: (1)P(x)=P 1(x)P2(x)P3(x)。 (2)P(x)=0的全部根。 (3)计算x i =0.2i(i=0,1,2,?,10)各点上的P(x i )。 第二题: (1): p1=[0,3,2]; p2=[5,-1,2]; 2

最小二乘法的多项式拟合(matlab实现)

用最小二乘法进行多项式拟合(matlab实现) 西安交通大学 徐彬华 算法分析: 对给定数据(i=0 ,1,2,3,..,m),一共m+1个数据点,取多项式P(x),使 函数P(x)称为拟合函数或最小二乘解,令似的使得 其中,a0,a1,a2,…,an为待求未知数,n为多项式的最高次幂,由此,该问题化为求 的极值问题。由多元函数求极值的必要条件: j=0,1,…,n 得到: j=0,1,…,n

因此,只要给出数据点 及其个数m ,再给出所要拟合的参数n ,则即可求出未知数矩阵(a0,a1,a2,…,an ) 试验题1 编制以函数 为基的多项式最小二乘拟合程序,并用于对 下列数据作三次多项式最小二乘拟合(取权函数wi ≡1) x i -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 y i -4.447 -0.452 0.551 0.048 -0.447 0.549 4.552 总共有7个数据点,令m=6 第一步:画出已知数据的的散点图,确定拟合参数n; x=-1.0:0.5:2.0;y=[-4.447,-0.452,0.551,0.048,-0.447,0.549,4.552]; plot(x,y,'*') xlabel 'x 轴' ylabel 'y 轴' title '散点图' hold on {}n k k x 0=

因此将拟合参数n设为3. 第二步:计算矩阵 A= 注意到该矩阵为(n+1)*(n+1)矩阵, 多项式的幂跟行、列坐标(i,j)的关系为i+j-2,由此可建立循环来求矩阵的各个元素,程序如下: m=6;n=3; A=zeros(n+1); for j=1:n+1

MATLAB多项式

实验二 多项式 一、实验目的 掌握关于多项式运算的常用Matlab 命令, 通过具体实例加深对多项式理论的理解。 二、多项式的表示. 1. 在Matlab 中, 一个多项式通常用其系数组成的行向量(数组)来表示, 有时也用关于x 的形式表达式表示. 例:在Matlab 中表示多项式 3()834f x x x =++ >> f=[8 0 3 4] 或者用 >> syms x, fx=8*x^3+3*x+4 % syms x 命令是声明x 是一个符号 两者之间可以相互转化: >> fx=poly2sym(f) % 用poly2sym 命令将多项式的向量形式转化为形式表达式 f=sym2poly(fx) % 命令sym2poly 可将形式表达式转换为向量形式 2. 多项式的展开可使用expand 或collect 命令 例:展开多项式(x+1)(x-2)(x+3) >> syms x, expand((x+1)*(x-2)*(x+3)) 三、多项式的四则运算 1. 加法 例:计算3()834f x x x =++, 2()821g x x x =-+的和 >> f=[8 0 3 4], g=[0 8 -2 1], s=f+g, poly2sym(s) % 进行加法运算时次数不一样时必须补零使 得向量长度一致,否则加法会出错。 2. 乘法 使用命令conv(f,g) %不需要补零 3. 带余除法 使用命令[q,r]=deconv(f,g)可计算f 被g 除所得的商q 和余式r % 若输入命令q=deconv(f,g) 则得到商q 四、 最高公因式、因式分解 1. 求最高公因式使用命令 gcd(fx,gx) 2. 因式分解使用命令 factor(fx) % 上两个命令中,fx,gx 要求为形式表达式 五、多项式的赋值及求根 1. 求多项式f 在x=a 处的值可用 命令 polyval(f,a) %其中f 为向量形式 命令sub(fx,a) %其中fx 为形式表达式 2. 求根使用命令roots(f) %其中f 为向量形式 solve(fx) %其中f 为形式表达式 % solve 给出形式解,roots 给出数值解 可使用绘图命令plot 命令查看f 的图像 >> xx=-3:0.01:2; plot(xx, polyval(f,xx)), grid on % grid on 表示显示网格 六、练习 1. 设42()321f x x x x =---,2()2+5g x x x =- 求f(x)+g(x), f(x)g(x)及f(x)被g(x)除所得的商和余式. 2. 求143x )(234---+=x x x x f , 1)(23--+=x x x x g 的最高公因式和最小公倍式. 3. 求上述f(x)的根, 求f(x)在x=2,3处的值,并用plot 命令观察图像及根的分布. 4. 分别求121x -, 4+4x 及5432+3x 610219x x x x --+-在实数域上的因式分解.

拉格朗日插值多项式matlab

实验报告:拉格朗日插值多项式 实验目的与要求: 熟练掌握拉格朗日插值的基本思想与插值公式 实验内容: 对于给定的一元函数)(x f y =的n+1个节点值(),0,1,,j j y f x j n == 。试用Lagrange 公式求其插值多项式Lagrange 插值多项式。 数据如下: (1) 求五次Lagrange 多项式5L ()x ,计算(0.596)f ,(0.99)f 的值。 ( 试构造Lagrange 多项式6L ()x ,计算的(1.8)f ,(6.15)f 值。 实验环境与器材: Matlab7.0 实验过程(步骤)或程序代码: (1) fid=fopen('l3.txt','wt'); fprintf(fid,'试用Lagrange 公式求其插值多项式Lagrange 插值多项式,求f(0.596),f(0.99)\n'); A=[0.4,0.55,0.65,0.80,0.95,1.05]; B=[0.41075,0.57815,0.69675,0.9,1,1.25382]; For p=1:2 x=input('输入x=') a=1; for i=1:6

a=a*(x-A(i)); end l=0; for i=1:6 b=1; for j=1:6 if i~=j b=b*(A(i)-A(j)); end end l=l+B(i)*a/((x-A(i))*b); end fprintf(fid,'x f(x)\n'); fprintf(fid,'%2f %f\n',x,L); end (2) fid=fopen('l3.txt','wt'); fprintf(fid,'试用Lagrange公式求其插值多项式Lagrange插值多项式,求f(1.8),f(6.15)\n'); for p=1:2 x=input('输入x=') A=[1,2,3,4,5,6,7]; B=[0.368,0.135,0.050,0.018,0.007,0.002,0.001]; a=1; for i=1:7 a=a*(x-A(i)); end l=0; for i=1:7 b=1; for j=1:7 if i~=j b=b*(A(i)-A(j)); end end l=l+B(i)*a/((x-A(i))*b); end fprintf(fid,'x f(x)\n'); fprintf(fid,'%2f %f\n',x,L); end

多项式拟合matlab之方法

实验题目 使用Haar小波和傅里叶变换方法滤波及数据压缩 指导老师:李爱国 学生:陈立朝 学号:16208009004 专业:应用数学 西安科技大学计算机科学与技术学院

西安科技大学计算机科学与技术学院 1 实验报告 一、实验题目: 使用Haar 小波和傅里叶变换方法滤波及数据压缩 二、实验目的 1.掌握离散数据的Haar 小波变换和傅里叶变换的定义,基本原理和方法. 2.使用C++实现数据的Haar 小波变换和离散傅里叶变换. 3.掌握数据滤波的基本原理和方法. 4.掌握使用Haar 小波变换和离散傅里叶变换应用于数据压缩的基本原理和方法,并且对两种数据压缩进行评价. 三、实验步骤 1 算法原理 1.1 Haar 小波变换 (1)平均,细节及压缩原理 设{x1,x2}是一组两个元素组成的信号,定义平均与细节为2/)(21x x a +=,2/)(21x x d -=。则可以将{a ,d}作为原信号的一种表示,且信号可由{a ,d}恢复,1x a d =+,2x a d =-。 (2)尺度函数和小波方程 在小波分析中,引入记号)()(]1,0[t X t =φ,其中,)(]1,0[t X 表示区间[0,1]上的特征函数。定义 ,()(2),0,1,...,21j j j k t t k k φφ=-=- 称)(t φ为Haar 尺度函数。由上式可知,)(,t k j φ都可以由)(0,0t φ伸缩和平移得到。 小波分析中,对于信号有不同分辨率的表示,当用较低分辨率来表示原始信号时,会丢失细节信息,需要找到一个函数来描述这种信息,该函数称之为小波函数。基本的小波函数定义如下: [0,1/2)[1/2,1)1,01/2()()()1,1/210,t t X t X t t ψ≤

matlab多项式

matlab多项式 10.1 根 找出多项式的根,即多项式为零的值,可能是许多学科共同的问题,。MA TLAB求解这个问题,并提供其它的多项式操作工具。在 MA TLAB里,多项式由一个行向量表示,它的系数是按降序排列。例如,输入多项式x4-12x3+0x2+25x+116 ? p=[1-12025116] p = 1-12025116 注意,必须包括具有零系数的项。除非特别地辨认,MA TLAB无法知道哪一项为零。给出这种形式,用函数roots找出一个多项式的根 。 ? r=roots(p) r = 11.7473 2.7028 -1.2251 + 1.4672i -1.2251 - 1.4672i 因为在MA TLAB中,无论是一个多项式,还是它的根,都是向量,MA TLAB按惯例规定,多项式是行向量,根是列向量。给出一 ? pp=poly(r) pp = 1.0e+002 * Columns 1 through 4 0.0100-0.12000.00000.2500

Column 5 1.1600 + 0.0000i ? pp=real(pp) %throw away spurious imaginary part pp = 1.0000-1 2.00000.000025.0000116.0000 因为MA TLAB无隙地处理复数,当用根重组多项式时,如果一些根有虚部,由于截断误差,则poly的结果有一些小的虚部,这是很普 通的。消除虚假的虚部,如上所示,只要使用函数real抽取实部。 10.2 乘法 函数conv支持多项式乘法(执行两个数组的卷积)。考虑两个多项式a(x)=x3+2x2+3x+4和b(x)= x3+4x2+9x+16的乘积: ? a=[1234] ;b=[14916]; ? c=conv(a , b) c = 162050758464 结果是c(x)=x6+6x5+20x4+50x3+75x2+84x+64。两个以上的多项式的乘法需要重复使用conv。 10.3 加法 对多项式加法,MA TLAB不提供一个直接的函数。如果两个多项式向量大小相同,标准的数组加法有效。把多项式a(x)与上面给出的 b(x)相加。 ? d=a+b d =

相关文档
相关文档 最新文档