| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2206 人关注过本帖
标题:[求助]计算方法的作业
只看楼主 加入收藏
linlinhappy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-12-26
收藏
得分:0 
19楼的caiqiufu
我想和你聊聊好吗
2006-12-29 22:14
Welton
Rank: 2
等 级:论坛游民
帖 子:65
专家分:38
注 册:2006-10-25
收藏
得分:0 

#include<stdio.h>
#include<math.h>
#define N 3
/*N为矩阵的阶数*/
int maxlie(float a[N][N],int flag);
void huanhang(float a[N][N],int p,int q);
void xiaoyuan(float a[N][N],int flag);
int main()
{
int i,j,cur;
float a[N][N],b[N][N];
printf("请输入矩阵的各元素!\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%f",&a[i][j]);
for(i=0;i<N;i++)
{
cur=maxlie(a,i);
if(cur!=i)
huanhang(a,cur,i);
xiaoyuan(a,i);
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%-5.6f ",a[i][j]);
printf("\n");
}
getch();
return 0;
}

int maxlie(float a[N][N],int flag)
{
int i,j;
float f;
f=fabs(a[i][flag]);
j=flag;
for(i=flag+1;i<N;i++)
{
if(f>=fabs(a[i][flag]))
continue;
else
{
f=fabs(a[i][flag]);
j=i;
}

}

return j;
}
void huanhang(float a[N][N],int p,int q)
{
int i;
float b[N];
for(i=0;i<N;i++)
{
b[i]=a[p][i];
a[p][i]=a[q][i];
}
for(i=0;i<N;i++)
{
a[q][i]=b[i];
}
}

void xiaoyuan(float a[N][N],int flag)
{
float chushu;
int i,j;

for(i=flag+1;i<N;i++)
{
chushu=a[i][flag]/a[flag][flag];
a[i][flag]=0;
for(j=flag+1;j<N;j++)
{
a[i][j]=a[i][j]-a[flag][j]*chushu;
}

}

}


时间不多写的不知道,满足你的要求不?真羡慕你们写这东西,我们直接考试,各种的矩阵变换及插值加速方法等等!
我又看了看,还以为是列主元的Gauss变换!我再看看吧,有时间的话给你回复!!

[此贴子已经被作者于2006-12-29 22:25:20编辑过]


只是喜欢编程而已!
2006-12-29 22:17
linlinhappy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-12-26
收藏
得分:0 
谢谢~~非常谢谢
2006-12-29 22:34
Welton
Rank: 2
等 级:论坛游民
帖 子:65
专家分:38
注 册:2006-10-25
收藏
得分:0 

#include<stdio.h>
#include<math.h>
#define N 2
/*N为矩阵的阶数*/
int maxlie(float a[N][N],int flag);
void huanhang(float a[N][N],float b[N][N],int p,int q);
void xiaoyuan(float a[N][N],float b[N][N],int flag);
void rot(float a[N][N],float b[N][N]);
void qiujg(float a[N][N],float b[N][N]);
int main()
{
int i,j,cur;
float a[N][N],b[N][N];
printf("请输入矩阵的各元素!\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%f",&a[i][j]);
if(i==j)
b[i][j]=1;
else
b[i][j]=0;
}

}
for(i=0;i<N;i++)
{
cur=maxlie(a,i);
if(cur!=i)
huanhang(a,b,cur,i);
xiaoyuan(a,b,i);
}
rot(a,b);
for(i=0;i<N;i++)
{
cur=maxlie(a,i);
if(cur!=i)
huanhang(a,b,cur,i);
xiaoyuan(a,b,i);
}
rot(a,b);
qiujg(a,b);

for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%-5.6f ",b[i][j]);
printf("\n");
}
getch();
return 0;
}

int maxlie(float a[N][N],int flag)
{
int i,j;
float f;
f=fabs(a[i][flag]);
j=flag;
for(i=flag+1;i<N;i++)
{
if(f>=fabs(a[i][flag]))
continue;
else
{
f=fabs(a[i][flag]);
j=i;
}

}

return j;
}
void huanhang(float a[N][N],float b[N][N],int p,int q)
{
int i;
float c[N];
for(i=0;i<N;i++)
{
c[i]=a[p][i];
a[p][i]=a[q][i];
}

for(i=0;i<N;i++)
{
a[q][i]=c[i];
}

for(i=0;i<N;i++)
{
c[i]=b[p][i];
b[p][i]=b[q][i];
}
for(i=0;i<N;i++)
{
b[q][i]=c[i];
}
}

void xiaoyuan(float a[N][N],float b[N][N],int flag)
{
float chushu;
int i,j;

for(i=flag+1;i<N;i++)
{
chushu=a[i][flag]/a[flag][flag];
a[i][flag]=0;
for(j=flag+1;j<N;j++)
{
a[i][j]=a[i][j]-a[flag][j]*chushu;

}
for(j=0;j<N;j++)
{
b[i][j]=b[i][j]-b[flag][j]*chushu;

}

}

}

void rot(float a[N][N],float b[N][N])
{
int i,j;
float c[N][N],d[N][N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
c[i][j]=a[N-i-1][N-j-1];
d[i][j]=b[N-i-1][N-j-1];
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
a[i][j]=c[i][j];
b[i][j]=d[i][j];
}

}

void qiujg(float a[N][N],float b[N][N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=b[i][j]/a[i][i];
}
我改了,看看能不能行!我用的是列主元行变换方法,与你说的应该是一样的!


只是喜欢编程而已!
2006-12-29 22:59
快速回复:[求助]计算方法的作业
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032077 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved