• [算法][雅可比迭代解方程组]


     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 #define maxn 50
     5 int n;//维数
     6 double a[maxn][maxn];//系数矩阵
     7 double b[maxn];//b向量
     8 double kc=0.000001;//精度控制常数
     9 double x[maxn];//x向量
    10 double y[maxn];
    11 double e;
    12 int N0;//最大迭代次数
    13 //e=||x-(k+1)-x(k)||.inf.;当e<kc时计算终止;N0为最大迭代次数;
    14 //t用于暂时存放Xi的原值,以便计算Xi-(k)-Xi(k-1)
    15 int i,j,k;
    16 bool read(){
    17     cout<<"|----------------------------------------|
    ";
    18     cout<<"请输入矩阵规模n:= ";
    19     cin>>n;
    20     cout<<"请输入系数矩阵A:= 
    ";
    21     for(i=1;i<=n;i++)//输入a[][]
    22         for(j=1;j<=n;j++)
    23             cin>>a[i][j];
    24     cout<<"请输入b向量b:= 
    ";
    25     for(i=1;i<=n;i++)cin>>b[i];//输入b[]
    26     cout<<"请输入x向量的初始值x:= 
    ";
    27     for(i=1;i<=n;i++)cin>>x[i];//输入x[]初始值
    28     cout<<"请输入估计最大迭代次数N0:= 
    ";
    29     cin>>N0;
    30     return 1;
    31 }
    32 int main(){
    33     while(read()){
    34         for(k=1;k<=N0;k++){
    35             e=-1;
    36             for(i=1;i<=n;i++){
    37                 y[i]=b[i];
    38                 for(j=1;j<=n;j++)if(i!=j){
    39                     y[i]-=a[i][j]*x[j];
    40                 }
    41                 y[i]/=a[i][i];
    42                 if(fabs(x[i]-y[i])>e)e=fabs(x[i]-y[i]);    
    43             }if(e<kc){//输出
    44                 cout<<"|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|
    ";
    45                 cout<<"最大迭代次数 k = "<<k<<'
    ';
    46                 for(i=1;i<=n;i++)cout<<"x["<<i<<"]="<<y[i]<<'
    ';
    47                 goto END;
    48             }else{
    49                 for(i=1;i<=n;i++)x[i]=y[i];    
    50             }
    51         }    
    52         cout<<"|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|
    ";
    53         cout<<"失败
    ";
    54         END:;
    55         cout<<"|----------------------------------------|
    
    ";
    56     }return 0;
    57 }
    58 /*
    59 6
    60 
    61 4 -1 0 -1 0 0
    62 -1 4 -1 0 -1 0
    63 0 -1 4 -1 0 -1
    64 -1 0 -1 4 -1 0
    65 0 -1 0 -1 4 -1
    66 0 0 -1 0 -1 4
    67 
    68 0 5 -2 5 -2 6
    69 
    70 0 0 0 0 0 0
    71 
    72 50
    73 */
  • 相关阅读:
    vim delete
    npm ERR! network connect ETIMEDOUT
    在 ubuntu 14.04 Unity 中清除和关闭 Totem 播放记录
    ubuntu 14.04 上 jvpn 使用说明
    LWP::Protocol::https not installed
    perl 安装模块
    触摸屏工作方式
    如何检测死锁并快速定位死锁位置
    如何用 yum 的一个包替换另一个包
    shell 中 here documemt << 与 <<- 的区别
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3670637.html
Copyright © 2020-2023  润新知