注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚楼听风雨

没有理想的人,永远也不能翱翔与蓝天白云之上~

 
 
 

日志

 
 

用C++实现的高斯塞德尔迭代算法  

2007-11-22 00:20:58|  分类: 算法 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

#include <iostream.h>
#include "math.h"
#define row 3
void read_a(float a[][row])
{
 int i,j;
 cout<<"请输入系数矩阵a["<<row<<"]["<<row<<"]:\n";
 for(i=0;i<row;i++)
 {
  for(j=0;j<row;j++)
   cin>>a[i][j];
 }
 cout<<endl;
}
void read_b(float b[])
{
 int i;
 cout<<"请输入结果矩阵b["<<row<<"]:\n";
 for(i=0;i<row;i++)
  cin>>b[i];
 cout<<endl;
}
void read_x0(float x0[])
{
 int i;
 cout<<"请输入初始迭代值矩阵x0["<<row<<"]:\n";
 for(i=0;i<row;i++)
  cin>>x0[i];
 cout<<endl;
}
float max_e(float e_array[])
{
 float t=e_array[0];
 int i;
 for(i=1;i<row;i++)
  if(e_array[i]>t)
   t=e_array[i];
  return t;
}
void print_x1(float x[],int k)
{
 int i;
 cout<<"迭代次数:"<<k<<" root:";
 for(i=0;i<row;i++)
  cout<<"  "<<x[i];
 cout<<endl;
}
void main()
{
 void read_a(float a[][row]),read_b(float b[]),read_x0(float x0[]),print_x1(float x[],int k);
 float max_e(float e_array[]);
 float a[row][row],b[row],x0[row],x1[row];
 float e_array[row];
 float e,e1,d;
 int n,k=1,i,j;
 cout<<"输入想要的精确度:    ";
 cin>>e;
 cout<<"最大迭代次数n:    ";
 cin>>n;
 read_a(a);
 read_b(b);
 read_x0(x0);
 cout<<"---------------------------------------------------------------------\n";
 do{
  for(i=0;i<row;i++)
  {
   float t=0;
   for(j=0;j<row;j++)
   {
    if(j!=i)
    t+=a[i][j]*x0[j];
   }
    x1[i]=(b[i]-t)/a[i][i];
    e_array[i]=fabs(x1[i]-x0[i]);
    x0[i]=x1[i];
  }
   print_x1(x1,k);
   e1=max_e(e_array);
   k++;
 }while(e1>e && k<n);
 if(k>=n)
  cout<<"计算失败!"<<endl;
}


  评论这张
 
阅读(505)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017