MATLAB语言基础与应用第二版第5章 习题答案.docx

上传人:b****7 文档编号:10635198 上传时间:2023-02-22 格式:DOCX 页数:17 大小:178.86KB
下载 相关 举报
MATLAB语言基础与应用第二版第5章 习题答案.docx_第1页
第1页 / 共17页
MATLAB语言基础与应用第二版第5章 习题答案.docx_第2页
第2页 / 共17页
MATLAB语言基础与应用第二版第5章 习题答案.docx_第3页
第3页 / 共17页
MATLAB语言基础与应用第二版第5章 习题答案.docx_第4页
第4页 / 共17页
MATLAB语言基础与应用第二版第5章 习题答案.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

MATLAB语言基础与应用第二版第5章 习题答案.docx

《MATLAB语言基础与应用第二版第5章 习题答案.docx》由会员分享,可在线阅读,更多相关《MATLAB语言基础与应用第二版第5章 习题答案.docx(17页珍藏版)》请在冰豆网上搜索。

MATLAB语言基础与应用第二版第5章 习题答案.docx

MATLAB语言基础与应用第二版第5章习题答案

第5章习题与答案

5.1用矩阵三角分解方法解方程组

解答:

>>A=[21-1;4-13;69-1]

A=

21-1

4-13

69-1

>>b=[141820];

b=

141820

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

L=

1.000000

0.66671.00000

0.33330.28571.0000

U=

6.00009.0000-1.0000

0-7.00003.6667

00-1.7143

P=

001

010

100

>>y=backsub(L,P*b’)

y=

20.00004.66676.0000

>>x=backsub(U,y)

x=

6.5000-2.5000-3.5000

5.2Cholesky分解方法解方程组

解答:

>>A=[323;220;3012]

A=

323

220

3012

>>b=[5;3;7]

b=

5

3

7

>>L=chol(A)

L=

1.73211.15471.7321

00.8165-2.4495

001.7321

>>y=backsub(L,b)

y=

-11.687115.79864.0415

