1.
解:
采用列主元高斯消去法求解方程组
算法:
将方程组用增广矩阵[A|b] 表示。 (1)消元过程
对k = 1,2,...n-1。
a.选主元,ik?{k,k?1,.n}..找出列的绝对值最大值,ak,k?max|ai,k|,n?i?k;
b.如果ik?k,则交换 ik对应行 与k行对应元素位置 c.消元
(2)回代过程
采用C语言编程,平台Visual Studio 2010
运行结果为:
x[0] = 0.486483 x[1] = 2.941470 x[2] = -0.903150 x[3] = -2.590945
使
源程序:
/*********************************************************************************** 数值分析作业 第一题 高斯消元法 编程者:ZYF
**********************************************************************************/
#include
//主元高斯消去法
float *ColPivot(float *c,int n) { int i,j,t,k,r; float *x,p;
x = (float *)malloc(n*sizeof(float)); for(r = 0;r < n; r++) //初始化
x[r] = 0;
//列主元消元
for(i = 0 ; i<=n-2;i++) { k = i;
for(j=i+1;j<=n-1;j++) if(fabs(*(c + j*(n+1) + i))>(fabs(*(c + k*(n+1) + i)))) k = j;
if(k != i)
for(j = i;j<=n;j++) //交换行
{
p = *(c + i*(n+1) + j);
*(c + i*(n+1) + j) = *(c + k*(n+1) + j);
*(c + k*(n+1) + j) = p;
}
//消元
for(j = i+1;j<=n-1;j++) { p =(*(c + j*(n+1) + i))/(*(c + i*(n+1) + i)); for(t =i;t<=n;t++)
*(c + j*(n+1) + t) -= p*(*(c + i*(n+1) + t));
}
//比较i和i+1行 }
}
//求解值
for(i = n-1; i>=0;i--) { }
return x;
for(j = n-1;j>=i+1;j--)
(*(c + i*(n+1) + n)) -= x[j]*(*(c + i*(n+1) + j));
x[i] = (*(c + i*(n+1) + n))/(*(c + i*(n+1) + i));
int main() {
int i ; // int j,k; /*
getch(); }
return 0;
for(i = 0;i<=3;i++)
printf(\,i,x[i]); x = ColPivot(c[0],4); for(j = 0;j<=3;j++) for(k=0;k<=4;k++)
printf(\ float *x;
float c[4][5] = { };
2,-1,10,0,-11, 0,3,-1,8,-11, 10,1,2,0,6, -1,11,-1,3,25
//函数输入
*/