matlab答案第六章

更新时间:2023-10-24 16:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第六章

1. 利用MATLAB提供的randn函数生成符合正态分布的10×5随机矩阵A,进行如下操作:

(1) A各列元素的均值和标准方差。 (2) A的最大元素和最小元素。

(3) 求A每行元素的和以及全部元素之和。 (4) 分别对A的每列元素按升序、每行元素按降序排列。 答:

clear all; close all; clc; A=randn(10, 5);

meanA=mean(A); %(1)A各列元素的均值 stdA=std(A); %(1)A各列元素的标准方差 maxA=max(max(A)); %(2)A的最大元素 minA=min(min(A)); %(2)A的最小元素 rowsumA=sum(A, 2); %(3)A每行元素的和 sumA=sum(rowsumA); %(3)A全部元素之和 sort1=sort(A); %(4)A的每列元素按升序排列

sort2=sort(A, 2, 'descend'); %(4)A的每行元素按降序排列

2. 按要求对指定函数进行插值和拟合。 (1) 按表6.1用3次样条方法插值计算0~90D范围内整数点的正弦值和0~75D范围内整数点的正切值,然后用5次多项式拟合方法计算相同的函数值,并将两种计算结果进行比较。

表6.1 特殊角的正弦和正切值表 α度 0 15 30 45 60 75 90 sinα 0 0.2588 0.5000

0.7071 0.8660 0.9659 1.0000 tanα 0 0.2679 0.5774 1.0000 1.7320 3.7320

(2) 按表6.2用3次多项式方法插值计算1~100之间整数的平方根。

表6.2 1~100内特殊值的平方根表

N 1 4 9 16 25 36 49 64 81 100

N的平方根 1 2 3 4 5 6 7 8 9 10 答:

(1) 程序设计: clear all; close all; clc; alpha1=0:15:90;

sin_alpha1=sin(alpha1*pi/180); %精确正弦值

plot(alpha1, sin_alpha1, 'k:p'); hold on; %绘精确正弦曲线 alpha2=0:90;

sin_Y1=interp1(alpha1, sin_alpha1, alpha2, 'spline'); %3次样条正弦插值 plot(alpha2, sin_Y1, 'r-*'); hold on; %绘3次样条插值正弦曲线

P1=polyfit(alpha1, sin_alpha1, 5); %5次多项式拟合

sin_Y2= polyval(P1, alpha2); %5次多项式求值

plot(alpha2, sin_Y2, 'b-o'); %绘5次多项式插值正弦曲线

legend('精确正弦值', '3次样条正弦插值', '5次多项式正弦插值'); title('正弦值比较'); alpha3=0:15:75;

tan_alpha3=tan(alpha3*pi/180); %精确正切值

figure, plot(alpha3, tan_alpha3, 'k:p'); hold on; %绘精确正切曲线 alpha4=0:75;

tan_Y1=interp1(alpha3, tan_alpha3, alpha4, 'spline'); %3次样条正切插值 plot(alpha4, tan_Y1,'r-*'); hold on; %绘3次样条正切曲线

P2=polyfit(alpha3, tan_alpha3, 5); %5次多项式拟合

tan_Y2= polyval(P2, alpha4); %5次多项式求值

plot(alpha4, tan_Y2, 'b-o'); %绘5次多项式插值正弦曲线

legend('精确正切值', '3次样条正切插值', '5次多项式正切插值'); title('正切值比较'); (2)

程序设计:

clear all; close all; clc;

X=[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]; Y=1:10;

X1=1:100; Y1=interp1(X, Y, X1, 'cubic');

plot(X, Y, 'r:o'); hold on; %绘精确平方根曲线

plot(X1, Y1, 'k-x'); %绘3次多项式插值平方根曲线

legend('精确平方根', '3次多项式插值');

3. 已知一组实验数据如表6.3所示。

表6.3 一组实验数据

i 1 2 3 4 5

Xi 165 123 150 123 141

Yi 187 126 172 125 148

求它的线性拟合曲线。 答:

程序设计:

clear all; close all; clc; x=[165, 123, 150, 123, 141]; y=[187, 126, 172, 125, 148]; P=polyfit(x, y, 3) 运行结果: P =

1.0e+003 *

-0.0000 0.0013 -0.1779 8.4330 所以它的线性拟合曲线为:P(x)=1.3x2-177.9x+8433

4. 已知多项式P21(x)=3x+2,P2(x)=5x?x+2,P3(x)=x2?0.5,求 : (1) P(x)=P1(x)P2(x)P3(x)。 (2) P(x)=0的全部根。

(3) 计算xi=0.2i (i=0,1,2,…,10)各点上的P(xi)。 答:

(1) 程序设计:

clear all; close all; clc;

P1=[0, 3, 2]; P2=[5, -1, 2]; P3=[1, 0, -0.5];

P=conv(conv(P1, P2), P3) 运行结果: P = 0 15.0000 7.0000 -3.5000 0.5000 -2.0000 -2.0000

所以P(x)=15x5+7x4-3.5x3+0.5x2-2x-2

(2) 程序设计: r=roots(P) 运行结果: r = 0.7071

0.1000 + 0.6245i 0.1000 - 0.6245i -0.7071 -0.6667

(3) 程序设计: i=0:10; xi=0.2*i;

Pxi=polyval(P, xi) 运行结果: Pxi =