>>x=backsub(L',y)

x=

-6.747528.891749.9399

5.3设某实验数据如下:

0

0.5

1

1.5

2

2.5

2.0

1.0

0.9

0.6

0.4

0.3

用最小二乘法求拟合曲线。

解答:

观察数据点图形

>>x=0:

0.5:

2.5

x=

00.50001.00001.50002.00002.5000

>>y=[2.01.10.90.60.40.3]

y=

2.00001.10000.90000.60000.40000.3000

>>plot(x,y)

图5.1离散点分布示意图

从图5.1观察数据点分布,用二次曲线拟合。

>>x=0:

0.5:

2.5

x=

00.50001.00001.50002.00002.5000

>>y=[2.01.10.90.60.40.3]

y=

2.00001.10000.90000.60000.40000.3000

>>plot(x,y)

>>orthpolyfit(x,y,2)

ans=

0.2857-1.33711.9000

于是得到的二次拟合曲线方程为

>>xx=-1:

0.01:

3;

>>pp=orthpolyfit(x,y,2);

>>yy=polyval(pp,xx);

>>plot(xx,yy)

>>holdon

>>scatter(x,y,'k*')

图5.2二次曲线拟合示意图

5.4已知函数

的观测数据为

-2

0

4

5

5

1

-3

1

试构造不超过三次的插值多项式,并计算

的近似值。

解答:

使用MATLAB工具箱

图5.3插值工具箱示意图

LinearmodelPoly3:

f(x)=p1*x^3+p2*x^2+p3*x+p4

Coefficients:

p1=0.119

p2=-0.07143

p3=-2.619

p4=1

>>p=[p1p2p3p4];

>>polyval(p,-1)

ans=

3.4286

=3.4286.

5.5用最小二乘方法对下表中的数据用经验公式

进行拟合

1

2

3

4

5

6

7

8

9

10

2650

1940

1495

1090

765

540

430

290

225

205

解答:

经验公式

首先线性化,令

图5.4(a)数据点分布图

1

2

3

4

5

6

7

8

9

10

7.8823

7.5704

7.3099

6.9939

6.6399

6.2916

6.0638

5.6699

5.4161

5.2983

对数据点

进行分析,

图5.4(b)线性化数据点分布图

对图5.4(b)数据点进行线性拟合

>>c=linearfit(x,yp,1)

c=

-0.30118.1694

于是

,求得

于是所求的函数为

,拟合示意图如下。

图5.4(c)数据点拟合示意图

5.6使用数值方法求函数

处的导数值。

的函数值如下表中:

1.0

1.1

1.2

1.3

1.4

0.2500

0.2268

0.2066

0.1890

0.1736

解答:

在MATLAB命令行窗口中输入

>>x=[1.01.11.21.31.4];

>>y=[0.25000.22680.20660.18900.1736];

>>[A,df1]=npointdiff(x,y,1.1);[A,df2]=npointdiff(x,y,1.2);[A,df3]=npointdiff(x,y,1.3);[df1;df2;df3]

ans=

-0.2320

-0.2170

-0.2033

5.7用Romberg方法计算积分

,要求结果保留5位小数。

解答:

编写被积函数M文件myfun07.m

functionf=myfun07(x)

f=sin(x)./x;

参考EXAMP5008,修改romberg函数如下

function[s,n]=romberg(f,a,b,Eps)

ifnargin<4

Eps=1e-6;

end

s=1;

s0=0;

k=2;

t=[];

t(1,1)=(b-a)*(feval(f,a)+feval(f,b))/2;

whileabs(s-s0)>Eps

h=(b-a)/2^(k-1);

w=0;

ifh~=0

fori=1:

2^(k-1)-1

w=w+feval(f,a+i*h);

end

t(k,1)=h*(feval(f,a)/2+w+feval(f,b)/2);

forj=2:

k

fori=1:

(k-j+1)

t(i,j)=(4^(j-1)*t(i+1,j-1)-t(i,j-1))/(4^(j-1)-1);

end

end

s=t(1,k);

s0=t(1,k-1);

k=k+1;

n=k;

else

s=s0

n=-k

end

end

在命令行中调用romberg函数:

>>y=romberg('myfun07',1,2);vpa(y,5)

ans=0.65933

5.8求矩阵

的全部特征值及其对应的特征向量。

解答:

在MATLAB命令行窗口中输入

>>A=[1.01.00.5;1.01.00.25;0.50.252.0];

>>[VD]=eig(A)

V=

0.72120.44430.5315

-0.68630.56210.4615

-0.0937-0.69760.7103

D=

-0.016600

01.48010

102.5365

5.9使用Euler方法解初值问题

,计算结果保留6位小数。

解答:

编写右端向量函数M文件myfun11.m

functionf=myfun10(x,y)

f=-y-x.*y.*y;

利用EXAMP5014,在命令行中调用euler函数

[xy]=euler('myfun10',0,1,1,0.1);formatlong;y=vpa(y,6)

y=

[1.0,0.9,0.8019,0.708849,0.62289,0.545081,0.475718,0.414567,0.36108,0.314542,0.274183]

5.10求解二阶微分方程的初值问题

解答:

,原问题化为一阶方程组

编写右端向量函数M文件myfun11.m

functiony=myfun11(x,w)

y=zeros(2,1);

%y=w

(1)

%z=w

(2)

y

(1)=w

(2);

y

(2)=x+w

(1);

在命令行中调用ode45函数求原函数及导函数:

[x,y]=ode45(@dy,[01],[01]);x=x',z=y';y=z(1,:

),yy=z(2,:

x=

Columns1through15

00.00010.00010.00020.00020.00050.00070.00100.00120.00250.00370.00500.00620.01250.0188

Columns16through30

0.02510.03130.05630.08130.10630.13130.15630.18130.20630.23130.25630.28130.30630.33130.3563

Columns31through45

0.38130.40630.43130.45630.48130.50630.53130.55630.58130.60630.63130.65630.68130.70630.7313

Columns46through57

0.75630.78130.80630.83130.85630.88130.90630.93130.94850.96570.98281.0000

y=

Columns1through15

00.00010.00010.00020.00020.00050.00070.00100.00120.00250.00370.00500.00620.01250.0188

Columns16through30

0.02510.03140.05640.08150.10670.13210.15760.18330.20930.23550.26200.28880.31600.34350.3715

Columns31through45

0.40000.42890.45840.48840.51900.55020.58210.61460.64800.68200.71690.75260.78930.82680.8653

Columns46through57

0.90480.94530.98691.02961.07351.11861.16491.21261.24601.28021.31491.3504

yy=

Columns1through15

1.00001.00001.00001.00001.00001.00001.00001.00001.00001.00001.00001.00001.00001.00021.0004

Columns16through30

1.00061.00101.00321.00661.01131.01731.02451.03301.04271.05381.06611.07971.09461.11081.1283

Columns31through45

1.14721.16741.18901.21191.23621.26191.28901.31761.34761.37911.41201.44651.48251.52001.5591

Columns46through57

1.59991.64221.68621.73191.77931.82841.87931.93201.96922.00732.04632.0862

作图

plot(x,y,'k-',x,yy,'k*');

title('SolutionofODEswithode45')

legend('primitivefunction','derivedfunction')

图形结果如下:

图5.5二阶微分方程求解示意图

5.11取步长

,用经典公式求解初值问题

解答:

参考EXAMP5016,编写右端函数M文件myfun12.m

functionf=myfun12(x,y)

f=2*x*y;

修改函数rungekutta如下

function[xx,yy]=rungekutta(f,a,b,y0,h)

%fisthefunctionenteredasastring'f'

%a,baretheleftandrightendpoints

%yaistheinitialcondition

%histhestep

x=a:

h:

b;

n=length(x);

y=zeros(1,n);

y

(1)=y0;

fori=1:

n-1

k1=feval(f,x(i),y(i));

k2=feval(f,x(i)+h/2,y(i)+h/2*k1);

k3=feval(f,x(i)+h/2,y(i)+h/2*k2);

k4=feval(f,x(i+1),y(i)+h*k3);

y(i+1)=(k1+2*k2+2*k3+k4)*h/6+y(i);

end

xx=x;

yy=y;

ey=exp(x.*x)

plot(xx,yy,'kp',xx,ey,'k*');

xlabel('IndependentVariablex'),ylabel('DependentVariabley')

title('SolutionofODEwithRunge-Kuttamethod')

legend('numalsolution','exactsolution')

在命令行中调用rungekutta函数:

>>[xy]=rungekutta('myfun12',0,1,1,0.1)

ey=

1.00001.01011.04081.09421.17351.28401.43331.63231.89652.24792.7183

x=

00.10000.20000.30000.40000.50000.60000.70000.80000.90001.0000

y=

1.00001.01011.04081.09421.17351.28401.43331.63231.89652.24792.7183

图形结果如下:

图5.6经典公式求解示意图

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1