上机作业.docx

上传人:b****8 文档编号:10768637 上传时间:2023-02-22 格式:DOCX 页数:39 大小:650.68KB
下载 相关 举报
上机作业.docx_第1页
第1页 / 共39页
上机作业.docx_第2页
第2页 / 共39页
上机作业.docx_第3页
第3页 / 共39页
上机作业.docx_第4页
第4页 / 共39页
上机作业.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

上机作业.docx

《上机作业.docx》由会员分享,可在线阅读,更多相关《上机作业.docx(39页珍藏版)》请在冰豆网上搜索。

上机作业.docx

上机作业

上机作业12

1、分别用不动点迭代与Newton法求解方程3x-5^x+4=0的正根与负根2

2、用Newton法与重根计算法求解方程x-sinx=0的根.再用Steffensen’smethod加速Newton法收敛,比较结果5

上机作业28

分别用Jacobi、Seidel、Sor(w=0.8,1.1,1.2,1.3,1.4,1.5)方法求解方程组Ax=b8

上机作业320

用Newton法与最速下降法求方程组x2+2y2-2=0,x2=y在(0.8,0.7)附近的根20

上机作业425

1、用幂法与反幂法求矩阵A的按模最大、最小特征值与对应的特征向量25

2、用Householder变换求矩阵A的QR分解,并用QR方法做3次迭代25

上机作业527

目的:

观察lagrange插值的Runge现象27

上机作业627

目的:

掌握数值求积公式27

上机作业1

1、分别用不动点迭代与Newton法求解方程3x-5^x+4=0的正根与负根。

解:

1)实验原理

不动点迭代:

(1)构造不动点方程x=ϕ(x),即由方程f(x)=0等价变形为x=ϕ(x)(这样,求f(x)的零点可转化成求ϕ(x)的不动点),ϕ(x)称为迭代函数;

(2)建立迭代格式,xk+1=ϕ(xk)称为不动点迭代法。

当给定初值x0后,由迭代格式可求得数列{xk}。

如果{xk}收敛于x*,且ϕ(x)在x*连续,则x*就是方程的根。

2)不动点迭代方程:

由方程3x-5^x+4=0,构造迭代方程x=(5^x-4)/3求负根,x=log(3x+4)/log5求正根。

给定初值:

p0=1.5,p1=-1.5.

Newton迭代:

设r是f(x)=0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y=f(x)的切线L,L的方程为y=f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标x1=x0-f(x0)/f'(x0),称x1为r的一次近似值。

过点(x1,f(x1))做曲线y=f(x)的切线,并求该切线与x轴交点的横坐标x2=x1-f(x1)/f'(x1),称x2为r的二次近似值。

重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

Newton迭代方程:

x=x-(3*x-5^x+4)/(3-(5^x)*ln5);给定初值:

p0=1.5,p1=-1.5.

3)程序及结果

不动点迭代程序:

disp('不动点迭代法');

n0=100;p0=-1.5;

fori=1:

n0

p=(5^p0-4)/3;

ifabs(p-p0)<=10^(-6)

ifp<0

disp('|p-p0|=')

disp(abs(p-p0))

