func8p1.asv
上传用户:zhdd911129
上传日期:2007-05-11
资源大小:722k
文件大小:2k
源码类别:

matlab例程

开发平台:

Matlab

  1. m=zeros(10)
  2. x=linspace(0,0,10)
  3. x1=linspace(0,10,10)
  4. b=[2,1,1,1,1,1,1,1,1,2]
  5. xx=x'
  6. tol=0.0001
  7. %func8p1.m用不同的方法解方程组
  8. n=10,j=0
  9. for i=1:10
  10.     m(i,i)=4
  11.     if(i~=1)&(i~=10)
  12.             m(i,i-1)=1
  13.             m(i,i+1)=1
  14.     end 
  15.     m(1,2)=1;m(10,9)=1
  16. end
  17. %1.(1)直接法,解为 ( 0.4793    0.0829    0.1891    0.1606
  18. %0.1680    0.1677    0.1609    0.1890    0.0829    0.4793 )
  19. y=mb'
  20. %1.(2)Jacobi,迭代11次,按模精度0.0001
  21. while  (abs(norm(xx,inf)-norm(x1,inf))>tol)
  22.     x1=x; xx=x'
  23.     xx=(-m*x'+4*x1'+b')/4 
  24.     x=xx'
  25.     j=j+1
  26. end
  27. %1.(3)GS,迭代 6次,按模精度0.0001,而在精度为0.001的情况下,Jacobi 8次,GS 5次,GS法均有较大优势
  28. j=0;xx=b';x=linspace(0,0,10);x1=linspace(0,10,10)
  29. while  (abs(norm(xx,inf)-norm(x,inf))>tol)
  30.     xx=x
  31.     for k=1:n
  32.         for l=1:n
  33.             x(k)=(-m(k,:)*x'+m(k,k)*x(k)+b(k))/m(k,k)
  34.         end
  35.     end
  36.     j=j+1
  37. end
  38. m=zeros(20,20)
  39. x=linspace(0,0,20)
  40. x1=linspace(0,20,20)
  41. b=linspace(0,0,20);b(1)=1
  42. xx=x'
  43. tol=0.0001
  44. n=20,j=0
  45. for i=1:n
  46.     m(i,i)=5
  47.     if(i~=1)&(i~=20)&(i~=2)&(i~=19)
  48.             m(i,i-1)=-2;m(i,i-2)=1
  49.             m(i,i+1)=-2;m(i,i+2)=1
  50.     end 
  51.     m(1,2)=-2;m(1,3)=1;m(1,2)=-2;m(1,3)=1;m(2,4)=1;m(2,3)=-2;m(2,1)=-2;m(19,20)=-2;m(19,18)=-2;m(19,17)=1;m(20,19)=-2;m(20,18)=1
  52. end
  53. %2.(1)直接法,解为 ( 0.2421  0.0944   -0.0218   -0.0314   -0.0069    0.0049    0.0036    0.0002   -0.0008   -0.0004    0.0001   
  54. %0.0001    0.0000   -0.0000   -0.0000   -0.0000    0.0000    0.0000   -0.0000   -0.0000 )
  55. y=mb'
  56. %1.(2)Jacobi,迭代4445次,解为(  -0.4211  0.7196   -1.0333    1.3166   -1.5738    1.7966      -Inf       Inf      -Inf       Inf      -Inf       Inf      -Inf
  57. %       Inf   -1.7966    1.5738   -1.3166    1.0333   -0.719 6    0.4211)
  58. %显然不正确,这是由于迭代矩阵中带有接近零的除数,使计算机处理时发生错误
  59. while  (abs(norm(xx)-norm(x1))>tol)
  60.     x1=x; xx=x'
  61.     xx=(-m*x'+m(1,1)*x1'+b')/m(1,1)
  62.     x=xx'
  63.     j=j+1
  64. end
  65. disp(xx)
  66. %1.(3)GS,迭代 6次,按模精度0.0001,与直接法的解相当接近,再次验证了GS法的优越性
  67. j=0;xx=b';x=linspace(0,0,20);x1=linspace(0,10,20)
  68. while  (abs(norm(xx,inf)-norm(x,inf))>tol)
  69.     xx=x
  70.     for k=1:n
  71.         for l=1:n
  72.             x(k)=(-m(k,:)*x'+m(k,k)*x(k)+b(k))/m(k,k);
  73.         end
  74.     end
  75.     j=j+1
  76. end