⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 func8p1.m

📁 数值分析最常用的四十种算法
💻 M
字号:
m=zeros(10)
x=linspace(0,0,10)
x1=linspace(0,10,10)
b=[2,1,1,1,1,1,1,1,1,2]
xx=x'
tol=0.0001
%func8p1.m用不同的方法解方程组
n=10,j=0
for i=1:10
    m(i,i)=4
    if(i~=1)&(i~=10)
            m(i,i-1)=1
            m(i,i+1)=1
    end 
    m(1,2)=1;m(10,9)=1
end
%1.(1)直接法,解为 ( 0.4793    0.0829    0.1891    0.1606
%0.1680    0.1677    0.1609    0.1890    0.0829    0.4793 )
y=m\b'
%1.(2)Jacobi,迭代11次,按模精度0.0001
while  (abs(norm(xx,inf)-norm(x1,inf))>tol)
    x1=x; xx=x'
    xx=(-m*x'+4*x1'+b')/4 
    x=xx'
    j=j+1
end
%1.(3)GS,迭代 6次,按模精度0.0001,而在精度为0.001的情况下,Jacobi 8次,GS 5次,GS法均有较大优势
j=0;xx=b';x=linspace(0,0,10);x1=linspace(0,10,10)
while  (abs(norm(xx,inf)-norm(x,inf))>tol)
    xx=x
    for k=1:n
        for l=1:n
            x(k)=(-m(k,:)*x'+m(k,k)*x(k)+b(k))/m(k,k)
        end
    end
    j=j+1
end
m=zeros(20,20)
x=linspace(0,0,20)
x1=linspace(0,20,20)
b=linspace(0,0,20);b(1)=1
xx=x'
tol=0.0001
n=20,j=0
for i=1:n
    m(i,i)=5
    if(i~=1)&(i~=20)&(i~=2)&(i~=19)
            m(i,i-1)=-2;m(i,i-2)=1
            m(i,i+1)=-2;m(i,i+2)=1
    end 
    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
end
%2.(1)直接法,解为 ( 0.2421  0.0944   -0.0218   -0.0314   -0.0069    0.0049    0.0036    0.0002   -0.0008   -0.0004    0.0001   
%0.0001    0.0000   -0.0000   -0.0000   -0.0000    0.0000    0.0000   -0.0000   -0.0000 )
y=m\b'
%1.(2)Jacobi,迭代4445次,解为(  -0.4211  0.7196   -1.0333    1.3166   -1.5738    1.7966      -Inf       Inf      -Inf       Inf      -Inf       Inf      -Inf
%       Inf   -1.7966    1.5738   -1.3166    1.0333   -0.719 6    0.4211)
%显然不正确,这是由于迭代矩阵中带有接近零的除数,使计算机处理时发生错误
while  (abs(norm(xx)-norm(x1))>tol)
    x1=x; xx=x'
    xx=(-m*x'+m(1,1)*x1'+b')/m(1,1)
    x=xx'
    j=j+1
end
disp(xx)
%1.(3)GS,迭代 6次,按模精度0.0001,与直接法的解相当接近,再次验证了GS法的优越性
j=0;xx=b';x=linspace(0,0,20);x1=linspace(0,10,20)
while  (abs(norm(xx,inf)-norm(x,inf))>tol)
    xx=x
    for k=1:n
        for l=1:n
            x(k)=(-m(k,:)*x'+m(k,k)*x(k)+b(k))/m(k,k);
        end
    end
    j=j+1
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -