123下一页
返回列表 发新帖
收起左侧

共轭梯度法ICCG的源程序(C语言)

  [复制链接]
发表在  2008-5-11 16:58:40  | 显示全部楼层 | 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转微网社区

您需要 登录 才可以下载或查看,没有帐号?注册

x
调试了一个ICCG的源代码,对测试的矩阵还可以,还不知道其他矩阵行不行
数组采用压缩数据保存
游客,如果您要查看本帖隐藏内容请回复
已有1人评分微元 理由
彬彬 + 20 + 1 原创内容

查看全部评分 总评分:微元 +20  +1 

以己之微·网博天下:博览微网之术·创造成功之路!
发表于 2016-3-14 19:13:50  | 显示全部楼层
正在学习  求解线性方程组方法呢,  谢谢楼主分享宝贵资源
以己之微·网博天下:博览微网之术·创造成功之路!
回复 支持 反对

使用道具 举报

发表于 2013-5-31 19:38:22  | 显示全部楼层
有没有介绍一维压缩存储条件下ICCG算法的资料?
以己之微·网博天下:博览微网之术·创造成功之路!
回复 支持 反对

使用道具 举报

发表于 2016-4-20 21:18:56  | 显示全部楼层
学习一下,最近在搞这些东西,很是困惑
以己之微·网博天下:博览微网之术·创造成功之路!
回复 支持 反对

使用道具 举报

发表于 2008-5-11 22:32:50  | 显示全部楼层
好久没有用过C了~~~

:11bb
以己之微·网博天下:博览微网之术·创造成功之路!
发表于 2008-5-15 11:22:01  | 显示全部楼层
把数据类型改成Complx,就可以计算复数矩阵
以己之微·网博天下:博览微网之术·创造成功之路!
发表于 2009-5-9 22:43:00  | 显示全部楼层
华丽的程序啊,把俺的下巴都看大了
以己之微·网博天下:博览微网之术·创造成功之路!
发表于 2010-4-26 16:12:30  | 显示全部楼层
[ 本帖最后由 kerbcurb 于 2012-10-26 17:52 编辑 ]\n\n[ 本帖最后由 kerbcurb 于 2012-10-26 17:50 编辑 ]\n\n[ 本帖最后由 kerbcurb 于 2012-10-26 17:49 编辑 ]\n\n[ 本帖最后由 kerbcurb 于 2012-10-26 17:48 编辑 ]\n\n[i=s] 本帖最后由 kerbcurb 于 2010-4-27 08:19 编辑 [/i]

CG好像不是很快,楼主的代码我没试验过,以下的代码是根据金建铭有限元的书上的fortran修改的,对稀疏矩阵稍作优化【if ( abs ( ... ) != 0 )这一句】,如果是稠密矩阵,这一句要去掉。以下的代码是针对复矩阵,改成实矩阵应该很容易。
[code]void PROD ( complex<float>** A, complex<float>* X, complex<float>*& AX, int N, bool Flag )
{   
        memset ( AX, 0, sizeof ( complex<float> ) * N );    if ( Flag )
        for ( int i = 0; i < N; i++ )
        {
            for ( int j = 0; j < N; j++ )
            {      
                    if ( abs ( A[j][i] ) != 0 && abs ( X[j] ) != 0 )
                    AX[i] += A[j][i] * X[j];
            }
        }
    else
        for ( int i = 0; i < N; i++ )
        {
            for ( int j = 0; j < N; j++ )
            {
                if ( abs ( A[i][j] ) != 0 && abs ( X[j] ) != 0 )
                    AX[i] += A[i][j] * X[j];
            }
        }
}//---------------------------------------------------------------------------
float VNORM ( complex<float>* Z, int N )
{
    float SUM = 0;
    for ( int i = 0; i < N; i++ )
    {
        if ( abs ( Z[i] ) != 0 )
            SUM += abs ( Z[i] * Z[i] );
    }
    return SUM;
}
//---------------------------------------------------------------------------
void CGM ( complex<float>** A, complex<float>* B, complex<float>*& X, int N, int ITMAX, float TOL )
{
    float vnorm = VNORM ( B, N ), TEMP;
    int ITER = 0;
    float ALPHA, BETA, RSS;
    complex<float> *P, *R, *AX;
    P = new complex<float>[N];
    R = new complex<float>[N];
    AX = new complex<float>[N];
    memset ( X, 0, sizeof ( complex<float> ) * N );
    PROD ( A, X, AX, N, false );    for ( int i = 0; i < N; i++ )
    {
        R[i] = B[i] - AX[i];
    }
    PROD ( A, R, AX, N, true );
    TEMP = VNORM ( AX, N );
    BETA = 1.0 / TEMP;    for ( int i = 0; i < N; i++ )
    {
        if ( abs ( AX[i] ) != 0 )
            P[i] = BETA * AX[i];
    }
    while ( ITER < ITMAX )
    {
        PROD ( A, P, AX, N, false );
        TEMP = VNORM ( AX, N );
        ALPHA = 1.0 / TEMP;
        for ( int i = 0; i < N; i++ )
        {
            if ( abs ( P[i] ) != 0 )
                X[i] += ALPHA * P[i];
            if ( abs ( AX[i] ) != 0 )
                R[i] -= ALPHA * AX[i];
        }
        PROD ( A, R, AX, N, true );
        TEMP = VNORM ( AX, N );
        BETA = 1.0 / TEMP;
        for ( int i = 0; i < N; i++ )
        {
            if ( abs ( AX[i] ) != 0 )
                P[i] += BETA * AX[i];
        }
        ITER++;
        RSS = sqrtl ( VNORM ( R, N ) / vnorm );
        if ( RSS <= TOL )
            break;
    }
    delete[]AX;
    delete[]R;
    delete[]P;
}[/code]
已有1人评分 理由
cem-uestc + 1 发布奖励

查看全部评分 总评分: +1 

以己之微·网博天下:博览微网之术·创造成功之路!
发表于 2010-4-26 16:24:06  | 显示全部楼层
另外测试过mgmres,可能我不得要领,感觉也不快,我感觉如果不安稀疏存储的话,高斯消去法最快
以己之微·网博天下:博览微网之术·创造成功之路!
发表于 2010-4-27 08:21:52  | 显示全部楼层
发贴好像会产生一些问题,A[i][j]发出来以后会变成:A[i]或者A[j]少一个方括号,不知道是什么原因
以己之微·网博天下:博览微网之术·创造成功之路!
发表于 2010-4-27 21:10:19  | 显示全部楼层
论坛帖C语言代码,要出现问题,可能是网页的过滤
以己之微·网博天下:博览微网之术·创造成功之路!
发表于 2011-5-7 23:17:21  | 显示全部楼层
我一定得要学会~~~~~~~~~~~~~!!!!
以己之微·网博天下:博览微网之术·创造成功之路!
发表于 2011-5-8 17:16:19  | 显示全部楼层
谢谢分享~
以己之微·网博天下:博览微网之术·创造成功之路!

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心 搜索
关于我们
关于我们
友情链接
联系我们
站务中心
发展历程
合作伙伴
社区推荐
服务支持
服务条款
免责声明
广告合作
关注我们
官方微博
官方空间
官方微信

QQ|微网社区 ( 蜀ICP备09016811号 )|

GMT+8, 2021-12-5 12:23

Powered by Discuz! X3.4 Design by Comiis

Copyright © 2006-2020 Mwtee.Com All Rights Reserved.

快速回复 返回顶部 返回列表