• 大小: 6KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-06-25
  • 语言: C/C++
  • 标签: LU  C语言  

资源简介

使用LU分解法,来解线性方程组,用C语言写的源程序

资源截图

代码片段和文件信息

#include 
#include 
#define N 10 //矩阵大小范围
/*
* 使用已经求出的x,向前计算x(供getx()调用)
* float a[][] 矩阵U
* float x[] 方程组解
* int i 解的序号(数组X元素序号)
* int n 矩阵大小
* return 公式中需要的和
*/
float getmx(float a[N][N] float x[N] int i int n)
{
float mx = 0;
int r;
for(r=i+1; r{
mx += a[i][r] * x[r];
}
return mx;
}
/*
* 使用已经求出的y,向前计算y(供gety()调用)
* float a[][] 矩阵L
* float y[] 数组Y
* int i 数组Y元素序号
* int n 矩阵大小
* return 公式中需要的和
*/
float getmy(float a[N][N] float y[N] int i int n)
{
float my = 0;
int r;
for(r=0; r{
if(i != r) my += a[i][r] * y[r];
}
return my;
}
/*
* 解方程组,计算某x
* float a[][] 矩阵U
* float x[] 方程组解
* int i 解的序号
* int n 矩阵大小
* return 方程组的第i个解(数组X的第i个元素值)
*/
float getx(float a[N][N] float b[N] float x[N] int i int n)
{
float result;
if(i==n-1) //计算最后一个x的值
result = (float)(b[i]/a[n-1][n-1]);
else //计算其他x值(对于公式中的求和部分,需要调用getmx()函数)
result = (float)((b[i]-getmx(axin))/a[i][i]);
return result;
}
/*
* 解数组Y,计算其中一元素值
* float a[][] 矩阵L
* float y[] 数组Y
* int i 数组Y元素序号
* int n 矩阵大小
* return 数组Y的第i个元素值
*/
float gety(float a[N][N] float b[N] float y[N] int i int n)
{
float result;
if(i==0) //计算第一个y的值
result = float(b[i]/a[i][i]);
else //计算其他y值(对于公式中的求和部分,需要调用getmy()函数)
result = float((b[i]-getmy(ayin))/a[i][i]);
return result;
}
void main()
{
float l[N][N]={0}; //定义L矩阵
float u[N][N]={0}; //定义U矩阵
float y[N]={0}; //定义数组Y
float x[N]={0}; //定义数组X
float a[N][N]={{211}{132}{122}}; //定义系数矩阵
float b[N]={465}; //定义右端项
float sum=0;
int ijk;
int n=3;
int flag=1;

评论

共有 条评论