1
重 庆 交 通 大 学 学 生 实 验 报 告
实验课名称 计算方法A 开课实验室 数学实验室 学 院 年级 专业 班级 学 生 姓 名 学 号 开 课 时 间 至 学年第 学期
评分细则 评分 报告表述的清晰程度和完整性(20分) 程序设计的正确性(40分) 实验结果的分析(30分) 实验方法的创新性(10分) 总成绩 教师签名
1
2
实验一 误差分析
实验目的:掌握Newton 迭代法,了解拟Newton 迭代法,培养编程能力和 用迭代法解非线性方程(组)的实践技能。 实验环境:MATLAB 实验1.1:用二分法求非线性方程 f (x) = x3 + x2 ? 3x ? 3 = 0在 1.5 附近的根。
实验代码: bisecMethod:
function bisecMethod(f_name,a,b)
fprintf('二分法求非线性方程的根\\n\\n'); tolerance=1e-6; it_limit=30; fprintf('It. a c b fa=f(a) '); fprintf(' fb=f(b) abs(fb-fa)\\n'); it=0;
Y_a=feval(f_name,a);Y_b=feval(f_name,b); if(Y_a*Y_b>0)
fprintf('\\n\\n停止,因为f(a)f(b)>0\\n'); fprintf('\\n重新给出端点a或者b.\\n'); else
while 1
it=it+1;
c=(a+b)/2;Y_c=feval(f_name,c); fprintf('%3.0f .6f .6f',it,a,c);
fprintf('.6f .6f .6f .3e\\n',b,Y_a,Y_b,abs(Y_b-Y_a)); %fprintf('.3e\\n',abs(Y_b-Y_a)) if(abs(b-a)<=tolerance)
fprintf('结果满足允许误差tolerance=1e-6.\\n');break end
if(it>it_limit)
fprintf('迭代超过限定次数.\\n');break end
if(Y_a*Y_c<=0) b=c;Y_b=Y_c; else a=c;Y_a=Y_c; end end
fprintf('最终结果:x*=.6f \\n',c); end
chap4_fun1.m
function f=chap1_fun1(x) f=x^3+x^2-3*x-3;
在命令窗口调用M文件bisecMethod(f_name’,a,b) >> bisecMethod('chap4_fun1',1,2)
2
3
二分法求非线性方程的根
It. a c b fa=f(a) fb=f(b) abs(fb-fa)
1 1.000000 1.500000 2.000000 -4.000000 3.000000 7.000e+00
2 1.500000 1.750000 2.000000 -1.875000 3.000000 4.875e+00 3 1.500000 1.625000 1.750000 -1.875000 0.171875 2.047e+00 4 1.625000 1.687500 1.750000 -0.943359 0.171875 1.115e+00 5 1.687500 1.718750 1.750000 -0.409424 0.171875 5.813e-01 6 1.718750 1.734375 1.750000 -0.124786 0.171875 7 1.718750 1.726563 1.734375 -0.124786 0.022030 8 1.726563 1.730469 1.734375 -0.051755 0.022030 9 1.730469 1.732422 1.734375 -0.014957 0.022030 10 1.730469 1.731445 1.732422 -0.014957 0.003513 11 1.731445 1.731934 1.732422 -0.005728 0.003513 12 1.731934 1.732178 1.732422 -0.001109 0.003513 13 1.731934 1.732056 1.732178 -0.001109 0.001201 14 1.731934 1.731995 1.732056 -0.001109 0.000046 15 1.731995 1.732025 1.732056 -0.000532 0.000046 16 1.732025 1.732040 1.732056 -0.000243 0.000046 17 1.732040 1.732048 1.732056 -0.000098 0.000046 18 1.732048 1.732052 1.732056 -0.000026 0.000046 19 1.732048 1.732050 1.732052 -0.000026 0.000010 20 1.732050 1.732051 1.732052 -0.000008 0.000010 21 1.732050 1.732050 1.732051 -0.000008 0.000001 结果满足允许误差tolerance=1e-6. 最终结果:x*= 1.732050
实验1.2 :公元1225 年,Lenardo 宣布他求得方
x3 + 2x2 +10x ? 20 = 0
实验代码:
function x=Newton(fname,dname,x0,e,N) if nargin<5,N=500;end if nargin<4,e=1e-4;end x=x0;x0=x+2*e;k=0;
fprintf('It.no=- x%[2d]=.9f\\n',k,k,x) while abs(x0-x)>e&k x0=x;x=x0-feval(fname,x0)/feval(dname,x0); fprintf('It.no=- x[-]=.9f\\n',k,k,x) end if k==N,fprintf('已达到迭代次数上限');end 在命令窗口编写内嵌函数表达式,并调用函数M文件Newton:>> fun=inline('x^3+2*x^2+10*x-20'); >> dfun=inline('3*x^2+4*x+10'); 3 2.967e-01 1.468e-01 7.379e-02 3.699e-02 1.847e-02 9.241e-03 4.622e-03 2.311e-03 1.155e-03 5.776e-04 2.888e-04 1.444e-04 7.221e-05 3.610e-05 1.805e-05 9.026e-06 4 >> Newton(fun,dfun,1.5,0.5e-6); It.no= 0 xIt.no= 1 x[ 1]= 1.373626374 It.no= 2 x[ 2]= 1.368814820 It.no= 3 x[ 3]= 1.368808108 It.no= 4 x[ 4]= 1.368808108 实验二 解线性方程组的迭代法 实验目的:掌握列主元Gauss 消去法,Jacobi 迭代法,Gauss-Seidel 迭代法和超松弛迭代法,培养编程能力和用迭代法解线性方程组的实践技能。 实验环境:MATLAB 实验2.1编写一个求解线性代数方程组的列主元Gauss 消去法的通用程序,然后用该程序解如下线性代数方程组: ?0.7290.810.9??x1??0.686?7??????11??x2???0.833?8 ?1?1.3311.211.1??x??1.000?3??????实验代码: clear fprintf(‘增广矩阵’) A=[0.792,0.81,0.9,0.6867;1,1,1,0.8338;1.331,1.21,1.1,1.000] %输入增广矩阵 %第一次选主元,第三行和第一行交换 fprintf('第一次选主元后的增广矩阵') tempo=A(3,:);A(3,:)=A(1,:);A(1,:)=tempo;A %第一次消元 fprintf('第一次消元后的增广矩阵') A(2,:)=A(2,:)-A(1,:)*A(2,1)/A(1,1); A(3,:)=A(3,:)-A(1,:)*A(3,1)/A(1,1);A %第二次选主元,第三行和第二行交换 fprintf('第二次选主元后的增广矩阵') tempo=A(3,:);A(3,:)=A(2,:);A(3,:)=tempo %第二次消元 fprintf('第二次消元后的增广矩阵') A(3,:)=A(3,:)-A(2,:)*A(3,2)/A(2,2);A %回代求值 fprintf('回代求值') x(3)=A(3,4)/A(3,3); x(2)=(A(2,4)-A(2,3)*x(3))/A(2,2); x(1)=(A(1,4)-A(1,2:3)*x(2:3)')/A(1,1); x 保存为文件名:chap3_1 4 5 在命令窗口调用M文件chap3_1: >> chap3_1 增广矩阵 A = 0.7920 0.8100 0.9000 0.6867 1.0000 1.0000 1.0000 0.8338 1.3310 1.2100 1.1000 1.0000 第一次选主元后的增广矩阵 A = 1.3310 1.2100 1.1000 1.0000 1.0000 1.0000 0.7920 0.8100 0.9000 第一次消元后的增广矩阵 A = 1.3310 1.2100 1.1000 0 0.0909 0.1736 0 0.0900 0.2455 第二次选主元后的增广矩阵 A = 1.3310 1.2100 1.1000 0 0.0909 0.1736 0 0.0900 0.2455 第二次消元后的增广矩阵 A = 1.3310 1.2100 1.1000 0 0.0909 0.1736 0 -0.0000 0.0736 代回求值 x = 0.0499 0.6481 0.1358 >> 实验2.2对于如下线性代数方程组: 5 1.0000 0.8338 0.6867 1.0000 0.0825 0.0917 1.0000 0.0825 0.0917 1.0000 0.0825 0.0100

