| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 589 人关注过本帖
标题:[求助]怎样搭建矩阵
只看楼主 加入收藏
zwjjwz_110
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-11-9
收藏
 问题点数:0 回复次数:7 
[求助]怎样搭建矩阵

有一个大的矩阵,大致可以分为3到4块(指的是对角线),每块的维数是不确定的,所以大矩阵的维数也是不确定的!!在程序执行的过程才可以知道每一块的维数,最终要把大的矩阵搭建起来!!不知道我说的意思大家明不明白!!请问大家有什么好的方法!!谢谢!!

搜索更多相关主题的帖子: 矩阵 
2007-10-17 17:36
zwjjwz_110
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-11-9
收藏
得分:0 
麻烦帮帮忙吧
图片附件: 游客没有浏览图片的权限,请 登录注册

2007-10-17 17:41
valentineyzq
Rank: 1
等 级:新手上路
威 望:1
帖 子:69
专家分:0
注 册:2007-8-21
收藏
得分:0 
举个具体的例子好吗?

我的世界曾经下过一场倾盆大雨。
2007-10-17 18:47
zwjjwz_110
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-11-9
收藏
得分:0 
以下是引用valentineyzq在2007-10-17 18:47:24的发言:
举个具体的例子好吗?

这个不好说!!是我的课题!!比如一个矩阵H,对角线上可以分为A,B两块,非对角线上角是个矩阵D,下角是个零矩阵。矩阵A,B,D维数不确定,只有在程序运行时才知道。得到A,B,D矩阵后要组建起H矩阵。请问大家有什么好的方法。因为要组建很多个!!老师说一味的判断会影响速度!!大家有什么好的方法吗!!初学C++!!很多地方没有学会!!自己编了一个简单的还没有组建!!请高手指点一下!!

2007-10-18 09:49
zwjjwz_110
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-11-9
收藏
得分:0 

#include<iostream.h>
double *EMGD_H;
const int GS=10;
class generator
{
public:
//generator();
void Setcanshu(double Td011,double Tq011,double Td022,double Tq022,double D1,double M1,int Mnumber1);
void GetEMGD_H1();
void GetEMGD_H2();
void GetEMGD_H3();
void GetEMGD_H4();
int Getnum(){return Mnumber;}
//~generator();
private:
double Td01,Tq01,Td02,Tq02;
double D,M;
int Mnumber;
};
void generator::Setcanshu(double Td011,double Tq011,double Td022,double Tq022,double D1,double M1,int Mnumber1)
{
Td01=Td011;
Tq01=Tq011;
Td02=Td022;
Tq02=Tq022;
D=D1;
M=M1;
Mnumber=Mnumber1;
}
void generator::GetEMGD_H1()
{
EMGD_H=new double[Mnumber*Mnumber];
EMGD_H[0]=-1/Td01;
}
void generator::GetEMGD_H2()
{
EMGD_H=new double[Mnumber*Mnumber];
EMGD_H[0]=-1/Td01;
EMGD_H[1]=0;
EMGD_H[2]=0;
EMGD_H[3]=-1/Tq01;
}
void generator::GetEMGD_H3()
{
EMGD_H=new double[Mnumber*Mnumber];
EMGD_H[0]=-1/Td01;
EMGD_H[1]=0;
EMGD_H[2]=0;
EMGD_H[3]=1/Td02-1/Td01;
EMGD_H[4]=-1/Td02;
EMGD_H[5]=0;
EMGD_H[6]=0;
EMGD_H[7]=0;
EMGD_H[8]=-1/Tq01;
}
void generator::GetEMGD_H4()
{
EMGD_H=new double[Mnumber*Mnumber];
EMGD_H[0]=-1/Td01;
EMGD_H[1]=0;
EMGD_H[2]=0;
EMGD_H[3]=0;
EMGD_H[4]=1/Td02-1/Td01;
EMGD_H[5]=-1/Td02;
EMGD_H[6]=0;
EMGD_H[7]=0;
EMGD_H[8]=0;
EMGD_H[9]=0;
EMGD_H[10]=-1/Tq01;
EMGD_H[11]=0;
EMGD_H[12]=0;
EMGD_H[13]=0;
EMGD_H[14]=1/Tq02-1/Tq01;
EMGD_H[15]=-1/Tq02;
}
/*generator::~generator()
{
delete[] EMGD_H;
}*/
void main()
{
int i,j,k,l;
int weishu;
generator GSzwj[GS];
for(i=0;i<GS;i++)
GSzwj[i].Setcanshu(1,1,1,1,1,1,1);
for(i=0;i<GS;i++)
{
weishu=GSzwj[i].Getnum();
switch(weishu)
{
case 1:GSzwj[i].GetEMGD_H1();break;
case 2:GSzwj[i].GetEMGD_H2();break;
case 3:GSzwj[i].GetEMGD_H3();break;
case 4:GSzwj[i].GetEMGD_H4();break;
default:cout<<"没有相匹配的模型"<<endl;
}
for(j=0;j<weishu*weishu;j++)
cout<<EMGD_H[j]<<endl;
cout<<endl;
cout<<endl;
delete[] EMGD_H;

}

}

