| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 459 人关注过本帖
标题:调用CLAPACK函数出现的问题
只看楼主 加入收藏
lee891031
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-12-10
收藏
 问题点数:0 回复次数:0 
调用CLAPACK函数出现的问题
调用dgebal函数,求对角相似变换。
我是照着fortran代码把它变成c代码的。
fortran代码如下:
program main

    implicit none
    real(8) :: aaa(2,2),ttt(2,2),bbb(2,2)
    character(1) :: job
    integer :: n,lda,ilo,ihi,info,i
    real(8) :: scale(2)
    aaa=reshape(  (/1.d0,3d-6,2d6,4.d0/),         (/2,2/)  )
    job='B'
    n=2
    lda=2
    ttt=0.
    call dgebal( job, n, aaa, lda, ilo, ihi, scale, info )

    forall(i=1:2)
        ttt(i,i)=scale(i)
    end forall
   
    bbb=aaa
   
    print *,bbb
    print *,ttt

end program
输出为:1                         1.907348
             3.145728              4.00000
         
             1048576.0000      0.000000     
            0.0000000            1.00000000(我已经按照矩阵形式打出)
==============================
我写的c的代码如下:
#include<stdio.h>

extern"C"
{
#include"blaswrap.h"
#include"f2c.h"
#include"clapack.h"
}

void main()
{
    char job='B';
    double a[4]={1e0,3e-6,2e6,4e0};
    doublereal scale[2];
    integer n=2;
    integer lda=2;
    integer ilo,ihi;
    integer info;
    dgebal_(&job, &n, a, &lda, &ilo, &ihi, scale, &info);
    if(info==0)
    {
    for(int i=0;i<4;i++)
    {
        printf("a[%d]=%lf\n",i,a[i]);
    }
    }
    else
    {
        printf("error\n");
    }
    for(int m=0;m<2;m++)
    {
        printf("scale[%d]=%lf\n",m,scale[m]);
    }
}
  输出为:1.000000       0.953674
                 6.291456       4.000000(我直接输出的数组a,仍然已经按照矩阵形式输出)

        scale【0】=2097152.000000   scale【1】=1.0000000(也就是上面fortran里面的ttt的对角)


为什么输出会不一样?fortran的应该是正确的因为是别人给我的一个使用指南上面的~~~求指教,已经困扰很久了~~

搜索更多相关主题的帖子: CLAPACK 函数 
2010-12-10 15:39
快速回复:调用CLAPACK函数出现的问题
数据加载中...
 
   



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

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