-2.0000 -2.3920 -2.6112 -1.7024 2.7104 15.0000 42.1120 94.1408 184.9056 332.5264 560.0000

5. 求函数在指定点的数值导数。

(1)f(x)?sin2x?cos2x,x??,???

64,3,2 (2)f(x)?x2?1,x?1,2,3

答:

(1) 程序设计:

clear all; close all; clc; x=[pi/6, pi/4, pi/3];

f=inline('sin(x).^2+cos(x).^2');

dx=diff(f([x, 5*pi/12]))/(pi/12) %可参见教材第157页例6.19 运行结果: dx = 0 0 0

%当x=pi/2时单独计算 x=pi/2;

f=inline('sin(x).^2+cos(x).^2'); dx=diff(f([x, pi]))/(pi/2) dx =

(2) 程序设计:

7. 分别用矩阵求逆、矩阵除法以及矩阵分clear all; close all; clc; x=1:3;

f=inline('sqrt(x.^2+1)'); dx=diff(f([x, 4])) 运行结果: dx =

0.8219 0.9262 0.9608

6. 求数值积分。

(1)??0sin5xsin5xdx ?1 (2)1?x2?1dx

1?x4 (3)?xsinx

?01?cos2xdx答:

(1) 程序设计:

clear all; close all; clc;

f=inline('sin(x).^5.*sin(5*x)'); qf=quad(f, 0, pi) 运行结果: qf = 0.0982

(2) 程序设计:

clear all; close all; clc;

f=inline('(1+x.^2)./(1+x.^4)'); qf=quad(f, -1, 1) 运行结果: qf = 2.2214

(3) 程序设计:

clear all; close all; clc;

f=inline('x.*sin(x)./(1+cos(x).^2)'); qf=quad(f, 0, pi) 运行结果: qf = 2.4674

解求线性方程组的解。 ?2x?3y?5z?10 ( 1)??3x?7y?4z?3 ??x?7y?z?5

?5x1?x2?x3?1 ?(?x1?3x3?x 2)?4?2 ??x1?x2?5x4?3 ??2x3?4x4??1

答:

(1) 程序设计: 方法1:矩阵求逆法

clear all; close all; clc;

A=[2, 3, 5; 3, 7, 4; 1, -7, 1]; b=[10; 3; 5]; x=inv(A)*b 运行结果: x = -1.8060 -0.5373 3.0448

方法2:左除运算符法

clear all; close all; clc;

A=[2, 3, 5; 3, 7, 4; 1, -7, 1]; b=[10; 3; 5]; x=A\\b

运行结果: x = -1.8060 -0.5373 3.0448

方法3:矩阵LU分解法

clear all; close all; clc;

A=[2, 3, 5; 3, 7, 4; 1, -7, 1]; b=[10; 3; 5]; [L, U]=lu(A); x=U\\(L\\b) 运行结果: x =

-1.8060 -0.5373 3.0448

(2) 程序设计: 方法1:矩阵求逆法

clear all; close all; clc;

A=[5, 1, -1, 0; 1, 0, 3, -1;-1,-1,0, 5; 0, 0, 2, 4]; b=[1; 2; 3; -1]; x=inv(A)*b 运行结果: x = 1.4000 -5.9000 0.1000 -0.3000

方法2:左除运算符法

clear all; close all; clc;

A=[5, 1, -1, 0; 1, 0, 3, -1;-1,-1,0, 5; 0, 0, 2, 4]; b=[1; 2; 3; -1]; x=A\\b

运行结果: x = 1.4000 -5.9000 0.1000 -0.3000

方法3:矩阵LU分解法

clear all; close all; clc;

A=[5, 1, -1, 0; 1, 0, 3, -1;-1,-1,0, 5; 0, 0, 2, 4]; b=[1; 2; 3; -1]; [L, U]=lu(A); x=U\\(L\\b) 运行结果: x = 1.4000 -5.9000 0.1000 -0.3000

8. 求下列方程的根。

sinx?dxy(1)x??0在x0?0.5附近的根?x?y(0)?0(2)(sin2x)e?0.1x?0.5x?0在x0?1.5附近的根

答:

(1) 程序设计:

clear all; close all; clc; f=inline('x-sin(x)./x'); x=fzero(f, 0.5) 运行结果: x = 0.8767

(2) 程序设计:

clear all; close all; clc;

f=inline('(sin(x).^2).*exp(-0.1.*x)-0.5.*abs(x)'); x=fzero(f, 1.5) 运行结果: x = 1.6738

9. 求非线性方程组在(0.5,0.5)附近的数值解。 ? x?0.6sinx?0.3cosy?0? y?0.6cosx?0.3siny?0?

答:

函数文件fxy.m: function f=fxy(u) x=u(1); y=u(2);

f(1)=x-0.6*sin(x)-0.3*cos(y); f(2)=y-0.6*cos(x)+0.3*sin(y); 在命令窗口输入以下命令: clear all; close all; clc; x=fsolve('fxy', [0.5, 0.5], optimset('Display', 'off')) 运行结果: x =

0.6354 0.3734

10. 求常微分方程的数值解。

dy2x ???2x?

答:

建立函数文件funx.m: function yp=funx(x, y) yp=2*x*(1+1/y);

求解微分方程的命令文件: clear all; close all; clc; x0=0; xf=20; y0=0+eps;

[x, y]=ode45('funx', [x0, xf], y0); plot(x, y, 'r');

本文来源:https://www.bwwdw.com/article/vc92.html

Top