《计算方法》实验报告
指导教师:学 院:班 级:团队成员:
1
一、题目
例2.7应用Newton迭代法求方程x2?x?1?0在x?1附近的数值解
xk,并使其满足xk?xk?1?10?8
原理:
在方程f?x??0解的隔离区间?a,b?上选取合适的迭代初值x0,过曲线y?f?x?的点x0,f?x0?引切线
??l1:y?f?x0??f'?x0??x?x0?
其与x轴相交于点:x1? x0? 点?x1,f?x1?? 引切线
f?x0? f'?x0?,进一步,过曲线y?f?x?的
l2: y?f?x1??f'?x1??x?x1?
f?x1?其与x轴相交于点:x2? x1?
f'?x1?如此循环往复,可得一列逼近方程f?x??0精确解x*的点
x0,x1,,xk,,其一般表达式为:
xk? xk?1? f?xk?1? f'?xk?1?
该公式所表述的求解方法称为Newton迭代法或切线法。
2
程序:
function y=f(x)%定义原函数 y=x^3-x-1; end
function y1=f1(x0)%求导函数在x0点的值 syms x;
t=diff(f(x),x); y1=subs(t,x,x0); end
function newton_iteration(x0,tol)%输入初始迭代点x0及精度tol x1=x0-f(x0)/f1(x0);k=1;%调用f函数和f1函数 while abs(x1-x0)>=tol
x0=x1;x1=x0-f(x0)/f1(x0);k=k+1; end
fprintf('满足精度要求的数值为x(%d)=%1.16g\\n',k,x1); fprintf('迭代次数为k=%d\\n',k); end
结果:
3
二、题目
例3.7试利用Jacobi迭代公式求解方程组
?5??1???1???1?1?110?1?15?1?1?1??x1???4?????x?1???2???12??1??x3??8? ?????10??x4??34?要求数值解X(k)满足X?X(k)组的精确解。
2?10?4,其中X?(1,2,3,4)T为方程
原理:
?a11?a21将线性方程组的系数矩阵A?????an1a12a22an2a1n?a2n??分解为??ann?A?L?D?U,其中D=diag(a11,a22,?0?a?21L=?a31???a?n100a32an2000an,n?1,ann),
a13a2300a1n?a2n??? ?an?1,n?0??0??0a12?000???0?,U=?????00?000???当对角阵D可逆时,方程组AX?b 可等价地写成
X??D?1?L?U?X? D?1b ,
据此可得Jacobi迭代公式为
X?k?1???D?1?L?U?X??? D?1b, k?0,1,k,
4
其中X?k?=x1,x2,,xn??k??k??k??T?Rn,该迭代公式也可以写成如下的分
量形式
x(k?1)i1?aiin?(k?1)??bi??aijxj?,i?1,2,j?1,j?i??,n
程序:
function jacobi()
%输入矩阵A、b、精度tol%
A=[5 -1 -1 -1; -1 10 -1 -1; -1 -1 5 -1; -1 -1 -1 10]; b=[-4 12 8 34]'; tol=10^-4;
% A=input('系数矩阵A=');%输入矩阵A % b=input('矩阵b= ');%输入矩阵b
% tol=input('精度要求tol=');%输入精度tol X=inv(A)*b; [n,~]=size(A); D=diag(diag(A)); L=tril(A)-D; U=triu(A)-D; X0=zeros(n,1);
X1=inv(D)*b-inv(D)*(L+U)*X0; X0=X1; X2=X-X0; k=1;
while abs(norm(X2,2))>=tol
X1=inv(D)*b-inv(D)*(L+U)*X0; X0=X1; X3=X-X0; %收敛性判断%
if norm(X3,2)>norm(X2,2) break; else
X2=X3; k=k+1; end end
% 结果输出% if X2~=X3
5