Matrix类中的getColVector问题
来源:互联网 发布:秦皇岛网络问政平台 编辑:程序博客网 时间:2024/04/30 13:13
1. 原书写作:
int Matrix::GetColVector(int Col,double* pvector)const{
if(pvector==NULL)
delete pvector;
pvector=new double[m_NumRows];//在里面分配
for (int j=0;j<m_NumRows;j++)
{
pvector[j]=GetElement(j,Col);
}
return m_NumRows;
}
调用时:
double *pb=NULL;
//调用时有问题。pb为空(因为是传指针值,返回后为空),
b.GetColVector(0,pb);
2.修改
int Matrix::GetColVector(int Col,double** pvector)const{
if(pvector==NULL)
delete pvector;
*pvector=new double[m_NumRows];
for (int j=0;j<m_NumRows;j++)
{
(*pvector)[j]=GetElement(j,Col);
}
return m_NumRows;
}
调用时:
double *pb=NULL;
//传指针的指针
b.GetColVector(0,&pb);//在GetColVector里面分配
delete pb;//记得释放
3.完整的mfc的view类方法实现:
//全主元素gauss消去法,写在view类里
int CNumricAnalysis_zhoucfDlg::gauss(int n,double a[],double b[]){
int *js,l,k,i,j,is,p,q;
double d,t;
js=(int *)malloc(n*sizeof(int));
l=1;
for(k=0;k<=n-2;k++){
d=0.0;
for(i=k;i<=n-1;i++)
for(j=k;j<=n-1;j++){
t=fabs(a[i*n+j]);
if(t>d)
{
d=t;
js[k]=j;
is=i;
}
}
if(d+1.0==1.0)l=0;
else{
if(js[k]!=k)
for(i=0;i<=n-1;i++)
{
p=i*n+k;q=i*n+js[k];
t=a[p];a[p]=a[q];a[q]=t;
}
if(is!=k){
for(j=k;j<=n-1;j++){
p=k*n+j;q=is*n+j;
t=a[p];a[p]=a[q];a[q]=t;
}
t=b[k];b[k]=b[is];b[is]=t;
}
}
if(l==0)
{
free(js);
printf("fail\n");
return 0;
}
d=a[k*n+k];
printf("----d=%f\n",d);
for(j=k+1;j<=n-1;j++)
{
p=k*n+j;a[p]=a[p]/d;
}
b[k]=b[k]/d;
// printf("a[0]=%f,a[1]=%f b[0]=%f\n",a[0],a[1],b[0]);
// printf("a[2]=%f,a[3]=%f b[1]=%f\n",a[2],a[3],b[1]);
for (i=k+1;i<=n-1;i++)
{
for (j=k+1;j<=n-1;j++)
{
p=i*n+j;
a[p]=a[p]-a[i*n+k]*a[k*n+j];
// printf("b[%d]=%f\n",i,b[i]);
}
b[i]=b[i]-a[i*n+k]*b[k];
}
}
d=a[(n-1)*n+n-1];
if(fabs(d)+1.0==1.0)
{
free(js);
printf("fail\n");
return 0;
}
b[n-1]=b[n-1]/d;
for(i=n-2;i>=0;i--)
{
t=0.0;
for (j=i+1;j<=n-1;j++)
{
t=t+a[i*n+j]*b[j];
}
b[i]=b[i]-t;
}
js[n-1]=n-1;
for (k=n-1;k>=0;k--)
{
if(js[k]!=k)
{
t=b[k];b[k]=b[js[k]];b[js[k]]=t;
}
}
free(js);
return 1;
}
void CNumricAnalysis_zhoucfDlg::OnGuass()
{
UpdateData();
Matrix a,b,c;
//
// ::MessageBox(NULL,m_strA,m_strA,MB_OK);
a.FromString(m_strA);
b.FromString(m_strB);
double *pb=NULL;//(double*)malloc(b.GetNumCols()*sizeof(double));
b.GetColVector(0,&pb);
// char* ss=ftoa(1,pb[1]);
if(pb!=NULL)
{
::MessageBox(NULL,"pb","",2);
}
double *pa=a.GetData();
if(pa!=NULL)
{
::MessageBox(NULL,"pa","pa not null",2);
}
///调用
this->gauss(a.GetNumCols(), pa,pb);
char tmp[100];
memset(tmp,0,100);
CString ss;
for(int m=0;m<b.GetNumCols();m++)
{
sprintf(&tmp[10*m],"%10.5f,",pb[m]);
//ss+=
}
::MessageBox(NULL,tmp,"result is x=",2);
}
操作例图:
- Matrix类中的getColVector问题
- Android中的Matrix类介绍
- flann 中的matrix类赋值
- Android中的Matrix类与ColorMatrix类
- Android中的Matrix类的使用
- mkhd中的matrix
- Directx中的Matrix.LookAtLH();
- XNA中的Matrix结构
- 关于Bitmap中的 Matrix
- Android 中的Matrix 理论基础
- Android中的Matrix
- 理解 Android 中的 Matrix
- ImageView+Matrix移动问题
- matrix 类
- Matrix类
- Matrix类
- android 中的 Matrix,ColorMatrix 详解
- python中的matrix与array
- Iterator迭代器
- google开放的一些接口
- 2011年北京大学计算机研究生机试真题(dijkstra+优先队列)
- POJ 1236 Network of Schools tarjan强连通缩点
- sql2000安装时,挂起的问题。
- Matrix类中的getColVector问题
- strcm--wcscmp
- 喝水时刻表
- 29、Failure Groups in ASM
- Android应用开发之短信窃听器(补充)
- Gridview用法大总结(牛年珍藏版)
- ASp.net 剖析三层架构
- 30、通过rman backup as copy移动数据文件
- 改进音乐播放器