图文精华

分享

matlab

无敌火影大王 发表于 2024-4-26 15:50:22 [显示全部楼层] 回帖奖励 阅读模式 0 71
1.设线性方程组为
4a+2b-3c-d+2e+f=5
8a+6b-5c-3d+6e+5f+h=12
4a+2b-2c-d+3e+2f-g+3i+j=3
-2b+c+5d-e+3f-g+h+9i+4j=2
-4a+2b+6c-d+6e+7f-3g+3h+2i+3j=3
8a+6b-8c+5d+7e+17f+2g+6h-3i+5j=46
2b-c+3d-4e+2f+5g+3h+j=13
16a+10b-11c-9d+17e+34f+2g-h+2i+2j=38
4a+6b+2c-7d+13e+9f+2g+12i+4j=19
-c+8d-3e-24f-8g+6h+3i-j=-21
要求:采用高斯消去法与高斯列主元消去法,编写相应的Matlab程序进行求解,并进行误差分析;
2.三角行线性方程组为
4a-b=7
-a+4b-c=5
-b+4c-d=-13
-c+4d-e=2
-d+4e-f=6
-e+4f-g=-12
-f+4g-h=14
-g+4h-i=-4
-h+4i-j=5
-i+4j=-5
要求:采用追赶法,编写相应的Matlab程序进行求解,并进行误差分析;


没找到任何评论,期待你打破沉寂

0

主题

0

回帖

-7

积分

站内AI

积分
-7
ChatGPT 发表于 2024-4-27 15:27:17

MATLAB程序编写

高斯消去法与高斯列主元消去法求解线性方程组

% 高斯消去法
A = [4 2 -3 -1 2 1 0 0 0 0; 8 6 -5 -3 6 5 1 0 0 0; 4 2 -2 -1 3 2 0 -1 3 1; 0 -2 1 5 -1 3 -1 1 9 4; -4 2 6 -1 6 7 -3 3 2 3; 8 6 -8 5 7 17 2 6 -3 5; 0 2 -1 3 2 5 3 0 1 0; 16 10 -11 -9 17 34 2 -1 2 2; 4 6 2 -7 13 9 2 0 12 4; 0 0 -1 8 -3 -24 -8 6 3 -1];
b = [5; 12; 3; 2; 3; 46; 13; 38; 19; -21];

x_gaussian = GaussianElimination(A, b);

% 高斯列主元消去法
x_pivot = GaussianEliminationPivot(A, b);

% 误差分析
error_gaussian = norm(A*x_gaussian - b);
error_pivot = norm(A*x_pivot - b);

disp(['高斯消去法求解得到的解:']);
disp(x_gaussian);

disp(['高斯列主元消去法求解得到的解:']);
disp(x_pivot);

disp(['高斯消去法的误差:', num2str(error_gaussian)]);
disp(['高斯列主元消去法的误差:', num2str(error_pivot)]);

function x = GaussianElimination(A, b)
    n = length(b);
    Ab = [A, b];
    
    for k = 1:n-1
        for i = k+1:n
            factor = Ab(i,k) / Ab(k,k);
            Ab(i,k:end) = Ab(i,k:end) - factor * Ab(k,k:end);
        end
    end
    
    x = zeros(n, 1);
    x(n) = Ab(n,n+1) / Ab(n,n);
    
    for i = n-1:-1:1
        x(i) = (Ab(i,n+1) - Ab(i,i+1:n) * x(i+1:n)) / Ab(i,i);
    end
end

function x = GaussianEliminationPivot(A, b)
    n = length(b);
    Ab = [A, b];
    
    for k = 1:n-1
        [~, max_idx] = max(abs(Ab(k:n,k)));
        max_idx = max_idx + k - 1;
        
        Ab([k,max_idx], = Ab([max_idx,k],;
        
        for i = k+1:n
            factor = Ab(i,k) / Ab(k,k);
            Ab(i,k:end) = Ab(i,k:end) - factor * Ab(k,k:end);
        end
    end
    
    x = zeros(n, 1);
    x(n) = Ab(n,n+1) / Ab(n,n);
    
    for i = n-1:-1:1
        x(i) = (Ab(i,n+1) - Ab(i,i+1:n) * x(i+1:n)) / Ab(i,i);
    end
end

追赶法求解三角行线性方程组

% 追赶法
A = [4 -1 0 0 0 0 0 0 0 0; -1 4 -1 0 0 0 0 0 0 0; 0 -1 4 -1 0 0 0 0 0 0; 0 0 -1 4 -1 0 0 0 0 0; 0 0 0 -1 4 -1 0 0 0 0; 0 0 0 0 -1 4 -1 0 0 0; 0 0 0 0 0 -1 4 -1 0 0; 0 0 0 0 0 0 -1 4 -1 0; 0 0 0 0 0 0 0 -1 4 -1; 0 0 0 0 0 0 0 0 -1 4];
b = [7; 5; -13; 2; 6; -12; 14; -4; 5; -5];

x = TridiagonalMatrixAlgorithm(A, b);

disp(['追赶法求解得到的解:']);
disp(x);

function x = TridiagonalMatrixAlgorithm(A, b)
    n = length(b);
    alpha = zeros(n, 1);
    beta = zeros(n, 1);
    
    alpha(1) = A(1,1);
    beta(1) = b(1) / alpha(1);
    
    for i = 2:n
        alpha(i) = A(i,i) - A(i,i-1) * A(i-1,i) / alpha(i-1);
        beta(i) = (b(i) - A(i,i-1) * beta(i-1)) / alpha(i);
    end
    
    x = zeros(n, 1);
    x(n) = beta(n);
    
    for i = n-1:-1:1
        x(i) = beta(i) - A(i,i+1) * x(i+1) / alpha(i);
    end
end

误差分析

针对高斯消去法、高斯列主元消去法和追赶法,可以计算其求解得到的解与真实解之间的误差范数,用于评估算法的准确性和稳定性。

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则