由于课程的需要,特地编写了一个矩阵乘法测速的软件,需要使用TeeChart5,安装配置请参考我的上一篇博文。
测速
好了,我们现在讲一下测速实现思路。首先,矩阵测速需要使用上千阶的矩阵,所以这里不可能每一个值都自己手打输入。我们采用随机数赋值。如果有小伙伴想要单纯的看矩阵计算,这里附上链接。 https://blog.csdn.net/qq_41649694/article/details/81432663
我们在阶速逐步递增的时候分别记下不同循环嵌套的乘法消耗的时间,然后画进TeeChart5控件里。
核心代码:`在这里插入代码片
void cesu::fuzhi(juzhengz a, juzhengz b, juzhengz c){
int i, j;
srand((int)time(0));
for (i = 0; i<a.row; i++) {
for (j = 0; j<a.column; j++) {
a.p[i][j] = (rand() % 4) + 1;
}
}
for (i = 0; i<b.row; i++) {
for (j = 0; j<b.column; j++) {
b.p[i][j] = (rand() % 4) + 1;
}
}
for (i = 0; i<c.row; i++) {
for (j = 0; j<c.column; j++) {
c.p[i][j] = 0;
}
}
}
void cesu:: jzcsxyi(juzhengz a, juzhengz b, juzhengz c){
start = clock();
for ( i = 0; i<a.row; i++) {
for ( j = 0; j<b.column; j++) {
for ( k = 0; k<a.row; k++) {
c.p[i][j] += a.p[i][k] * b.p[k][j];
}
}
}
finish = clock();
xyi = (double)(finish - start) / CLOCKS_PER_SEC;//单位是秒
}
void cesu::jzcsyxi(juzhengz a, juzhengz b, juzhengz c){
start = clock();
for (j = 0; j<b.column; j++) {
for (i = 0; i<a.row; i++) {
for (k = 0; k<a.row; k++) {
c.p[i][j] += a.p[i][k] * b.p[k][j];
}
}
}
finish = clock();
yxi = (double)(finish - start) / CLOCKS_PER_SEC;
}
void cesu::jzcsxiy(juzhengz a, juzhengz b, juzhengz c){
start = clock();
for (i = 0; i<a.row; i++) {
for (k = 0; k<a.row; k++) {
for (j = 0; j<b.column; j++) {
c.p[i][j] += a.p[i][k] * b.p[k][j];
}
}
}
finish = clock();
xiy = (double)(finish - start) / CLOCKS_PER_SEC;
}
void cesu::jzcsyix(juzhengz a, juzhengz b, juzhengz c){
start = clock();
for (j = 0; j<b.column; j++) {
for (k = 0; k<a.row; k++){
for (i = 0; i<a.row; i++) {
c.p[i][j] += a.p[i][k] * b.p[k][j];
}
}
}
finish = clock();
yix = (double)(finish - start) / CLOCKS_PER_SEC;
}
void cesu::jzcsixy(juzhengz a, juzhengz b, juzhengz c){
start = clock();
for (k = 0; k<a.row; k++){
for (i = 0; i<a.row; i++) {
for (j = 0; j<b.column; j++) {
c.p[i][j] += a.p[i][k] * b.p[k][j];
}
}
}
finish = clock();
ixy = (double)(finish - start) / CLOCKS_PER_SEC;
}
void cesu::jzcsiyx(juzhengz a, juzhengz b, juzhengz c){
start = clock();
for (k = 0; k<a.row; k++){
for (j = 0; j<b.column; j++){
for (i = 0; i<a.row; i++) {
c.p[i][j] += a.p[i][k] * b.p[k][j];
}
}
}
finish = clock();
iyx = (double)(finish - start) / CLOCKS_PER_SEC;
}
实验结果
可以看到不同的循环嵌套方式下的矩阵乘法速度差别还是挺大的。
工程项目下载