📄 matcal.cpp
字号:
// matcal.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
int countcolumn(FILE * fp)
{
char sh;
int lie;
lie=0;
sh=getc(fp);
while(sh==' '||sh=='\n')
sh=getc(fp);
while((sh!='\n')&&(sh!=EOF))
{
sh=getc(fp);
if(sh==' '||sh=='\n'||sh==EOF)
lie++;
while(sh==' ')
sh=getc(fp);
}
return(lie);
}
int countrow(FILE * fp)
{ char sh;
int flag=0;
int n=0;
rewind(fp);
sh=getc(fp);
while(sh==' '||sh=='\n')
sh=getc(fp);
while(flag==0)
{
while((sh!='\n')&&(sh!=EOF))
{
if(sh!=' ') flag=1;
else ;
sh=getc(fp);
}
if(sh=='\n')
{
if(flag==1)
{
n++;
flag=0;
}
else flag=1;
sh=getc(fp);
}
else if(sh==EOF)
{
if(flag==1)
{
n++;
flag=0;
}
else flag=1;
}
}
return(n);
}
void readin(FILE * fp,float * mat,int num)
{
int i;
rewind(fp);
for(i=0;i<num;i++)
fscanf(fp,"%f",&mat[i]);
}
void main(int argc, char *argv[])
{
int m,n,z,w;
FILE * fp1;
FILE * fp2;
float *a;
float *b;
CvMat * ymatrix;
CvMat * amatrix;
CvMat * invertmatrix;
CvMat * resultmatrix;
if((fp1=fopen("c:\\input1.txt","rt"))==NULL)
{
printf("cannot open file");
exit(0);
}
if((fp2=fopen("c:\input2.txt","rt"))==NULL)
{
printf("cannot open file");
exit(0);
}
else printf("open successfully\n");
w=countcolumn(fp1);
z=countrow(fp1);
m=countcolumn(fp2);
n=countrow(fp2);
printf("%d%d%d%d",z,w,n,m);
a=(float *)malloc(sizeof(float)*(n*m));
b=(float *)malloc(sizeof(float)*(z*w));
readin(fp1,b,z*w);
readin(fp2,a,n*m);
// for(int i=0;i<z*w;i++)
// printf("%6.1f",b[i]);
// printf("\n");
// for(i=0;i<n*m;i++)
// printf("%6.1f",a[i]);
ymatrix=cvCreateMat(z,w,CV_32FC1);
amatrix=cvCreateMat(n,m,CV_32FC1);
invertmatrix=cvCreateMat(m,n,CV_32FC1);
resultmatrix=cvCreateMat(m,w,CV_32FC1);
cvSetData(ymatrix,b,CV_AUTOSTEP);
cvSetData(amatrix,a,CV_AUTOSTEP);
// cvSolve(amatrix,ymatrix,resultmatrix,CV_SVD);
cvInvert(amatrix,invertmatrix,CV_SVD);
cvMatMulAdd(invertmatrix,ymatrix,0,resultmatrix);
printf("\nA:");
for(int i=0;i<n*m;i++){
if(i%m==0) printf("\n");
printf("%f\t",amatrix->data.fl[i]);
}
for(i=0;i<m*n;i++){
if(i%n==0) printf("\n");
printf("%f\t",invertmatrix->data.fl[i]);
}
printf("\n\nb:\n");
for( i=0;i<z*w;i++){
printf("%f\t\n",ymatrix->data.fl[i]);
}
printf("\n\nX:\n");
for( i=0;i<m*w;i++){
printf("%f\t",resultmatrix->data.fl[i]);
}
cvReleaseMat(&ymatrix);
cvReleaseMat(&amatrix);
cvReleaseMat(&resultmatrix);
free(a);
free(b);
fclose(fp1);
fclose(fp2);
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -