修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx

上传人:b****4 文档编号:6344331 上传时间:2023-05-06 格式:DOCX 页数:19 大小:100.92KB
下载 相关 举报
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第1页
第1页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第2页
第2页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第3页
第3页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第4页
第4页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第5页
第5页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第6页
第6页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第7页
第7页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第8页
第8页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第9页
第9页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第10页
第10页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第11页
第11页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第12页
第12页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第13页
第13页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第14页
第14页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第15页
第15页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第16页
第16页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第17页
第17页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第18页
第18页 / 共19页
修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx

《修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx》由会员分享,可在线阅读,更多相关《修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx(19页珍藏版)》请在冰点文库上搜索。

修订版第章MATLAB数值计算例题源程序汇总精Word格式.docx

f(x)

0.4846555

0.4937542

0.5027498

0.5116683

x=0.46:

0.01:

0.49;

%给出x,f(x)

f=[0.4846555,0.4937542,0.5027498,0.5116683];

formatlong

interp1(x,f,0.472)%用默认方法,即线性插值方法计算f(x)

interp1(x,f,0.472,'

nearest'

)%用最近点插值方法计算f(x)

spline'

)%用3次样条插值方法计算f(x)

cubic'

)%用3次多项式插值方法计算f(x)

formatshort

例6.8某检测参数f随时间t的采样结果如表6.2,用数据插值法计算t=2,7,12,17,22,17,32,37,42,47,52,57时的f值。

表6.2检测参数f随时间t的采样结果

t

5

10

15

20

25

30

f

3.1025

2.256

879.5

1835.9

2968.8

4136.2

5237.9

35

40

45

50

55

60

65

6152.7

6725.3

6848.3

6403.5

6824.7

7328.5

7857.6

T=0:

5:

65;

X=2:

57;

F=[3.2015,2.2560,879.5,1835.9,2968.8,4136.2,5237.9,6152.7,...

6725.3,6848.3,6403.5,6824.7,7328.5,7857.6];

F1=interp1(T,F,X)%用线性插值方法插值

F1=interp1(T,F,X,'

)%用最近点插值方法插值

)%用3次样条插值方法插值

)%用3次多项式插值方法插值

例6.9设z=x2+y2,对z函数在[0,1]×

[0,2]区域内进行插值。

x=0:

0.1:

1;

y=0:

0.2:

2;

[X,Y]=meshgrid(x,y);

%产生自变量网格坐标

Z=X.^2+Y.^2;

%求对应的函数值

interp2(x,y,Z,0.5,0.5)%在(0.5,0.5)点插值

interp2(x,y,Z,[0.50.6],0.4)%在(0.5,0.4)点和(0.6,0.4)点插值

interp2(x,y,Z,[0.50.6],[0.40.5])%在(0.5,0.4)点和(0.6,0.5)点插值

%下一命令在(0.5,0.4),(0.6,0.4),(0.5,0.5)和(0.6,0.5)各点插值

interp2(x,y,Z,[0.50.6]'

[0.40.5])

例6.10某实验对一根长10米的钢轨进行热源的温度传播测试。

用x表示测量点(米),用h表示测量时间(秒),用T表示测得各点的温度(℃),测量结果如表6.2所示。

表6.3钢轨各点温度测量值

Tx

h

02.557.510

9514000

884832126

6764544841

试用3次多项式插值求出在一分钟内每隔10秒、钢轨每隔0.5米处的温度。

2.5:

10;

h=[0:

30:

60]'

;

T=[95,14,0,0,0;

88,48,32,12,6;

67,64,54,48,41];

xi=[0:

0.5:

10];

