自己编写的线性代数库之向量
来源:互联网 发布:centos连接无线网 编辑:程序博客网 时间:2024/05/21 21:41
/* * Vector.h * * Created on: 2013年12月31日 * Author: 何飞 */#ifndef VECTOR_RAINBOW_H_#define VECTOR_RAINBOW_H_#pragma once#include "stdio.h"#include "math.h"#include "iostream"#include "string"using namespace std;namespace Rainbow/*Rainbow Louis是我的英文名字*/{ template<unsigned int length = 4, typename TElement = float> class Vector { public: //数据成员 TElement Elements[length]; public: //构造和析构 Vector(void) { //初始各个值都初始化为0 SetValue(0); } Vector(TElement value) { //初始各个值都初始化为value SetValue(value); } ~Vector(void) { } public: /*************************************************************************** * 设置元素 **************************************************************************/ void SetValue(TElement value) { //初始各个值都设置为0 for (int i = 0; i < length; i++) { this->Elements[i] = value; } } public: /*************************************************************************** * 加法运算 **************************************************************************/ //自加一个数 void operator +=(const TElement& num) { for (int i = 0; i < length; i++) { Elements[i] = Elements[i] + num; } } //数在右边 Vector<length, TElement> operator +(const TElement& num) const { Vector<length, TElement> result = *this; result += num; return (result); } //数在左边,向量在右边 friend Vector<length, TElement> operator +(const TElement& num, const Vector<length, TElement>& vec) { Vector<length, TElement> result = vec; result += num; return (result); } //自加一个向量 void operator +=(const Vector<length, TElement>& vec) { for (int i = 0; i < length; i++) { Elements[i] = Elements[i] + vec.Elements[i]; } } //左右都是向量 friend Vector<length, TElement> operator +(const Vector<length, TElement>& left, const Vector<length, TElement>& right) { Vector<length, TElement> result = left; result += right; return (result); } public: /*************************************************************************** * 乘法运算 **************************************************************************/ //自乘一数 void operator *=(const TElement& num) { for (int i = 0; i < length; i++) { Elements[i] = Elements[i] * num; } } //数在右边 Vector<length, TElement> operator *(const TElement& num) const { Vector<length, TElement> result = *this; result += num; return (result); } //数在左边,向量在右边 friend Vector<length, TElement> operator *(const TElement& num, const Vector<length, TElement>& vec) { Vector<length, TElement> result = vec; result += num; return (result); } //左右都是向量(向量之间的点乘) friend TElement operator *(const Vector<length, TElement>& left, const Vector<length, TElement>& right) { TElement result = 0; for (int i = 0; i < length; i++) { result += (left.Elements[i] * right.Elements[i]); }; return (result); } /*************************************************************************** * 减法运算 **************************************************************************/ //自减1向量 void operator -=(const Vector<length, TElement>& right) { for (int i = 0; i < length; i++) { Elements[i] = Elements[i] - right.Elements[i]; }; } //左右都是向量(对应元素相减) friend Vector<length, TElement> operator -(const Vector<length, TElement>& left, const Vector<length, TElement>& right) { Vector<length, TElement> result = left; result -= right; return (result); } public: /*************************************************************************** * 求模运算:也就是距离原点的距离 **************************************************************************/ TElement Norm() const { TElement SquareSum = 0; for (int i = 0; i < length; i++) { //1.取得元素 TElement d = Elements[i]; //2.计算元素的平方 TElement Square = d * d; //3.计算平方和 SquareSum += Square; }; //最后开放返回 return (sqrt(SquareSum)); } //向量的单位化 Vector<length, TElement> Identity() const { Vector<length, TElement> result; //1.先取得长度 TElement L = this->Norm(); //2.求得长度的倒数 TElement L1 = 1 / L; //3.每个元素都乘以一个系数 return ((*this) * L1); } };//输出函数(调试专用) template<unsigned int length = 4, typename TElement = float> ostream& operator<<(ostream& out, const Vector<length, TElement> vector) { out << "Vector<" << length << ">" << endl; for (int i = 0; i < length; i++) { out << "\t" << vector.Elements[i] << endl; } return (out); }}#endif
0 0
- 自己编写的线性代数库之向量
- 线性代数之三:向量空间
- R:向量和矩阵的线性代数运算
- MIT线性代数--推广意义的向量空间
- matlab-线性代数 求向量组的秩
- matlab-线性代数 两个向量的内积
- matlab-线性代数 单个向量的长度
- matlab-线性代数 两个向量的夹角
- Matlab与线性代数 -- 向量的范数
- [线性代数]向量组的线性相关性
- 线性代数 04.02 向量组的线性相关性
- 线性代数 04.04 向量组的秩
- 线性代数--向量--行列式
- 线性代数基础:向量组合
- 线性代数:向量乘法
- 线性代数(五十) :向量积
- 【线性代数】向量空间
- 线性代数笔记(向量)
- RHEL5.2内核升级过程
- 装了maven插件的eclipse中M2_REPO无法编辑、删除(转自lywybo)
- 黑马程序员— 从键盘接受一个数字,列出该数字的中文表示格式
- postgresql命令行(psql)
- 函数指针和指针函数
- 自己编写的线性代数库之向量
- 预备期考察纪实
- cocos2d-x Jni c++ java互调 安全刷新UI控件最简单例子(上)
- shoelace源代码分析,bochs调试过程,setup.s 中do_move
- 13 Android AsyncHttpClient 使用
- Arduino 写头文件的bug
- U-Boot编译过程完全分析
- NoSQL数据库一一介绍
- onCreate()与onCreateView()