0%

2018年8月22日 下午3:07

梯度、Hessian矩阵、平面方程的法线以及函数导数的含义 - CSDN博客

  1. Hessian矩阵:设有凸函数f(X),X是向量(x1,x2,…, xn)
    1. Hessian矩阵M定义为:M的第i行,第j列元素为df(X)/dxidxj, 即为f(X)对于变量xi和xj的二次偏导数
  2. 梯度:设有凸函数f(X),X是向量(x1,x2,…, xn),
    1. 函数f(X)在点X0处的梯度是一个向量,等于(df(X0)_dx1, df(X0)_dx2, …., df(X0)/dxn), 即是对于各个变量的偏导数的向量。
    2. 例子:如果方程是z=f(x,y),梯度是在XOY平面内的一个向量,与z无关。因此要特别注意梯度不是点(X,f(X))处的切线方向
  3. 平面方程的法线:设平面方程Ax+By+Cz+D = 0,向量(A, B, C)为这个平面的法线方向。
  4. 函数导数:y=-kx -b的导数的含义:(-k)表示的是x轴方向的梯度,值为直线的斜率。

2018年8月22日 下午2:48

数学之美系列完整版(最新全集列表)_程序员数学_酷勤网
吴军同志以非常通俗的语言描述了计算机领域常用的算法和模型,特别是机器学习和IR领域

数学之美系列二:谈谈中文分词_程序员数学_酷勤网
其实就是用统计学的知识来定量的评价,一个感性的好坏。
统计学和专业问题的结合点可以有多个,我们要找最合适的一个。

2018年8月22日 下午2:12

线性代数(一)—什么是线性代数(兼论向量空间及其性质) - CSDN博客
线性代数(二)—有限维向量空间和线性映射 - CSDN博客

  1. 线性代数是关于有限维 向量空间线性映射的学科。
  2. 有限维向量空间同样是具有结构的,简单地说它能由它的少部分元素来描述整体
  3. 根据线性相关张成的性质,我们可以推出下列关系:
    1. 如果(v1,v2,…, v_m)在V中是线性相关的,那么从向量组中去掉某一个向量vj,使得span(v1,v2,…,v(j-1),v(j+1), …, v_m) = span(v1,v2,…,v_m)。
  4. 每个张成组都是可以化简为一个
    1. 这个过程就是就是从线性相关到线性无关的过程。
    2. 也可以说:基是张成组的一个特殊情况
  5. 张成其实是一个动作
    1. 假设一个向量空间中存在n个元素(v1, v2, …, vn),使得向量空间的任何元素u 都可以表示为 u = a_1* v1 + a_2v2+…+ a_nvn,
    2. 那么我就说这n个元素“张成”这个向量空间
  6. 线性映射:我理解和嵌套函数的意思是一样的
    1. 本质上从一个空间射向另外一个空间就是从一个空间的基射向另外一个空间的基;
    2. 空间的任何一个向量v都可以表示为基中的向量(v1,v2,…, v_m)的线性组合,那么要把v射为W中的一个向量w,而w可以由W中的基(w1,w2, …, w_n)表示,只要我们能够把V中的每个基能映射为W中的基的表示,那么任意的一个v在W中对应的向量都可以通过W中的基来表示

2018年8月20日 下午3:54
分解质因数_百度百科

实现1:双重循环

1
2
3
4
5
6
7
8
9
10
11
int fjzys(int k)
{
int i=2;
for ( ; i<=k ; i++ ) //当因数i<=k时,实现该循环,每次循环因数i自加1
for ( ; k%i==0 ; j++ ) //当k整除当前因数,实现该循环,每次循环下标j自加1
{
k/=i; //使k=k/i
a[j]=i; //存入因数
}
return 0;
}

实现2:单层循环

  1. 可直接在VC6.0运行
  2. 这道题使用的是单层循环,思路总结:
    1. 其实这种要求下,while循环的遍历对象是i。平常来说,我们的思维是让i作为一个计数值,不断的进行1的累加,即i++,i的累加是不间断的
    2. 但是在这里,i的累加是间断的,需要通过if来判断是否可以进行i++,甚至要倒退回去,即i=2
    3. 也就是说,这里的i不是递增的,而是可大可小,来回徘徊
  3. 单层循环与双层循环的思维区别?
    1. 双层循环是对我们正常现实生活结题方式的表达形式模拟
    2. 单层循环,在我们通过例子去尝试时,我们专门的观察i,即被除数在整个流程中变化情况。最后的问题时:在什么情况下i++,什么情况下i=2。
    3. 而双层循环的问题是:在给定一个数的时候,如何遍历得到他的最小质因数。
    4. 通俗来说:其实就是提出的问题不同,最后解决问题的方式也就不同了。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      #include <stdio.h>
      int m,b,c=0,j=0;
      int a[10]; //存放质因数
      int fjzys(int k)
      {
      int i=2;
      while(k>=i) //判断k是否合格
      {
      if(k%i==0) //判断k是否整除当前因数
      {
      a[j]=i; //存入因数
      k/=i; //余数
      i=2; //令i重新等于2
      j++; //计数值
      }
      else
      {
      i++; //不能整除则当前因数为非质因数
      }
      }
      return 0;
      }

