資源簡介
使用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;
- 上一篇:南京航空航天大學 皮德常 c++ 源代碼
- 下一篇:數據結構——教學編制問題.rar
評論
共有 條評論