| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1407 人关注过本帖
标题:怎么样求高斯消去法的解?大家看下 帮帮忙啊
只看楼主 加入收藏
yesterday2005
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-11-20
收藏
 问题点数:0 回复次数:4 
怎么样求高斯消去法的解?大家看下 帮帮忙啊
#include <stdio.h>
#include <math.h>
void main()
{
 int i,j,k,n,l,h,flag;
 float a[100][100],b[100],m[100][100],x[100],y[100],z[100],c[100],d,t;

 printf("Input n:\n");
 scanf("%d",&n);

 printf("input a[i][j]:\n");
 for (i=0;i<n;i++)
 {
 for (j=0;j<n;j++)
 {
 scanf("%f",&a[i][j]);
 }
 }
 printf("input b[i]:\n");
 for (i=0;i<n;i++)
 {
 scanf("%f",&b[i]);
 }

 /*******运算过程*******/
 flag=1;
 for (k=0;k<n;k++)
 {
 /*---选主元素---*/
  
 d=a[k][k];
 h=k;
 for(l=k;l<n;l++)  
 {  
 if(fabs(a[l][k])>fabs(d))
 {  
 d=a[l][k];  
 h=l;  
 }  
 }  
 if(h!=k)  
 {  
 for(j=k;j<n;j++)  
 {  
 t=a[h][j];a[h][j]=a[k][j];a[k][j]=t;  
 }  
 t=b[k];b[k]=b[h];b[h]=t;  
 }
 if(a[k][k]==0)
 flag=0;

 /*---具体运算---*/
 for (i=k+1;i<n;i++)
 {
 if(flag==0)
 break;
 m[i][k]=a[i][k]/a[k][k];
 for(j=k;j<n;j++)
 {
 a[i][j]=a[i][j]-m[i][k]*a[k][j];
 }
 b[i]=b[i]-m[i][k]*b[k];
 }
 }

 /*******回代过程*******/
 if(flag!=0)
 {
 x[n-1]=b[n-1]/a[n-1][n-1];
 for(i=n-2;(i>0)||(i==0);i--)
 {
 y[i]=0;
 for(j=i+1;j<n;j++)
 {
 y[j]=y[j-1]+a[i][j]*x[j];
 }
 x[i]=(b[i]-y[j-1])/a[i][i];
 }

 /*******输出结果*******/
 for(i=0;i<n;i++)
 {
 printf("x[%d]=%f\n",i,x[i]);
 }
 }
 else
 printf("oh my god!\n");
}
-------------------------------------------------------
测试:
1.输入
4
0 0 0 1
0 0 1 1  
0 1 1 1
1 1 1 1

1 2 3 4
输出
x[1]=1.000000
x[2]=1.000000
x[3]=1.000000
x[4]=1.000000

2.输入
2
0 0  
0 0

1 1

输出
oh my god!


c语言我也是新手,学了一点,考过了就忘光了
由于数值计算方法有这样一道作业
发现上面的有点漏洞
时间比较仓促,没好好化简程序,代码也很简单,算是能算的,但是几乎是不惜一切成本的。- -
急用的就凑合着复制过去吧


—————————————————————————————————————————————————————————————————————————————————
上面是一个高斯消去法的一个程序 我现在需要设计的跟他有点不一样 我只要求多个二元一次方程的解 例如ax+by=c,知道 a,b 和c求x,y
第一个问题: 我想把上面的程序修改下 可是不知道怎么修改才能把所有的x,y的值全部显示出来?
比如说有16个这样的方程 我们就可能得到几组不同的x,y的解 我想要知道怎么样才能把这些解全部显示出来 因为如果我把j改成2的话 就是两行
但是我算出来的结果总是显示两个大家知道怎么显示所有的吗 ?可能不是很难 但我是新手 谢谢啦
第二个问题:再有就是如果我算2x+y=10,x-y=-5, 我不去改变这个程序
我直接输入n=4
2 1 0 0
1 -1 0 0
0 0 0 0
0 0 0 0
然后输入:
10,-5,0,0
也得不到解 请问大家怎么回事 很着急啊 谢谢大家了
搜索更多相关主题的帖子: 高斯 消去法 
2008-11-21 02:50
hsxyhq
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-11-3
收藏
得分:0 
第一个问题:将16个方程 分成8个二元一次方程组! 每个计算  然后 显示!
第二个问题:输入:n=2 2  1
                     1 -1
                     
                     10 -5
就行了!
2008-11-28 09:36
hsxyhq
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-11-3
收藏
得分:0 
第一个问题:将16个方程 分成8个二元一次方程组! 每个计算  然后 显示!
第二个问题:输入:n=2 2  1
                     1 -1
                     
                     10 -5
就行了!
2008-11-28 09:36
stellar_yang
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2009-11-6
收藏
得分:0 
学习
2009-11-10 11:54
dmxp2010
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-5-17
收藏
得分:0 
bucuoa
2010-06-10 12:52
快速回复:怎么样求高斯消去法的解?大家看下 帮帮忙啊
数据加载中...
 
   



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

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