说明:三角函数的余弦值Cos我想,每个学计算机的理工人都知道,但是真的明白它的用途,我也是刚明白。每个人在初中或者高中的时候,都有这么个疑惑,学三角函数干什么用的?很直白的答案就是考试用的。而且当时的老师只管教,只管怎么解题,至于将学习的知识运用到生活中,没有这门课堂。最终的结果却是,我们只知道学,不知道用。说来也惭愧啊,我也是看了吴军博士的《数学之美》,才领悟到的。这本书真的给我很多的启发。
Cos的用途:
考试用。
通过计算2个向量,可以知道他们的相似度。余弦值越小,则2个向量越垂直,余弦值越接近1,则这个向量就越平行(相似)。这样,我们就可以将向量抽象为事物的特征集合了。计算向量的余弦值,就可以判断事物的相似度。至于详细的运用领域,还是读读这本书吧。
代码中的Cosine.cs是我很早从网上搜到的,地址也忘了。
计算代码如下:
Cosine.cs类
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Cosine { /// <summary> /// 计算向量余弦值 /// </summary> /// <param name="vector1"></param> /// <param name="vector2"></param> public static double Calculate(Dictionary<int, double> vector1, Dictionary<int, double> vector2) { double dotProduct = CalcDotProduct(vector1, vector2); double length1 = CalcLength(vector1); double length2 = CalcLength(vector2); double cosine = dotProduct / (length1 * length2); return cosine; } /// <summary> /// 计算向量长度(vector length) /// </summary> /// <param name="vector"></param> /// <returns></returns> private static double CalcLength(Dictionary<int, double> vector) { double length = 0; foreach (KeyValuePair<int, double> kvp in vector) { length += Math.Pow(kvp.Value, 2); } return Math.Sqrt(length); } /// <summary> /// 计算向量点积(dot product)/内积(inner product) /// </summary> /// <param name="vector1"></param> /// <param name="vector2"></param> /// <returns></returns> private static double CalcDotProduct(Dictionary<int, double> vector1, Dictionary<int, double> vector2) { double dotProduct = 0; foreach (KeyValuePair<int, double> kvp in vector1) { if (vector2.ContainsKey(kvp.Key)) { dotProduct += kvp.Value * vector2[kvp.Key]; } } return dotProduct; } } }