调用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的应该是正确的因为是别人给我的一个使用指南上面的~~~求指教,已经困扰很久了~~