hi=[0:

10:

temps=interp2(x,h,T,xi,hi,'

);

mesh(xi,hi,temps);

例6.11用一个3次多项式在区间[0,2π]内逼近函数

X=linspace(0,2*pi,50);

Y=sin(X);

P=polyfit(X,Y,3)%得到3次多项式的系数和误差

X=linspace(0,2*pi,20);

Y1=polyval(P,X)

plot(X,Y,'

:

o'

X,Y1,'

-*'

例6.12设

(1)求f(x)+g(x)、f(x)-g(x)。

(2)求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)

conv(f,g)%求f(x)*g(x)

[Q,r]=deconv(f,g)%求f(x)/g(x),商式送Q,余式送r。

例6.13求有理分式的导数。

P=[3,5,0,-8,1,-5];

Q=[10,5,0,0,6,0,0,7,-1,0,-100];

[p,q]=polyder(P,Q)

例6.14已知多项式x4+8x3-10,分别取x=1.2和一个2×

3矩阵为自变量计算该多项式的值。

A=[1,8,0,0,-10];

%4次多项式系数

x=1.2;

%取自变量为一数值

y1=polyval(A,x)

x=[-1,1.2,-1.4;

2,-1.8,1.6]%给出一个矩阵x

y2=polyval(A,x)%分别计算矩阵x中各元素为自变量的多项式之值

例6.15仍以多项式x4+8x3-10为例,取一个2×

2矩阵为自变量分别用polyval和polyvalm计算该多项式的值。

%多项式系数

x=[-1,1.2;

2,-1.8]%给出一个矩阵x

y1=polyval(A,x)%计算代数多项式的值

y2=polyvalm(A,x)%计算矩阵多项式的值

例6.16求多项式x4+8x3-10的根。

x=roots(A)

例6.17已知

(1)计算f(x)=0的全部根。

(2)由方程f(x)=0的根构造一个多项式g(x),并与f(x)进行对比。

P=[3,0,4,-5,-7.2,5];

X=roots(P)%求方程f(x)=0的根

G=poly(X)%求多项式g(x)

例6.18设x由[0,2π]间均匀分布的10个点组成,求

的1~3阶差分。

X=linspace(0,2*pi,10);

DY=diff(Y);

%计算Y的一阶差分

D2Y=diff(Y,2);

%计算Y的二阶差分,也可用命令diff(DY)计算

D3Y=diff(Y,3);

%计算Y的三阶差分,也可用diff(D2Y)或diff(DY,2)

例6.19设

用不同的方法求函数f(x)的数值导数,并在同一个坐标系中做出f'

(x)的图像。

f=inline('

sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2'

g=inline('

(3*x.^2+4*x-1)./sqrt(x.^3+2*x.^2-x+12)/2+1/6./(x+5).^(5/6)+5'

x=-3:

3;

p=polyfit(x,f(x),5);

%用5次多项式p拟合f(x)

dp=polyder(p);

%对拟合多项式p求导数dp

dpx=polyval(dp,x);

%求dp在假设点的函数值

dx=diff(f([x,3.01]))/0.01;

%直接对f(x)求数值导数

gx=g(x);

%求函数f的导函数g在假设点的导数

plot(x,dpx,x,dx,'

.'

x,gx,'

-'

%作图

例6.20用两种不同的方法求:

先建立一个函数文件ex.m:

functionex=ex(x)

ex=exp(-x.^2);

然后在MATLAB命令窗口,输入命令:

I=quad('

ex'

0,1)%注意函数名应加字符引号

I=quadl('

0,1)

例6.21用trapz函数计算:

X=0:

Y=exp(-X.^2);

trapz(X,Y)

例6.22计算二重定积分

(1)建立一个函数文件fxy.m:

functionf=fxy(x,y)

globalki;

ki=ki+1;

%ki用于统计被积函数的调用次数

f=exp(-x.^2/2).*sin(x.^2+y);

(2)调用dblquad函数求解。

ki=0;

I=dblquad('

fxy'

-2,2,-1,1)

ki

例6.23给定数学函数

x(t)=12sin(2π×

10t+π/4)+5cos(2π×

40t)

取N=128,试对t从0~1秒采样,用FFT作快速傅立叶变换,绘制相应的振幅-频率图。

N=128;

%采样点数

T=1;

%采样时间终点

t=linspace(0,T,N);

%给出N个采样时间ti(i=1:

N)

x=12*sin(2*pi*10*t+pi/4)+5*cos(2*pi*40*t);

%求各采样点样本值x

dt=t

(2)-t

(1);

%采样周期

f=1/dt;

%采样频率(Hz)

X=fft(x);

%计算x的快速傅立叶变换X

F=X(1:

N/2+1);

%F(k)=X(k)(k=1:

N/2+1)

f=f*(0:

N/2)/N;

%使频率轴f从零开始

plot(f,abs(F),'

)%绘制振幅-频率图

xlabel('

Frequency'

ylabel('

|F(k)|'

例6.24用直接解法求解下列线性方程组。

A=[2,1,-5,1;

1,-5,0,7;

0,2,1,-1;

1,6,-1,-4];

b=[13,-9,6,0]'

x=A\b

例6.25用LU分解求解例6.24中的线性方程组。

[L,U]=lu(A);

x=U\(L\b)

[L,U,P]=lu(A);

x=U\(L\P*b)

例6.26用QR分解求解例6.24中的线性方程组。

[Q,R]=qr(A);

x=R\(Q\b)

[Q,R,E]=qr(A);

x=E*(R\(Q\b))

例6.27用Cholesky分解求解例6.24中的线性方程组。

R=chol(A)

?

Errorusing==>

chol

Matrixmustbepositivedefinite

Jacobi迭代法的MATLAB函数文件Jacobi.m如下:

function[y,n]=jacobi(A,b,x0,eps)

ifnargin==3

eps=1.0e-6;

elseifnargin<

3

error

return

end

D=diag(diag(A));

%求A的对角矩阵

L=-tril(A,-1);

%求A的下三角阵

U=-triu(A,1);

%求A的上三角阵

B=D\(L+U);

f=D\b;

y=B*x0+f;

n=1;

%迭代次数

whilenorm(y-x0)>

=eps

x0=y;

y=B*x0+f;

n=n+1;

end

例6.28用Jacobi迭代法求解下列线性方程组。

设迭代初值为0,迭代精度为10-6。

在命令中调用函数文件Jacobi.m,命令如下:

A=[10,-1,0;

-1,10,-2;

0,-2,10];

b=[9,7,6]'

[x,n]=jacobi(A,b,[0,0,0]'

1.0e-6)

Gauss-Serdel迭代法的MATLAB函数文件gauseidel.m如下:

function[y,n]=gauseidel(A,b,x0,eps)

G=(D-L)\U;

f=(D-L)\b;

y=G*x0+f;

y=G*x0+f;

例6.29用Gauss-Serdel迭代法求解下列线性方程组。

在命令中调用函数文件gauseidel.m,命令如下:

[x,n]=gauseidel(A,b,[0,0,0]'

例6.30分别用Jacobi迭代和Gauss-Serdel迭代法求解下列线性方程组,看是否收敛。

a=[1,2,-2;

1,1,1;

2,2,1];

b=[9;

7;

6];

[x,n]=jacobi(a,b,[0;

0;

0])

[x,n]=gauseidel(a,b,[0;

有了上面这些讨论,下面设计一个求解线性方程组的函数文件line_solution.m。

function[x,y]=line_solution(A,b)

[m,n]=size(A);

y=[];

ifnorm(b)>

0%非齐次方程组

ifrank(A)==rank([A,b])

ifrank(A)==n%有惟一解

disp('

原方程组有惟一解x'

x=A\b;

else%方程组有无穷多个解,基础解系

原方程组有无穷个解,特解为x,其齐次方程组的基础解系为y'

y=null(A,'

r'

else

方程组无解'

%方程组无解

x=[];

else%齐次方程组

原方程组有零解x'

x=zeros(n,1);

%0解

ifrank(A)<

n

方程组有无穷个解,基础解系为y'

%非0解

例6.31求解方程组。

A=[1,-2,3,-1;

3,-1,5,-3;

2,1,2,-2];

b=[1;

3];

[x,y]=line_solution(A,b)

例6.32求方程组的通解。

formatrat%指定有理式格式输出

A=[1,1,-3,-1;

3,-1,-3,4;

1,5,-9,-8];

b=[1,4,0]'

[x,y]=line_solution(A,b);

x,y

formatshort%恢复默认的短格式输出

例6.33求

在x0=-5和x0=1作为迭代初值时的零点。

先建立函数文件fz.m:

functionf=fz(x)

f=x-1/x+5;

然后调用fzero函数求根。

fzero('

fz'

-5)%以-5作为迭代初值

1)%以1作为迭代初值

例6.34求下列方程组在(1,1,1)附近的解并对结果进行验证。

首先建立函数文件myfun.m。

functionF=myfun(X)

x=X

(1);

y=X

(2);

z=X(3);

F

(1)=sin(x)+y+z^2*exp(x);

F

(2)=x+y+z;

F(3)=x*y*z;

在给定的初值x0=1,y0=1,z0=1下,调用fsolve函数求方程的根。

X=fsolve('

myfun'

[1,1,1],optimset('

Display'

'

off'

例6.35求圆和直线的两个交点。

圆:

直线:

先建立方程组函数文件fxyz.m:

functionF=fxyz(X)

F

(1)=x^2+y^2+z^2-9;

F

(2)=3*x+5*y+6*z;

F(3)=x-3*y-6*z-1;

再在MATLAB命令窗口,输入命令:

X1=fsolve('

fxyz'

[-1,1,-1],optimset('

))%求第一个交点

X2=fsolve('

[1,-1,1],optimset('

))%求第二个交点

例6.36求函数

在区间(-10,1)和(1,10)上的最小值点。

首先建立函数文件fx.m:

functionf=f(x)

上述函数文件也可用一个语句函数代替:

x-1/x+5'

fminbnd('

fx'

-10,-1)%求函数在(-10,-1)内的最小值点和最小值

fminbnd(f,1,10)%求函数在(1,10)内的最小值点。

注意函数名f不用加'

例6.37设

求函数f在(0.5,0.5,0.5)附近的最小值。

建立函数文件fxyz.m:

functionf=fxyz(u)

x=u

(1);

y=u

(2);

z=u(3);

f=x+y.^2./x/4+z.^2./y+2./z;

在MALAB命令窗口,输入命令:

[U,fmin]=fminsearch('

[0.5,0.5,0.5])%求函数的最小值点和最小值

例6.38求解有约束最优化问题。

首先编写目标函数M文件fop.m。

functionf=fop(x)

f=0.4*x

(2)+x

(1)^2+x

(2)^2-x

(1)*x

(2)+1/30*x

(1)^3;

再设定约束条件,并调用fmincon函数求解此约束最优化问题。

x0=[0.5;

0.5];

A=[-1,-0.5;

-0.5,-1];

b=[-0.4;

-0.5];

lb=[0;

0];

option=optimset;

option.LargeScale='

option.Display='

[x,f]=fmincon('

fop'

x0,A,b,[],[],lb,[],[],option)

例6.39设有初值问题:

y(0)=2

试求其数值解,并与精确解相比较(精确解为y(t)=

(1)建立函数文件funt.m。

functiony=funt(t,y)

y=(y^2-t-2)/4/(t+1);

(2)求解微分方程。

t0=0;

tf=10;

y0=2;

[t,y]=ode23('

funt'

[t0,tf],y0);

%求数值解

y1=sqrt(t+1)+1;

%求精确解

plot(t,y,'

b.'

t,y1,'

r-'

%通过图形来比较

例6.40已知一个二阶线性系统的微分方程为:

其中a=2,绘制系统的时间响应曲线和相平面图。

建立一个函数文件sys.m:

functionxdot=sys(t,x)

xdot=[-2*x

(2);

x

(1)];

取t0=0,tf=20,求微分方程的解:

tf=20;

[t,x]=ode45('

sys'

[t0,tf],[1,0]);

[t,x]

subplot(1,2,1);

plot(t,x(:

2));

%解的曲线,即t-x

subplot(1,2,2);

plot(x(:

2),x(:

1))%相平面曲线,即x-x’

axisequal

例6.41设

将X转化为稀疏存储方式。

X=[2,0,0,0,0;

0,0,0,0,0;

0,0,0,5,0;

0,1,0,0,-1;

0,0,0,0,-5];

A=sparse(X)

例6.42根据表示稀疏矩阵的矩阵A,产生一个稀疏存储方式矩阵B。

A=[2,2,1;

3,1,-1;

4,3,3;

5,3,8;

6,6,12];

B=spconvert(A)

例6.43求下列三对角线性代数方程组的解。

B=[1,2,0;

1,4,3;

2,6,1;

1,6,4;

0,1,2];

%产生非0对角元素矩阵

d=[-1;

1];

%产生非0对角元素位置向量

A=spdiags(B,d,5,5)%产生稀疏存储的系数矩阵

f=[0;

5];

%方程右边参数向量

x=(inv(A)*f)'

%求解

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2