四、 实验体会:
列主元三角分解原理很简单,用MATLAB实现起来却不容易。对MATLAB还需要深入学习。
实验三 SOR迭代法
一、 实验内容:
?10x1?x2?9???x1?10x2?2x3?7??2x?10x?623?采用SOR方法求解方程
?采用0向量为初始向量,迭代以
x(k?1)?x(k)?10?6结束,但迭代次数不
操作1000次,松弛因子使用0.1*i 其中5?i?18,给出使用的各松弛因子及对应迭代次数。
二、 实验实现: 1、程序代码如下:
A=[ 10 -1 0; -1 10 -2;
0 -2 10]; b=[9;7;6];
x0=[0;0;0];e=10^(-6);n=1000; x=x0; j=18; w=0.1*j; for k=1:n
for i=1:length(b)
x(i)=w*(b(i)-A(i,:)*x)/A(i,i)+x(i); if norm(x-x0) disp(w);disp(x');disp(k);disp('------------') return end x0=x; end end 2、运行结果如下: 上图显示为松弛因子分别为0.5、1、1.5和1.8时的结果。 实验四 多项式插值 一、 实验内容: 下列数据点的插值 x y 0 0 1 1 4 2 9 3 16 4 25 5 36 6 49 7 64 8 可以得到平方根函数的近似,在区间[0,64]上作图. (注:画图时以步长0.1计算出各点插值,再画出641个点的图,若能给出具体解析式,直接画出连续图) (1)用这九个点作8次多项式插值L8(x).,作图,从得到的结果看在[0,64]上,哪个插值区间更精确? (2)使用三次插值(不是三弯矩,每个点采用距离最近的四个结点进行三次插值,如插值点为10,则取1,4,9,16四点做三次插值),作图,从得到的结果看在[0,64]上,哪个插值区间更精确? (3)比较(1)(2)的结果。 二、 实验实现: 1、程序代码如下: x=[0 1 4 9 16 25 36 49 64]; y=[0 1 2 3 4 5 6 7 8]; x1=0:0.1:64; y1=zeros(641,1);y2=zeros(641,1); for j=1:1:641 for k=1:9 t=1; for i=1:9 if i~=k t=t*(x1(j)-x(i))/(x(k)-x(i)); end end y1(j)=y1(j)+t*y(k); end end x2=0:0.1:64; for j=1:41 for k=1:4 t=1 for i=1:4 if i~=k t=t*(x2(j)-x(i))/(x(k)-x(i)); end end y2(j)=y2(j)+t*y(k); end end for j=42:1:91 for k=2:5 t=1 for i=2:5 if i~=k t=t*(x2(j)-x(i))/(x(k)-x(i)); end end y2(j)=y2(j)+t*y(k); end end for j=92:1:161 for k=3:6 t=1 for i=3:6 if i~=k t=t*(x2(j)-x(i))/(x(k)-x(i)); end end y2(j)=y2(j)+t*y(k); end end for j=162:1:251 for k=4:7 t=1 for i=4:7 if i~=k t=t*(x2(j)-x(i))/(x(k)-x(i)); end end y2(j)=y2(j)+t*y(k); end end for j=252:1:361 for k=5:8 t=1 for i=5:8 if i~=k t=t*(x2(j)-x(i))/(x(k)-x(i)); end end y2(j)=y2(j)+t*y(k); end end for j=362:1:641 for k=6:9 t=1 for i=6:9 if i~=k t=t*(x2(j)-x(i))/(x(k)-x(i)); end end y2(j)=y2(j)+t*y(k); end end subplot(2,1,1) plot(x,y,'ro',x1,y1,'b.',x1,sqrt(x1),'r') grid on;axis([0 70 0 10]); subplot(2,1,2) plot(x,y,'ro',x2,y2,'k.',x1,sqrt(x1),'r') grid on;axis([0 70 0 10]); 2、运行结果如下: