博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

zxg623

只为伊人守侯 和我共同营造苍凉的远方 醉解千愁,他处不堪留 我冷因为我看到世界的冷漠,我傲因为孤独的灵魂漂泊于芸芸众生之上,我酷因为没被事故磨去棱角,我狂因为愿意用生命去追求理想,我痴因为还相信爱情的魔力 我的笑隐约透露着孤独,快乐背后深深藏着痛楚,坚强的面对然后偷偷的哭.......
  zxg623.cublog.cn

关于作者
姓名:zxg623
职业:嵌入式
年龄:25
位置:中国·深圳
个性介绍:
|| << >> ||
我的分类


雅克比迭代算法

 

#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
using namespace std;

const int n=3;
//设置方程组的维


float a[n][n],x[n],b[n];

void input_data()
//输入方程组的相关数据

{
    cout<<"输入方程组的系数矩阵a["<<n<<"]["<<n<<"]:"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>a[i][j];
    cout<<"输入x[1,...,"<<n<<"]的初值:"<<endl;
    for(i=0;i<n;i++)
            cin>>x[i];
    cout<<"输入b[1,...,"<<n<<"]的初值:"<<endl;
    for(i=0;i<n;i++)
            cin>>b[i];
}

void output_equation()
//输出方程组

{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(j>0&&a[i][j]>0)
                cout<<"+";
            cout<<a[i][j]<<" x["<<j+1<<"] ";
        }
        cout<<"="<<b[i]<<endl;
    }
}

void main ()
{
    input_data();
    int counter;
//设置计算时迭代的次数

    cout<<"输入迭代的次数"<<endl;
    cin>>counter;
    system("cls");
    output_equation();
    int k=0,i=0;
//k用来统计迭代的次数;i用来表示x的序列

    float m_num1;
//m_x用来保存x的原先值;m_num1用来计算j!=i的数据之和

    cout<<endl;
    cout<<"k\t";
    for(int j=0;j<n;j++)
        cout<<"x["<<j+1<<"]\t\t\t";
    cout<<endl;
    cout<<k<<"\t";
    k++;
    cout << setiosflags(ios::fixed);
//和下一句结合起来用来设定小数位的位数

    cout << setprecision(10);
    float x_next[n];
    for(j=0;j<n;j++)
    {
        cout<<x[j]<<"\t\t";
    }
    cout<<endl;
    do
    {
        m_num1=0;
        for(j=0;j<n;j++)
        {
            if(j!=i)
                m_num1=m_num1+a[i][j]*x[j];
        }
        x_next[i]=(b[i]-m_num1)/a[i][i];
        if(i<n-1)
            i++;
        else
        {
            for(j=0;j<n;j++)
                x[j]=x_next[j];
            cout<<k<<"\t";
            for(j=0;j<n;j++)
                cout<<x[j]<<"\t\t";
            cout<<endl;
            i=0;
            k++;
        };
    }while(k<=counter);
}

发表于: 2008-04-11,修改于: 2008-04-11 00:33,已浏览121次,有评论0条 推荐 投诉


网友评论
 发表评论