实现3:单层循环

此代码因为用了long long int,为C99标准,故不可在VC6.0上运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <math.h>

int main()
{
int i,b;
long long int in;
/*采用64位整型,以便输入更大的数*/
freopen("F://1.txt","r",stdin);
freopen("F://2.txt","w",stdout);
while(scanf("%lld",&in)!=EOF)
{
/*在F://1.txt中输入x个数N(N>=2)以换行符或空格符隔开,当没有输入时循环会自动结束*/
b=0;/*用于标记是否是第一个质因数,第一个质因数在输出时前面不需要加空格*/
for(i=2;in!=1;i++)
{
if(in%i==0)
{
in/=i;
b?printf("%d",i):printf("%d",i),b=1;
i--;
/*i--和i++使得i的值不变,即能把N含有的所有的当前质因数除尽,例如:24会一直把2除尽再去除3*/
}
printf("\n");
}
}
return 0;
}

2018年8月20日 下午3:54

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int MAXN = 1010;

int GCD(int a,int b)
{
if(b == 0)
return a;
return GCD(b,a%b);
}

int A[MAXN],B[MAXN],C[MAXN*10];

int main()
{
int N;
while(~scanf("%d",&N))
{
for(int i = 0; i < N; ++i)
scanf("%d",&A[i]);
memset(B,0,sizeof(B));
memset(C,0,sizeof(C));
B[0] = 1;

int a,b,gcd,fm = 0,k;
for(int i = 1; i < N; ++i)
{
if(A[i] != A[0])
{
b = A[i]*A[0];
a = abs(A[i]-A[0])*2;
gcd = GCD(a,b);
a /= gcd;//约分
b /= gcd;//约分
fm = GCD(a,fm);//迭代求n个分母最大公约数

for(int j = 2; b > 1; ++j)//分解质因数
{
if(b % j == 0)
{
k = 0;

while(b % j == 0){
b /= j;
k++;
}

if(k > C[j]) //C[] 数组记录素因子的幂 对应的最大值
C[j] = k;
}
}
}
}

int tmp;
for(int i = 0; i < MAXN*10; ++i)//大数乘法迭代求n个数最小公倍数
{
for(int j = 0; j < C[i]; ++j)
{
tmp = 0;
for(int k = 0; k < MAXN; ++k)
{
B[k] = B[k]*i + tmp;
tmp = B[k] / 10000;
B[k] %= 10000;
}
}
}

int i = 999;
while(i > 0 && B[i] == 0)
i--;

printf("%d-",B[i]);
for(--i; i >= 0; --i)
printf("%04d+",B[i]);
printf(" %d,\n",fm);
}

return 0;
}

2018年8月19日 下午9:17

如何理解矩阵特征值? - 知乎
看链接,有图解

  1. 几何意义章节补充:
    1. 给定A,那么A的特征向量和特征值已经确定了。A可以直接决定
  2. 矩阵 * 向量 ,是让向量在坐标系下运动
    1. 如果向量一直用这样的方法跑,那么他 跑到哪里去?
      1. 跑到最大特征值所在的特征空间上(其实就是一条直线)
    2. 为什么会这样?
      1. 作者没有给出理论的证明,我么先把他作为经验使用吧!
  3. 如何理解矩阵是运动
    1. 特征值就是运动的速度
    2. 特征向量就是运动的方向
    3. 总结:我么通过”特征值分解“这节的图片,就可以看出有的矩阵可以可以变换方向,有的可以变换长度,有的可以同时改变方向和长度。
  4. 这篇文章的最后lena图片的压缩就是PAC技术

2018年8月19日 下午7:51

矩阵特征值和椭圆长短轴的关系? - 知乎

  1. 如何将矩阵的标准格式写成矩阵形式
  2. 展开成矩阵形式,就证明了
    1. 椭圆的长短轴分别沿着矩阵A的两个特征向量的方向,而两个与之对应的特征值分别是半长轴和半短轴的长度的平方的倒数