MATLAB语言基础与应用第二版第5章 习题答案.docx
《MATLAB语言基础与应用第二版第5章 习题答案.docx》由会员分享,可在线阅读,更多相关《MATLAB语言基础与应用第二版第5章 习题答案.docx(17页珍藏版)》请在冰豆网上搜索。
![MATLAB语言基础与应用第二版第5章 习题答案.docx](https://file1.bdocx.com/fileroot1/2023-2/21/afd964e2-e1a1-49c1-9f13-471b8e91eddc/afd964e2-e1a1-49c1-9f13-471b8e91eddc1.gif)
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经典公式求解示意图