微分⽅程的数值解法与程序实现pdf_【MATLB数值】—数值
计算
1、多项式
(1)多项式表⽰⽅法
多项式
可以⽤向量表⽰为:y=[1 13 0 5 12];
对于缺少幂次项系数为0;
(2)多项式的运算
多项式乘除运算
计算代码:
clear
clc
%多项式相乘conv
u=[2 4 5 6];%多项式
v=[10 20 30];%多项式
p=[1 2 3];%多项式
w=conv(u,v) %conv为多项式相乘函数,也可以嵌套使⽤;
m=conv(conv(u,p),v)
%多项式相除deconv
[q,r]=deconv(w,v) %q为商,r为余数;
结果:
w =
20 80 190 280 270 180
m =
20 120 410 900 1400 1560 1170 540
q =
2 4 5 6
r =
0 0 0 0 0 0
多项式的导函数
k=polyder(p),返回多项式p的导函数;
k=polyder(a,b),返回多项式a乘以b的导函数;
linspace函数调用的格式为
[q,d]=polyder(b,a),返回多项式b整除a的导函数,其分⼦返回给q,分母为d;
clear
clc
x=[1 2 3 4];
y=[1 2 3 4];
z=polyder(x,y)
z =
6 20 40 60 50 24
多项式求值
y=polyval(p,x),代数多项式求值,若x为⼀数值,则求在该点的值;若为向量、矩阵,则求向量、矩阵中的每⼀个值;
y=polyvalm(p,x),矩阵多项式求值,要求x为⽅阵;
p=[1,2,3];
x=1:5;
y=polyval(p,x)
y =
6 11 18 2
7 38
多项式的根
函数roots:可以求出多项式等于0的根;
函数poly:可以通过多项式等于0的根,求出多项式;
p=[1 2 1];
r=roots(p) %求p的根
v=poly(r) %求r根的多项式
r =
-1
-1
v =
1 2 1
2、曲线拟合
曲线拟合⽤⼀个⽐较简单的函数去逼近⼀个未知的函数,曲线拟合最优的标准采⽤最⼩⼆乘法原理,拟合的结果使得误差的平⽅和最⼩。在MATLAB上最常采⽤polyfit函数来求最⼩⼆乘拟合多项式的系数,再⽤polyval函数求出多项式在所给出点的值;
x=linspace(0,2*pi,50);
y=cos(x);
p=polyfit(x,y,6);
t=linspace(0,2*pi,50);
y1=polyval(p,t);
plot(x,y,t,y1,'r*')
从图像上可以看出拟合⽐较好,红⾊星号都在曲线上;
3、数据插值
(1)⼀维数据插值
插值函数:yi=interp1(x,y,xi,method)
根据在x,y处的值,计算函数在xi处的值,其中xi的值不能⼤于x的值;
method插值⽅法:linear(线性插值)、nearest(最近点插值)、cubic(3次多项式插值)、spline(3次样条插值);例2:下⾯为1900—1990每隔10年的⼈⼝普查数据:
t=1900:10:1990;
p=[75 91 105 123 131 150 179 203 226 249]
求在1985年⼈⼝数值;
t=1900:10:1990;
p=[75 91 105 123 131 150 179 203 226 249];
yi=interp1(t,p,1985)
得出1985年的⼈⼝数为:
yi =
237.5000
估计1900—2000年⼈⼝数值
t=1900:10:1990;
p=[75 91 105 123 131 150 179 203 226 249];
xi=1900:2000;
yi=interp1(t,p,xi,'spline');
plot(t,p,':o',xi,yi,'-r')
(2)⼆维数据插值
插值函数:Z1=interp2(X,Y,Z,XI,YI,method)
X,Y为原始采样点,Z为对应的采样值,XI,YI表⽰欲插值的点,method为插值⽅法与⼀维插值⽅法⼀样;例3:为函数peaks插⼊更多的线条;
[X,Y]=meshgrid(-4:0.25:4);
Z=peaks(X,Y);
[XI,YI]=meshgrid(-4:0.125:4);
ZI=interp2(X,Y,Z,XI,YI);
mesh(X,Y,Z)
hold on
mesh(XI,YI,ZI+20)
4、数值微积分
(1)数值微分
在MATLAB中没有直接求数值导数的函数,只有计算向前差分的函数diff,其调⽤格式为:
DX=diff(X):计算向量X的向前差分,DX(i)=X(i+1)-X(i),-1;
DX=diff(X,n):计算X的n价向前差分;
DX=diff(A,n,dim):计算矩阵A的n价差分,dim=1(默认值)
x=[3 2 1];
dx=diff(x)
dx =
-1 -1
(2)数值积分
被积函数是解析式
MATLAB有两种函数求解定积分,调⽤格式为:
quad(函数,a,b,tol,trace)
quadl(函数,a,b,tol,trace)
其中,a为下限,b为上限,tol为精度,trace是否展现积分过程;
f=inline('1./(x.^3-2*x-5)');
y=quad(f,0,2)
y1=quadl(f,0,2)
y =
-0.4605
y1 =
-0.4605
被积函数为表格定义
⽤trapz(x,y)来进⾏计算,x为向量,y为x的函数;
x=0:0.01:1;
y=exp(-x.^2);
trapz(x,y)
ans =
0.7468
⼆重积分数值求解
MATLAB提供的函数为:
y=dblquad(f,a,b,c,d,tol,trace),
function f= fan(x,y)
f=x+y;
end
y=dblquad('fan',0,2,0,2)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论