3*3矩阵相乘

longbaoer_1215 2011-05-25 05:17:17
有人问3*3矩阵相乘,不好意思,现在找不到那人贴在哪,所以我就随便在这儿贴了。

//matrix_3_3.h
template<class T>
class matrix_3_3{
public:
matrix_3_3(){m11=m12=m13=m21=m22=m23=m31=m32=m33=0;}
matrix_3_3(T v11,T v12,T v13,T v21,T v22,T v23,T v31,T v32,T v33);
matrix_3_3(matrix_3_3<T>& A);
matrix_3_3<T>& multiply(matrix_3_3<T>& B);

void print();
~matrix_3_3<T>(){};
private:
T m11,m12,m13,m21,m22,m23,m31,m32,m33;// by raw
};

template<class T>
matrix_3_3<T>::matrix_3_3(matrix_3_3<T> &A){
m11=A.m11;
m21=A.m21;
m31=A.m31;
m12=A.m12;
m22=A.m22;
m32=A.m32;
m13=A.m13;
m23=A.m23;
m33=A.m33;
}
template<class T>
matrix_3_3<T>::matrix_3_3(T v11, T v12, T v13, T v21, T v22, T v23, T v31, T v32, T v33){
m11=v11;
m21=v21;
m31=v31;
m12=v12;
m22=v22;
m32=v32;
m13=v13;
m23=v23;
m33=v33;
}
template<class T>
matrix_3_3<T>& matrix_3_3<T>::multiply(matrix_3_3<T>& B){
double t1, t2; // temporary values
t1 = m11*B.m11 + m12*B.m21 + m13*B.m31;
t2 = m11*B.m12 + m12*B.m22 + m13*B.m32;
m13 = m11*B.m13 + m12*B.m23 + m13*B.m33;
m11 = t1;
m12 = t2;

t1 = m21*B.m11 + m22*B.m21 + m23*B.m31;
t2 = m21*B.m12 + m22*B.m22 + m23*B.m32;
m23 = m21*B.m13 + m22*B.m23 + m23*B.m33;
m21 = t1;
m22 = t2;

t1 = m31*B.m11 + m32*B.m21 + m33*B.m31;
t2 = m31*B.m12 + m32*B.m22 + m33*B.m32;
m33 = m31*B.m13 + m32*B.m23 + m33*B.m33;
m31 = t1;
m32 = t2;
return *this;
}
template<class T>
void matrix_3_3<T>::print( ){
cout<<this->m11<<"\t"<<this->m12<<"\t"<<this->m13<<endl;
cout<<this->m21<<"\t"<<this->m22<<"\t"<<this->m23<<endl;
cout<<this->m31<<"\t"<<this->m32<<"\t"<<this->m33<<endl;
}

//matrix_3_3.cpp
#include "matrix_3_3.h"
#include <iostream>
using namespace std;
void main(){
matrix_3_3<double> myMatrix(1,2,3,4,5,6,7,8,9);
matrix_3_3<double> myIdentity(1,0,0,0,1,0,0,0,1);
matrix_3_3<double> myMatrix1(9.0,8.1,7.2,6.3,5.4,4.7,3.2,2.1,1.9);
matrix_3_3<double> myMatrix2(myMatrix1);
myMatrix.multiply(myIdentity);
cout<<"the result multiplied by Identity:"<<endl;
myMatrix.print();
myMatrix1.multiply(myMatrix);
cout<<"the result multiplied by left:(myMatrix1 * myMatrix)"<<endl;
myMatrix1.print();
myMatrix.multiply(myMatrix2);
cout<<"the result multiplied by right:(myMatrix * myMatrix1)"<<endl;
myMatrix.print();
}
...全文
397 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
longbaoer_1215 2011-05-26
  • 打赏
  • 举报
回复

#include <iostream>
#include <cctype>
#include <list>
#include <iterator>
#include <algorithm>
using namespace std;
void main(){
list<char> clist;
for(char s='a';s<='z';++s)
clist.push_back(s);
list<char>::iterator citer;
cout<<"lowercase letter as follow:"<<endl;
for(citer=clist.begin();citer!=clist.end();++citer)
cout<<*citer<<" ";
for(citer=clist.begin();citer!=clist.end();++citer)
*citer=toupper(*citer);
cout<<"\nuppercase letter as follow:"<<endl;
for(citer=clist.begin();citer!=clist.end();++citer)
cout<<*citer<<" ";
cout<<"\nuppercase reversed letter as follow:"<<endl;
list<char>::reverse_iterator rciter;
for(rciter=clist.rbegin();rciter!=clist.rend();++rciter)
cout<<*rciter<<" ";
cout<<endl;

}

result:
lowercase letter as follow:
a b c d e f g h i j k l m n o p q r s t u v w x y z
uppercase letter as follow:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
uppercase reversed letter as follow:
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
请按任意键继续. . .
ryfdizuo 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 namelij 的回复:]

顶一个....
楼主魄力可嘉
[/Quote]
关注一下。
  • 打赏
  • 举报
回复
顶一个....
楼主魄力可嘉
longbaoer_1215 2011-05-25
  • 打赏
  • 举报
回复
the result multiplied by Identity:
1 2 3
4 5 6
7 8 9
the result multiplied by left:(myMatrix1 * myMatrix)
91.8 116.1 140.4
60.8 77.2 93.6
24.9 32.1 39.3
the result multiplied by right:(myMatrix * myMatrix1)
31.2 25.2 22.3
86.7 72 63.7
142.2 118.8 105.1
请按任意键继续. . .

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