disp('不动点迭代法求得方程的负根为:

')

disp(p);

disp('用不动点迭代法迭代步数为:

')

disp(i);

break;

else

p0=p;

end

end

p1=1.5;

fori=1:

n0

p=(log(3*p1+4))/log(5);

ifabs(p-p1)<=10^(-6)

ifp>0

disp('|p-p1|=')

disp(abs(p-p1))

disp('用不动点迭代法求得方程的正根为:

')

disp(p);

disp('用不动点迭代法迭代步数为:

')

disp(i);

break;

else

p1=p;

end

end

Newton迭代程序:

disp('牛顿法')

n0=80;p0=1.5;

fori=1:

n0

p=p0-(3*p0-5^p0+4)/(3-log(5)*(5^p0));

ifabs(p-p0)<=10^(-6)

ifp>0

disp('|p-p0|=')

disp(abs(p-p0))

disp('用牛顿法求得方程的正根为:

')

disp(p);

disp('用不动点迭代法迭代步数为:

')

disp(i);

end

break;

else

p0=p;

end

end

p1=-1.5;

fori=1:

n0

p=p1-(3*p1-5^p1+4)/(3-log(5)*(5^p1));

ifabs(p-p1)<=10^(-6)

ifp<0

disp('|p-p1|=')

disp(abs(p-p1))

disp('用牛顿法求得方程的负根为:

')

disp(p);

disp('用不动点迭代法迭代步数为:

')

disp(i);

end

break;

else

p1=p;

end

end

ifi==n0

disp(n0)

disp('用牛顿迭代后无法求出方程的解')

end

运行结果:

结果分析:

选用不动点迭代公式x=(5^x-4)/3求负根的运行结果是收敛的,求正根发散,这是由于指数函数的存在使迭代发散。

而使用的迭代公式x=log(3x+4)/log5在求负根时发散,求正根时收敛,这是由于公式中存在对数函数。

由以上运算结果可知,Newton迭代法公式唯一,且求正负根均收敛,迭代步数明显少于不动点迭代,运算效率高。

2、用Newton法与重根计算法求解方程x-sinx=0的根.再用Steffensen’smethod加速Newton法收敛,比较结果。

解:

Newton迭代法原理:

设r是f(x)=0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y=f(x)的切线L,L的方程为y=f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标x1=x0-f(x0)/f'(x0),称x1为r的一次近似值。

过点(x1,f(x1))做曲线y=f(x)的切线,并求该切线与x轴交点的横坐标x2=x1-f(x1)/f'(x1),称x2为r的二次近似值。

重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

重根计算法原理:

在Newton迭代法的基础上改进迭代公式,使得x(n+1)=x(n)-mf(x(n))/f'(x(n)),m为根的重数。

牛顿法:

Newton迭代方程:

x=x-(x-sinx)/(1-cosx),给定初值:

x=0

程序:

disp('牛顿法')

n0=80;p0=1;

fori=1:

n0

p=p0-(p0-sin(p0))/(1-cos(p0));

ifabs(p-p0)<=10^(-6)

disp('|p-p0|=')

disp(abs(p-p0))

disp('用牛顿法求得方程的根为:

')

disp(p);

disp('用Newton法迭代步数为:

')

disp(i);

break;

else

p0=p;

end

end

ifi==n0

disp(n0)

disp('用牛顿迭代后无法求出方程的解')

end

重根计算法程序:

disp('重根计算法')

n0=80;p0=1;m=2;

fori=1:

n0

p=p0-m*(p0-sin(p0))/(1-cos(p0));

ifabs(p-p0)<=10^(-6)

disp('|p-p0|=')

disp(abs(p-p0))

disp('用重根计算法求得方程的根为:

')

disp(p);

disp('用重根计算法迭代步数为:

')

disp(i);

break;

else

p0=p;

end

end

Steffensen加速Newton法程序:

disp('Steffensen加速牛顿法')

n0=80;p0=1;i=0;p

(1)=p0;

whilei<=n0

fork=1:

2

p(k+1)=p(k)-(p(k)-sin(p(k)))/(1-cos(p(k)));

end

p1=p

(1)-(p

(2)-p

(1))^2/(p(3)-2*p

(2)+p

(1));

p=p1-(p1-sin(p1))/(1-cos(p1));

ifabs(p-p1)<=10^(-6)

disp('|p-p1|=')

disp(abs(p-p1))

disp('用Steffensen加速牛顿法求得方程的根为:

')

disp(p);

disp('用Steffensen加速Newton法迭代步数为:

')

i=i+1;

disp(i+1);

break;

else

p

(1)=p1;

end

end

运行结果:

结果分析:

由运行结果可知,Newton法收敛较慢,重根计算法效率大大提高,而Steffensen加速牛顿法效率最高,仅两次迭代就达到了要求的计算精度。

上机作业2:

分别用Jacobi、Seidel、Sor(w=0.8,1.1,1.2,1.3,1.4,1.5)方法求解方程组Ax=b。

这里

X0=[0……0]’;e=10-5

要求:

抄题,公式,程序、计算结果(终止迭代步数k、近似解x(k)),结果分析(三种迭代列表)。

实验原理:

1、雅可比迭代法(J-迭代法):

线性方程组

,可以转变为:

迭代公式

其中

,称

为求解

的雅可比迭代法的迭代矩阵。

以下给出雅可比迭代的分量计算公式,令

,由雅可比迭代公式有

,既有

,于是,解

的雅可比迭代法的计算公式为

2、高斯-赛德尔迭代法(GS-迭代法):

GS-迭代法可以看作是雅可比迭代法的一种改进,给出了迭代公式:

其余部分与雅克比迭代类似。

3、逐次超松弛迭代法(SOR-迭代法):

选取矩阵A的下三角矩阵分量并赋予参数w,将之作为分裂矩阵M,

,其中,w>0,为可选择的松弛因子,又

(1)公式构造一个迭代法,其迭代矩阵为

从而得到解

的逐次超松弛迭代法。

其中:

由此,解

的SOR-迭代法的计算公式为

(2)

观察

(2)式,可得结论:

当w=1时,SOR-迭代法为J-迭代法。

当w>1时,称为超松弛迭代法,当w<1时,称为低松弛迭代法。

Jacobi迭代法程序:

disp('用Jacobi迭代法求解线性方程组');

i=1;

i<=100;

a=[-13111111111;1-1311111111;11-131111111;111-13111111;1111-1311111;11111-131111;111111-13111;1111111-1311;11111111-131;111111111-13];

d=diag(diag(a));

l=d-tril(a);

u=d-triu(a);

d0=inv(d);

b=[-1;-1;-1;-1;-1;-1;-1;-1;-1;-1];

x0=zeros(10,1);

B=-d0*(l+u);

f=d0*b;

x=B*x0+f;

whilenorm(x-x0,inf)>=1e-5

x0=x;x=B*x0+f;i=i+1;

end

disp('方程组的解为:

');

x

disp('迭代次数:

')

i

break;

Gauss-Seidel迭代法程序:

disp('用Gauss-Seidel迭代法求解线性方程组');

i=1;

i<=100;

a=[-13111111111;1-1311111111;11-131111111;111-13111111;1111-1311111;11111-131111;111111-13111;1111111-1311;11111111-131;111111111-13];

d=diag(diag(a));

l=d-tril(a);

u=d-triu(a);

b=[-1;-1;-1;-1;-1;-1;-1;-1;-1;-1];

x0=zeros(10,1);

B=-inv(d+l)*u;

f=inv(d+l)*b;

x=B*x0+f;

whilenorm(x-x0,inf)>=1e-5

x0=x;x=B*x0+f;i=i+1;

end

disp('方程组的解为:

');

x

disp('迭代次数:

')

i

break;

Sor迭代法程序:

分别令w=0.8,1.1,1.2,1.3,1.4,1.5

disp('用Sor迭代法求解线性方程组');

w=0.8;

i=1;

i<=100;

a=[-13111111111;1-1311111111;11-131111111;111-13111111;1111-1311111;11111-131111;111111-13111;1111111-1311;11111111-131;111111111-13];

d=diag(diag(a));

l=d-tril(a);

u=d-triu(a);

b=[-1;-1;-1;-1;-1;-1;-1;-1;-1;-1];

x0=zeros(10,1);

B=inv(d+w*l)*[(1-w)*d-w*u];

f=w*inv(d+w*l)*b;

x=B*x0+f;

whilenorm(x-x0,inf)>=1e-5

x0=x;

x=B*x0+f;

i=i+1;

end

disp('松弛因子为:

');

w

disp('方程组的解为:

');

x

disp('迭代次数:

');

i

break;

运行结果:

 

 

运行结果分析:

由运行结果截屏的对比可发现,Jacobi迭代法收敛速度较慢,seidel

迭代法与松弛因子为1.1的Sor法的迭代效率一样,而w=0.8时,Sor的效率最高,随着松弛因子的增大,计算效率下降。

 

 

上机作业3

用Newton法与最速下降法求方程组x2+2y2-2=0,x2=y在(0.8,0.7)附近的根。

要求:

1)抄题;2)迭代公式(初值)或简单原

理;3)程序,结果;(打印)4)结果分析。

牛顿迭代法原理

对于非线性方程

在x(k)处按照多元函数的泰勒展开,并取线性项得到

其中

初值取x=0.8,y=0.7;

实验步骤

步骤一:

编写牛顿迭代法的基本程序。

打开Editor编辑器,输入以下语句:

function[x,n,data]=new_ton(x0)

ifnargin==1

tol=1e-6;

end

x1=x0-f1(x0)/df1(x0);

n=1;

while(norm(x1-x0)>tol)

x0=x1;

x1=x0-f1(x0)/df1(x0);

n=n+1;

data(:

n)=x1;

end

x=x1;

以文件名new_ton.m保存。

步骤二:

编写方程函数与方程的Jacobi矩阵函数。

(1)打开Editor编辑器输入以下语句:

%牛顿迭代法的方程函数

functionf=f1(x0)

x=x0

(1);

y=x0

(2);

f1=x^2-2*x-y+0.5;

f2=x^2+4*y^2-4;

%最后方程函数以行向量输出

f=[f1f2];

以文件名f1.m保存。

(2)新打开Editor编辑器输入以下语句:

%牛顿迭代法的jacobi矩阵

functionf=df1(x0);

x=x0

(1);

y=x0

(2);

f=[2*x4*y

2*x-1];

以文件名df1.m保存。

步骤三:

编写主函数。

打开Editor编辑器输入以下语句:

%牛顿迭代法的主函数

x0=[0.80.7];

[x,n,data]=new_ton(x0);

disp('计算结果为')

x

disp('迭代次数为')

n

以文件名new_main.m保存。

最速下降法原理

对于非线性方程组

如果给定一个初值

,我们希望找到一条路线每一次

迭代以后代价函数都会比原来小一些。

l称为步长因子

的不同,就构成了不同的下降算法。

如果取

就是所谓的最速下降法。

最速下降法是大范围收敛的h在某

出沿最速下降方向

下降的最快

实验步骤

步骤一:

打开Editor编辑器,输入以下语句:

symsxy

f1=x^2+2*y^2-2;

f2=x^2-y;

h=f1^2+f2^2

grad=[diff(h,x),diff(h,y)];

grad=simple(grad)

以文件名tidu_fuhao.m保存。

步骤二:

编写梯度函数。

打开Editor编辑器,输入以下语句:

functionf=f1_tidu(x0)

x=x0

(1);

y=x0

(2);

f=[8*x^3+8*x*y^2-8*x-4*x*y

8*x^2*y+16*y^3-14*y-2*x^2]';

步骤三:

编写最速下降法的方法函数打开Editor编辑器,输入以下语句:

function[x,n,data]=zuisu(x0)

ifnargin==1

tol=1e-6;

end

x1=x0-0.001*f1_tidu(x0);

n=1;

%迭代过程

while(norm(x1-x0)>tol)&(n<2000)

x0=x1;

%0.001为步长因子

x1=x0-0.001*f1_tidu(x0);

n=n+1;

%data用来存放中间数据

data(:

n)=x1;

end

x=x1;

以文件名zuisu.m保存。

步骤四:

编写主函数。

打开Editor编辑器,输入以下语句:

%最速下降法的主函数

x0=[0.80.7];

[x,n,data]=zuisu(x0);

disp('用最速下降法的计算结果为')

x

disp('迭代次数为')

n

运行结果:

 

运行结果分析:

由两种算法的运行结果截屏可看出,同样的精度要求(10-5)下,Newton法收敛速度远远好于最速下降法,我们知道最速下降法是线性收敛的。

上机作业4

1、用幂法与反幂法求矩阵A的按模最大、最小特征值与对应的特征向量。

e=10-5

幂法原理

当矩阵A满足一定条件时,在工程中可用幂法计算其主特征值(按模最大)及其特征向量。

矩阵A需要满足的条件为:

(1)

(2)存在n个线性无关的特征向量,设为

不全为0,则有

可见,当

越小时,收敛越快;且当k充分大时,有

,对应的特征向量即是

设An有n个线性相关的特征向量v1,v2,…,vn,对应的特征值1,2,…,n,满足

|1|>|2|…|n|

(3.2.1)

规范化

在实际计算中,若|1|>1则|1ka1|,若|1|<1则|1ka1|0都将停机。

须采用“规范化”的方法

,k=0,1,2,…

定理3.2-1任给初始向量

有,

程序:

function[t,y]=lpower(A,x0,eps,N)

A=[4,1,1,1;1,3,-1,1;1,-1,2,0;1,1,0,2];

x0=[1;1;1;1];

eps=1e-5;N=100;k=1;z=0;

y=x0./max(abs(x0));

x=A*y;

b=max(x);

ifabs(z-b)

t=max(x);

return;

end

whileabs(z-b)>eps&&k

k=k+1;

z=b;

y=x./max(abs(x));

x=A*y;

b=max(x);

end

[m,index]=max(abs(x));

t=x(index);

disp('用幂法求矩阵的最大特征值及对应的特征向量')

disp('最大特征值为:

')

t

disp('最大特征值对应的特征向量为:

')

y

disp('迭代次数:

')

k

end

反幂法理论

在工程计算中,可以利用反幂法计算矩阵按模最小特征值及其对应特征向量。

其基本理论如下,与幂法基本相同:

,可知,A和A-1的特征值互为倒数,求A按模最小特征值即求A-1的按模最大特征值,取倒数即为A的按模最小特征值所以算法基本相同,区别就是在计算

程序:

function[s,y]=invpower(A,x0,eps,n)

A=[4,1,1,1;1,3,-1,1;1,-1,2,0;1,1,0,2];

x0=[1;1;1;1];

eps=10^(-5);

N=100;

k=1;

r=0;

y=x0./max(abs(x0));

[L,U]=lu(A);

z=L\y;

x=U\z;

u=max(x);

s=1/u;

whileabs(u-r)>eps&&k

k=k+1;

r=u;

y=x./max(abs(x));

z=L\y;

x=U\z;

u=max(x);

end

[m,index]=max(abs(x));

s=1/x(index);

disp('用反幂法求矩阵的最小特征值及对应的特征向量')

disp('最小特征值为:

')

s

disp('最小特征值对应的特征向量为:

')

y

disp('迭代次数:

')

k

end

运行结果:

运行结果分析:

由上图可知,幂法与反幂法求解矩阵的特征值与特征向量是很方便的。

2、用Householder变换求矩阵A的QR分解,并用QR方法做3次迭代。

原理:

对任意一个非奇异矩阵(可逆矩阵)A,可以把它分解成一个正交阵Q和一个上三角阵的乘积,称为对矩阵A的QR分解,即A=QR。

如果规定R的对角元取正实数,这种分解是唯一的。

若A是奇异的,则A有零特征值。

任取一个不等于A的特征值的实数μ,则A‐μI是非奇异的。

只要求出A‐μI的特征值和特征向量就容易求出矩阵A的特征值和特征向量,所以假设A是非奇异的,不是一般性。

设A=A1,对A1作QR分解,得A1=Q1R1,交换该乘积的次序,得A2=R1Q1=,由于Q1正交矩阵,A1到A2的变换为正交相似变换,于是A1和A2就有相同的特征值。

一般的令A1=A,对k=1,2,3,…..

这样,可得到一个迭代序列{Ak},这就是QR方法的基本过程。

QR算法的核心思想是:

对一个具有n个不相等的特征值的矩阵A,进行如下变换:

A=Q1R1;A1=R1Q1

A1=Q2R2;A2=R2Q2

…………

Ak=Qk+1Rk+1;Ak+1=Rk+1Qk+1

…………

其中Qi是正交矩阵,Ri是可逆的上三角矩阵。

由于:

Ai+1=QTi+1(Qi+1Ri+1)Qi+1=QTi+1AiQi+1

所以Ai+1和Ai相似,具有相同的特

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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