2007-10-18 09:50
zwjjwz_110
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-11-9
收藏
得分:0 

郁闷!!没有人回阿

2007-10-18 19:34
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 

以下代码VC6.0测试通过
你怎么获得矩阵ABD的维数我不知道,就用常量代替了,你改成相应的变量就行
makematrix函数,需要几个矩阵的首地址和维数,然后申请空间,把各个矩阵的值复制到对应的位置
PS:matrix是矩阵的意思把?

程序代码:

#include <stdio.h>
#include <stdlib.h>

#define AROW 2
#define ACOL 3
#define BROW 4
#define BCOL 2


int* makematrix(int* a,int arow,int acol,int *b,int brow,int bcol,int* d,int drow,int dcol)
{
int i,j,row=arow+brow,col=acol+bcol;
int* h=(int*)malloc(sizeof(int)*row*col);
for(i=0;i<arow;i++)
for(j=0;j<acol;j++)
*(h+i*col+j)=*(a+i*acol+j);
for(i=0;i<brow;i++)
for(j=0;j<bcol;j++)
*(h+(arow+i)*col+acol+j)=*(b+i*bcol+j);
for(i=0;i<drow;i++)
for(j=0;j<dcol;j++)
*(h+i*col+acol+j)=*(d+i*dcol+j);
for(i=0;i<brow;i++)
for(j=0;j<acol;j++)
*(h+(arow+i)*col+j)=0;
return(h);
}

int main()
{
int a[AROW][ACOL],b[BROW][BCOL],d[AROW][BCOL],i,j;
int *h;
printf(\"Martrix A:\n\");
for(i=0;i<AROW;i++)
{
for(j=0;j<ACOL;j++)
{
a[i][j]=i*j+10;
printf(\"%d\t\",a[i][j]);
}
printf(\"\n\");
}
printf(\"\nMartrix D:\n\");
for(i=0;i<AROW;i++)
{

for(j=0;j<BCOL;j++)
{
d[i][j]=i+j+20;
printf(\"%d\t\",d[i][j]);
}
printf(\"\n\");
}
printf(\"\nMartrix B:\n\");
for(i=0;i<BROW;i++)
{
for(j=0;j<BCOL;j++)
{
b[i][j]=i-j+30;
printf(\"%d\t\",b[i][j]);
}
printf(\"\n\");
}
printf(\"\n\");
h=makematrix(a[0],AROW,ACOL,b[0],BROW,BCOL,d[0],AROW,BCOL);
for(i=0;i<AROW+BROW;i++)
{
for(j=0;j<ACOL+BCOL;j++)
printf(\"%d\t\",*(h+i*(ACOL+BCOL)+j));
printf(\"\n\");
}
return 0;
}


从BFS(Breadth First Study)到DFS(Depth First Study)
2007-10-18 21:18
zwjjwz_110
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-11-9
收藏
得分:0 
谢谢楼上的
2007-10-19 08:53
快速回复:[求助]怎样搭建矩阵
数据加载中...
 
   



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

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