fortran语言解n元线性方程组
fortran 里的blas库,解三对角方程组
在Fortran中,可以使用BLAS库(基本线性代数子程序)来解三对角方程组。以下是一个示例代码:
```fortran
program tridiagonal_solver
implicit none
integer, parameter :: n = 10 ! 矩阵大小
real, dimension(n) :: a, b, c, d, x
integer :: i
! 初始化三对角矩阵和右侧向量
a = (/ -1.0, 2.0, -1.0, 2.0, -1.0, 2.0, -1.0, 2.0, -1.0, 2.0 /)
b = (/ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 /)
c = (/ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 /)
d = (/ 6.0, 15.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 6.0 /)
! 使用BLAS库的dgtsv函数求解三对角方程组
call dgtsv(n, n, a, n, b, n, c, n, x, n)
! 输出结果
print *, "解为:"
do i = 1, n
print *, x(i)
end do
end program tridiagonal_solver
```
这个代码使用了LAPACK库中的`dgtsv`函数来求解三对角方程组。首先,我们定义了三对角矩阵A、B、C和右侧向量D。然后,我们调用`dgtsv`函数来计算解向量x。最后,我们输出解向量x的值。
第一章-第四讲-n元线性方程组求解
第四讲 n 元线性方程组求解
上一讲我们介绍了当n 元一次线性方程组的系数矩阵A 可逆时,可求出方程组解1X A b -=,
实际上这也是方程组的唯一解。如果方程组系数矩阵A 不可逆或A 不是方阵时,该如何来讨论方程组的解?这一讲将通过矩阵的初等变换来研究n 元一次线性方程组(齐次、非齐次)在什么条件下有解、如何求解以及各种解的表达形式等.
n 元一次线性方程组是指形如
⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++m
n mn m m n n n n b x a x a x a b x a x a x a b x a x a x a ΛΛΛΛΛΛΛΛΛΛΛΛΛΛΛ22112
22221211
1212111 ... ...(4.1)
令
111212122212
n n m m mn a a a a a a A a a a ⎛⎫
⎪ ⎪= ⎪
⎪⎝⎭L L L L L L L
,12n x x X x ⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭M ,12m b b b b ⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭
M
则方程组的矩阵方程形式AX b =.其中:A 称为方程组(4.1)的系数矩阵,°()A A b =称为方程组(4.1)的增广矩阵。
当b O ≠时,称(4.1)式为一元线性非齐次线性方程组;
当b O =时,称 (4.2 ) 式为一元线性齐次线性方程组,其矩阵形式AX O =.
111122121122221122000
n n n n
m m mn n a x a x a x a x a x a x a x a x a x +++=⎧⎪+++=⎪⎨
fortran数值计算基础
数值计算基础
目录
实验一直接法解线性方程组的 (2)
实验二插值方法 (12)
实验三数值积分 (6)
实验四常微分方程的数值解 (8)
实验五迭代法解线性方程组与非线性方程 (10)
实验一 直接法解线性方程组
一、实验目的
掌握全选主元消去法与高斯-塞德尔法解线性方程组。
二、实验内容
分别写出Guass 列选主元消去法与追赶法的算法,编写程序上机调试出结果,要求所编程序适用于任何一解线性方程组问题,即能解决这一类问题,而不是某一个问题。实验中以下列数据验证程序的正确性。
1、用Guass 列选主元消去法求解方程组
⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--5.58.37.33.47.11.85.16.93.51.53.25.2321x x x
2、用追赶法求解方程组
⎥⎥
⎥
⎥⎥⎥⎦⎤⎢
⎢⎢⎢⎢⎢⎣⎡-=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡-----000010210000210000210000210000
254321x x x x x 三、实验仪器设备与材料
主流微型计算机
四、实验原理
1、Guass 列选主元消去法 对于AX =B
1)、消元过程:将(A|B )进行变换为)~|~(B A ,其中A ~
是上三角矩阵。即:
⎪⎪⎪⎪
⎪⎭
⎫
⎝⎛→⎪⎪⎪⎪⎪⎭⎫ ⎝⎛n nn n
n
n nn
n n n
n b a b a b a a b a a a b a a a b a a a
0010122111221
222221111211 k 从1到n-1 a 、 列选主元
选取第k 列中绝对值最大元素ik n
n元非齐次线性方程组
n元非齐次线性方程组
元非齐次线性方程组(Unhomogeneous Linear Equation System)绝对是数学家在解线性方程组的过程中的重要的可行性前言,它可以解决多种复杂的线性方程组试题,发挥助推作用。元非齐次线性方程组是根据线性空间给定方程与空间中各独立向量的关系,以求得空间中独立向量不同取法调节方程组的系数关系来解决线性方程组。它利用了线性空间提供的有效信息,能够解决复杂问题,极大地提高了数学求解能力。
有效运用元非齐次线性方程组,可以极大地降低数学模型的求解难度,的确是数学家的不可或缺的工具。因为它具有建模灵活性、调整灵活性强、定量描述可能性大等优点,在模型建立、参数设定、数据处理和结果验证方面能发挥重要作用。例如,在机械设计、微机控制、科学计算、运筹学解决多类别线性方程组试题时,运用元非齐次线性方程组一定程度上能够减轻任务量,缩短解题时间,这给数学家带来了极大的便利。
综上所述,元非齐次线性方程组的运用为解决线性方程组提供了可能性,它的建模灵活性、调整灵活性强、定量描述可能性大等许多优势,让数学家在解决多类线性方程组试题时有效地减轻了任务量,缩短解题时间,绝对是数学家不可或缺的工具,值得大家推荐。
fortran矩阵运算 -回复
fortran矩阵运算-回复
Fortran矩阵运算是一种用于处理线性代数方程的编程语言。它为数值计算和科学计算提供了强大的工具,特别适用于处理大规模的矩阵运算。在这篇文章中,我们将逐步回答一些关于Fortran矩阵运算的常见问题和操作。
第一步,我们将介绍Fortran中的矩阵表示。在Fortran中,矩阵可以用二维数组来表示,其中行和列的索引分别从1开始。例如,一个3×3的矩阵可以用以下方式在Fortran中表示:
fortran
real, dimension(3, 3) :: matrix
在这个声明中,“real”表示矩阵元素的数据类型为实数类型,dimension(3, 3)表示矩阵的行数和列数分别为3.
第二步,我们将讨论矩阵的初始化和赋值。在Fortran中,我们可以通过循环将数值赋给矩阵的各个元素。例如,以下代码将给矩阵赋予一些随机数值:
fortran
do i = 1, 3
do j = 1, 3
call random_number(matrix(i, j))
end do
end do
在这个例子中,random_number()函数用于生成随机数,并将其赋值给矩阵的每个元素。使用循环结构可以方便地对矩阵进行赋值和初始化。
第三步,我们将介绍矩阵的基本运算。Fortran提供了一系列的内置函数和运算符,能够执行矩阵的加法、减法、乘法以及转置等操作。例如,以下代码演示了如何计算两个矩阵的乘法:
fortran
real, dimension(3, 3) :: matrix1, matrix2, result
数值计算方法FORTRAN程序—函数插值和方程组求解
1
输出数据文件:output2.dat
Nn(x)= 38.500000000000000
Forward difference diagram:
1.000000000
16.00000000 15.00000000
81.00000000 65.00000000 50.00000000
数值计算方法
吕毅宁
一.
对n+1个节点xi及yi=f(xi)(I=0,1,…,n),编制通用程序。
1)n次Lagrange插值计算公式Ln(x);
A)流程图(图1、2)
B)程序(程序一)
C)计算实例
输入数据文件:input1.dat
KNOWN NODES NUMBER AND NODE 'X' WITH Y(X)WANT TO BE KNOWN:
KNOWN NODES NUMBER AND NODE 'X' WITH Y(X)WANT TO BE KNOWN:
42.5
NODES XI AND YI WHICH ARE ALREADY KNOWN:
1.000 3.000 4.000 2.000
1.000 81.000 256.000 16.000
-4.312691791318356E-001 -6.207237146208434E-002 1.150000000000000E-001
fortran矩阵运算
fortran矩阵运算
Fortran是一种广泛使用的编程语言,特别适合进行科学计算和矩阵运算。它在数值分析和工程计算领域有着重要的应用,很多科学家和工程师都使用Fortran来解决各种实际问题。本文将介绍Fortran 中的矩阵运算的相关知识,包括矩阵的表示、矩阵的基本运算、矩阵的线性代数运算以及Fortran中常用的矩阵库。
首先,我们来看看Fortran中如何表示矩阵。在Fortran中,可以使用多种方式来表示矩阵,包括一维数组和多维数组。一维数组可以用来表示一行或一列的矩阵,而多维数组可以用来表示更复杂的矩阵。下面是一个使用一维数组表示矩阵的示例:
```
real, dimension(4) :: vec
real, dimension(4, 4) :: mat
vec = (/1.0, 2.0, 3.0, 4.0/)
mat = reshape(vec, (/2, 2/))
```
上面的代码中,我们首先定义了一个一维数组`vec`,然后使用
`reshape`函数将其转换为一个2×2的矩阵`mat`。
接下来,我们将介绍一些基本的矩阵运算。Fortran中可以进行的基本矩阵运算包括矩阵的加法、减法、乘法和转置。下面是一些示例代码:
```
real, dimension(2, 2) :: mat1, mat2, result
!矩阵加法
mat1 = reshape((/1.0, 2.0, 3.0, 4.0/), (/2, 2/))
mat2 = reshape((/5.0, 6.0, 7.0, 8.0/), (/2, 2/))
fortran矩阵行列式的值
fortran矩阵行列式的值
一、矩阵行列式的定义
矩阵行列式是一个标量值,用于描述一个n阶矩阵的线性相关性和变换性质。对于一个n阶矩阵A,它的行列式记作det(A)或|A|,它的计算公式如下:
|A| = a11*a22*...*ann - a11*a23*...*a(n-1)n - a12*a21*...*ann + a12*a23*...*a(n-1)n + ... + (-1)^(n-1)*a1n*a2(n-1)*...*ann
其中aij表示矩阵A的第i行第j列的元素。
二、矩阵行列式的计算
在Fortran中,可以使用循环结构和嵌套数组来计算矩阵行列式的值。首先,我们需要定义一个n*n的二维数组来表示矩阵A,然后通过嵌套循环来计算行列式的值。具体的计算过程如下:
1. 定义一个n*n的二维数组A,并初始化矩阵的元素;
2. 根据行列式的计算公式,使用嵌套循环来计算行列式的值;
3. 如果n为奇数,行列式的值为正;如果n为偶数,行列式的值为负;
4. 输出计算得到的行列式的值。
下面是一个使用Fortran计算矩阵行列式的示例代码:
```fortran
program determinant
implicit none
integer, parameter :: n = 3 ! 矩阵的阶数
real :: A(n,n) ! 矩阵A
real :: detA ! 矩阵A的行列式的值
integer :: i, j, k, sign
! 初始化矩阵A的元素
A = reshape([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0], [n,n])
线性方程组求解的常用方法与技巧
线性方程组求解的常用方法与技巧线性方程组是数学中常见的问题,它的求解在各个领域都有广泛的
应用。本文将介绍线性方程组求解的常用方法与技巧。
一、高斯消元法
高斯消元法是线性方程组求解最常用的方法之一。它通过化简矩阵,将线性方程组转化为阶梯形式,从而求解未知数的值。
具体步骤如下:
1. 将线性方程组表示为增广矩阵形式。
2. 选择一个主元,通常选择第一列的首个非零元素。
3. 通过初等变换,将主元所在列的其他元素消成零。
4. 重复步骤2和3,直到转化为阶梯形式。
5. 回代求解未知数,得出线性方程组的解。
高斯消元法的优点是简单易行,适用于任意规模的线性方程组。然而,该方法在面对大规模线性方程组时会面临计算复杂度高的问题。
二、雅可比迭代法
雅可比迭代法是另一种常用的线性方程组求解方法,它通过迭代逼
近的方式求解未知数的值。
具体步骤如下:
1. 将线性方程组表示为矩阵形式,即AX=B。
2. 对矩阵A进行分解,将其分解为D、L和U三个矩阵,其中D是A的对角线矩阵,L是A的下三角矩阵,U是A的上三角矩阵。
3. 利用雅可比迭代公式,依次迭代计算未知数的值,直到满足收敛条件。
4. 得到线性方程组的解。
雅可比迭代法的优点是适用于稀疏矩阵,且收敛性较好。然而,它的迭代次数通常较多,计算效率较低。
三、LU分解法
LU分解法是线性方程组求解的一种常见方法,它将矩阵A分解为两个矩阵L和U的乘积。
具体步骤如下:
1. 将线性方程组表示为矩阵形式,即AX=B。
2. 对矩阵A进行LU分解,其中L是单位下三角矩阵,U是上三角矩阵。
3. 将方程组AX=B转化为LUx=B,再分别解得Ly=B和Ux=y两个方程组的解。
fortran矩阵行列式的值
fortran矩阵行列式的值
Fortran矩阵行列式的值
矩阵行列式是线性代数中的一个重要概念,它可以帮助我们了解矩阵的性质和特征。在Fortran编程语言中,我们可以使用各种算法和方法来计算矩阵的行列式的值。本文将介绍Fortran中计算矩阵行列式的一些常用方法,以及它们的原理和应用。
一、矩阵行列式的定义和性质
在开始介绍具体的计算方法之前,我们首先来回顾一下矩阵行列式的定义和性质。对于一个n阶方阵A,它的行列式记作|A|,定义为:|A| = a11*a22*...*ann + a12*a23*...*a(n-1)n*an1*a21*...*a(n-2)(n-1) + ... + ann*a1n*...*a(n-1)n-1 - a1n*a2(n-1)*...*an(n-2)*ann-1*an1*...*a(n-2)(n-1)
其中,aij表示A的第i行第j列的元素。矩阵行列式具有以下性质:
1. 对角矩阵的行列式等于对角线上各个元素的乘积;
2. 单位矩阵的行列式为1;
3. 互换矩阵的两行(或两列)行列式变号;
4. 如果矩阵的某一行(或某一列)的元素都是0,则它的行列式为0;
5. 如果矩阵的两行(或两列)成比例,则它的行列式为0;
6. 行列式的值与行列式的转置矩阵的值相等;
7. 行列式的值与矩阵的伴随矩阵的值相等。
二、Fortran中计算矩阵行列式的方法
在Fortran中,我们可以使用不同的方法来计算矩阵的行列式的值。下面将介绍两种常用的方法:高斯消元法和拉普拉斯展开法。
1. 高斯消元法
高斯消元法是一种基于矩阵初等变换的方法,通过消元和换行操作,将矩阵化为上三角矩阵或下三角矩阵,从而简化计算过程。具体步骤如下:
最小二乘法fortran应用。
1 T
Tc
Tc = 154.581 !unit: k Pc = 50.43 !unit: bar
c(1) = ? c(2) = ? c(3) = ? c(4) = ?
Βιβλιοθήκη Baidu
编程计算
输出文件Ps.out中部分结果
T(K) Psexp(bar) 55.00 0.0018 55.50 0.0021 56.00 0.0024 56.50 0.0028 57.00 0.0032 57.50 0.0037 58.00 0.0043 58.50 0.0049 59.00 0.0056 59.50 0.0064 60.00 0.0073 60.50 0.0082 61.00 0.0093 61.50 0.0105 62.00 0.0119 62.50 0.0134 63.00 0.0150 63.50 0.0168 64.00 0.0188 64.50 0.0210
(x1, x2,, xn )
取得最小值,该解就称为超定方程组的最小二乘解。
例 1:用最小二乘法求下列超定
方程组的近似解
2x1 x2 1
82xx11
4x2 0 x2 1
7x1 x2 8
4x1 3
解:
2 1
8
4
A 2 1
integer, parameter :: n = 2
matlab使用(解N元方程组)
试着用C语言编程解N元方程组
#include
#define M 10
float fdel(float *p,int n)
{ int i;
float sum=0;
for(i=0;i
sum+=*(p+i);
sum/=n;
return (fabs(sum));
}
void chu(float *p)
{int i;
for(i=0;i
*(p+i)=999;
return ;}
void print(float *p,int n)
{int i;
for(i=0;i
printf("x%d=%f ",i+1,*(p+i));
return ;}
/**void scan(float **p,int n)
{int i,j;
for(i=0;i
for(j=0;j
{printf(" a%d%d=",i+1,j+1);
scanf("%f",*(p+i)+j);}
return ;}**/
void den(float *a,float *b,int n)
{int i;
for(i=0;i
*(a+i)=*(b+i);
return ;}
void jie(float *p0,float a[M][M],float *p,float *b,int n) {float sum=0;
int i,j;
for(i=0;i
{ for(j=0;j
{if(i!=j) sum=sum+a[i][j]*p0[j];
else {n=a[i][j];continue;}
}
*(p+i)=*(b+i)-sum/n;}
}
main()
{ float x0[M],xi[M][M],b[M],x[M];
fortran语言解n元线性方程组
DO I=K+1,N
A(I,:)=A(I,:)-A(I,K)/A(K,K)*A(K,:)
END DO
END DO
X(N)=A(N,N+1)/A(N,N)
DO I=N-1,1,-1
DO J=I+1,N
SUM=SUM+A(I,J)*X(J)
END DO
X(I)=(A(I,N+1)-SUM)/A(I,I)
SUM=0
END DO
PRINT*,X
END
用其他语言编写的话,算法是一样的,只是要改一下其中的循环结构wk.baidu.com
PROGRAM MAIN
IMPLICIT NONE
INTEGER I,J,K,N
REAL:: SUM=0
REAL,ALLOCATABLE::A(:,:)
REAL,ALLOCATABLE::B(:)
REAL,ALLOCATABLE::X(:)
PRINT*,'请输入方程组未知数个数'
READ*,N
ALLOCATE(A(N,N+1))
ALLOCATE(B(N+1))
ALLOCATE(X(N))
PRINT*,'请按列输入方程组的系数和列向量b(即输入增广矩阵A)'
READ*,A
DO K=1,N-1
fortran 教程
fortran 教程
Fortran是一种古老而强大的编程语言,最初在1957年开发。它被广泛用于科学和工程计算,特别是对大型和复杂的计算任务。
Fortran之所以如此受欢迎,是因为它在数学计算领域表现出色。它拥有丰富的数学函数和运算符,并且支持高精度计算。此外,Fortran还具有强大的数组处理能力,可以轻松处理大规模数据。
Fortran的语法相对简单,易于学习和使用。它使用英语类似的语法,语句以换行符结束。Fortran中的语句通常以关键字开始,例如"PROGRAM","SUBROUTINE"和"DO"等。
Fortran具有自己的变量类型,包括整数(INTEGER)、实数(REAL)和字符(CHARACTER)等。变量必须在使用之前先声明,并且可以指定其大小和精度。
Fortran还支持过程式编程,包括子程序和函数的定义。子程序可以接受输入参数,并返回结果。这种模块化的编程方法可以提高代码的可读性和可维护性。
Fortran程序通常由一个主程序(PROGRAM)和若干个子程序(SUBROUTINE)组成。主程序是程序的入口点,而子程序则可以被主程序或其他子程序调用。
Fortran还提供了许多控制结构,包括条件语句(IF-THEN-
ELSE)和循环语句(DO)等。这些结构可以帮助程序在不同
的情况下做出不同的决策和重复执行特定的代码块。
在写Fortran程序时,编码风格非常重要。良好的编码风格可
以使程序更易于阅读和理解,减少错误的发生。在Fortran中,常用的编码风格包括正确缩进、适当的变量命名和注释的使用等。
线性方程组的求解方法详解
线性方程组的求解方法详解
线性方程组是由一系列线性方程组成的方程组,其中每个方程的未知数都是一次项(与其他未知数之间没有乘法关系)。解线性方程组的目标是找到满足所有方程的未知数的值。线性方程组的求解方法有多种,包括高斯消元法、矩阵方法、Cramer法则等。
1.高斯消元法
高斯消元法是求解线性方程组的经典方法之一、它通过将线性方程组转化为行简化阶梯形矩阵的形式,从而求得未知数的值。具体步骤如下:第一步,将线性方程组写成增广矩阵的形式,其中增广矩阵的最后一列为方程组的常数项。
第二步,选择一行(通常选择第一行)为主元行,并将其系数设置为1
第三步,对于其他行,通过消去主元的系数,并使得该列上下的其他系数为零。这一步称为消元操作。
第四步,重复第三步,直到所有行都被消元为止。
第五步,通过回代法,将最简形的增广矩阵转化为解方程组所需的形式。从最后一行开始,将未知数的值代入到其他行的系数中,直到所有未知数都求得其值。
2.矩阵方法
矩阵方法是一种利用矩阵运算求解线性方程组的方法。该方法可以通过矩阵的逆矩阵、伴随矩阵等来求解。具体步骤如下:
第一步,将线性方程组的系数矩阵和常数矩阵写成增广矩阵的形式。
第二步,求解系数矩阵的逆矩阵。
第三步,将逆矩阵和常数矩阵相乘,得到未知数的解向量。
3. Cramer法则
Cramer法则是一种基于行列式的方法,可以求解n元线性方程组。
该方法的基本思想是通过计算行列式的值来求解方程组。具体步骤如下:第一步,计算线性方程组的系数矩阵的行列式值,如果行列式值不为
零则方程组有唯一解,如果行列式值为零,则方程组无解或者有无穷多解。
高等代数第2讲——n元线性方程组解的情况
⾼等代数第2讲——n元线性⽅程组解的情况
在有理数(或实数,或复数)集内(这⼀前提还是很重要的),n元线性⽅程组解的情况有且只有三种情况:(1)⽆解;(2)唯⼀解;(3)⽆穷解。
可以通过两条直线(“直线”对应代数中的“线性”)的关系加以理解:两条直线要么平⾏(对应⽆解),要么相交(对应唯⼀解),要么重合(对应⽆穷解)。
可以通过对线性⽅程组的增⼴矩阵进⾏初等⾏变换,得到最简⾏阶梯矩阵,据此可以判断线性⽅程组解的情况。何谓初等⾏变换呢?
1. 把⼀⾏的倍数加到另⼀⾏
2. 现⾏互换
3. ⼀⾏乘以⼀个⾮0常数
何谓最简⾏阶梯矩阵?它的特点是:
1. 它是阶梯形矩阵
2. 每个⾮零⾏的主元都是1
3. 每个主元所在列的其余元素都是0
与之对应的⽅程组为
上⾯的最简⾏阶梯矩阵中,红框中的元即为主元,或称主变量。⽅程组可写为:
这个表达式称为原线性⽅程线的⼀般解,其中以主元为系数的未知量x1,x3称为主变量,⽽其余未⽮量x2称为⾃由未知量。⼀般解就是⽤含⾃由未知量的式⼦来表⽰主变量。
定理1 n元线性⽅程组的解的情况只有三种可能:⽆解,有唯⼀解,有⽆穷多个解。把n元线性⽅程组的增⼴矩阵经过初等⾏变换化成阶梯矩阵,如果相应的阶梯形⽅程出现"0=d(其中d是⾮零数"这样的⽅程,则原⽅程组⽆解;否则,有解。当有解时,如果阶梯形矩阵的⾮零⾏数⽬r等于未知量数⽬n,则原⽅程组有唯⼀解;如果⾮零⾏数⽬r<n,则原⽅程组有⽆穷个解。如果⼀个线性⽅程组有解,则称它是相容的;否则,称它是不相容的。
下述线性⽅程组有什么特点?它是否⼀定有解?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IMPLICIT NONE
INTEGER I,J,K,N
REAL:: SUM=0
REAL,ALLOCATABLE::A(:,:)
REAL,ALLOCATABLE::B(:)
REAL,ALLOCATABLE::X(:)
PRINT*,'请输入方程组未知数个数'
READ*,N
ALLOCATE(A(N,N+1))
ALLOCATE(B(N+1))
ALLOCATE(X(N))
PRINT*,'请按列输入方程组的系数和列向量b(即输入增广矩阵A)'
READ*,A
DO K=1,N-1
DO WHILE(A(K,K)==0)
B(:)=A(K,:)
DO I=K,N-1
A(I,:)=A(I+1,:)
END DO
A(N,:)=B(:)
END DO
DO I=K+1,N
A(I,:)=A(I,:)-A(I,K)/A(K,K)*A(K,:)
END DO
END DO
X(N)=A(N,N+1)/A(N,N)
DO I=N-1,1,-1
DO J=I+1,N
SUM=SUM+A(I,J)*X(J)
END DO
X(I)=(A(I,N+1)-SUM)/A(I,I)
SUM=0
END DO
PRINT*ຫໍສະໝຸດ BaiduX
END
用其他语言编写的话,算法是一样的,只是要改一下其中的循环结构