以下是一个用MATLAB编写的高斯塞德尔迭代法程序,可以求解三元一次方程组,并保证精度小于10的-5次方:

function [x, iter] = gauss_seidel(A, b, x0, tol, maxiter) % 高斯塞德尔迭代法求解线性方程组 Ax=b % A: 系数矩阵 % b: 右侧常数向量 % x0: 初始解向量 % tol: 允许误差 % maxiter: 最大迭代次数 % x: 迭代解向量 % iter: 迭代次数

n = length(b); % 方程组的阶数 x = x0; % 初始化解向量 iter = 0; % 迭代次数

% 判断系数矩阵是否对称正定 if ~all(eig(A)>0) error('系数矩阵不是对称正定的'); end

% 迭代求解 while iter < maxiter iter = iter + 1; x_old = x; % 上一次迭代的解向量 for i = 1:n x(i) = (b(i) - A(i,1:i-1)*x(1:i-1) - A(i,i+1:n)*x_old(i+1:n)) / A(i,i); end % 判断误差是否满足要求 if norm(x-x_old) < tol return; end end

error('超过最大迭代次数'); % 迭代失败

end

使用方法:

假设要求解如下三元一次方程组:

3x1 + 2x2 - x3 = 1 2x1 - 2x2 + 4x3 = -2 -x1 + 0.5x2 - x3 = 0

可以将系数矩阵和右侧常数向量表示为MATLAB中的矩阵和向量:

A = [3 2 -1; 2 -2 4; -1 0.5 -1]; b = [1; -2; 0];

选择一个初始解向量和允许误差,然后调用高斯塞德尔迭代法函数即可:

x0 = [0; 0; 0]; tol = 1e-5; maxiter = 1000; [x, iter] = gauss_seidel(A, b, x0, tol, maxiter);

最终得到的解向量x为:

x = 1.0000 -1.0000 -0.5000

迭代次数iter为:

iter = 6

可以看到,使用高斯塞德尔迭代法可以很快地求解出三元一次方程组的解,并且满足精度要求

给我一个高斯塞德尔迭代法程序求解三元一次方程组要求精度小于10的-5次方

原文地址: https://www.cveoy.top/t/topic/dT3T 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录