求导

多项式求导--设计思路

匿名 (未验证) 提交于 2019-12-02 23:47:01
需要完成的任务为包含简单幂函数和简单正余弦函数的导函数的求解。 本次多项式求导具体包括以下 因子 : 常数因子:包含一个带符号整数,-002; 幂函数因子: x 、 x^-3; 表达式因子: (表达式); 三角函数因子:sin(因子) 、cos(因子) ^2. 因子组合成 项 :因子[*因子]; 项组合成为 表达式 :项[±项]; 要对输入的表达式进行解析,输出对应的导函数。 采用递归下降进行语法分析的思路,按照“表达式――>项――>因子”的顺序,将表达式分解到可以直接求得导数的因子,再逐层将因子的导数返回并组合成项和表达式的导数。 流程图如下: 将输入作为第一个表达式: 并输出该表达式的导函数作为最终结果。 表达式类进行解析拆分出项,项拆分出因子: 因子对象中进行语法分析,提取出第一个因子并返回解析进度给项对象。 特别地,在 表达式因子 解析时会新建一个表达式对象以分析括号内的内容: 与之相似,解析 三角函数因子 时括号内的因子部分也会新建一个因子对象进行解析: 当一个项对其下的因子解析完成时,会得到该项的导函数: 运用该求导公式结合各因子的内容和导函数即可: 当一个表达式中的项都解析完成,表达式的导函数也将可求得: 将各项的导函数与其前面的'+'或'-'号连接即可。

[C1W3] Neural Networks and Deep Learning - Shallow neural networks

匿名 (未验证) 提交于 2019-12-02 23:47:01
神经网络中,我们将使用上标方括号的形式表示这些值来自于哪一层,有趣的是在约定俗成的符号传统中,在这里你所看到的这个例子,只能叫做一个两层的神经网络。原因是输入层是不算入总层数内,所以隐藏层是第一层,输出层是第二层。第二个惯例是我们将输入层称为第零层,所以在技术上,这仍然是一个三层的神经网络,因为这里有输入层、隐藏层,还有输出层。但是在传统的符号使用中,如果你阅读研究论文或者在这门课中,你会看到人们将这个神经网络称为一个两层的神经网络,因为我们不将输入层看作一个标准的层。 单个样本时,向量化图示 单个样本时,运用四行代码计算出一个简单神经网络的输出(预测)。 上一节使用的是单个样本,如果把单个样本的向量横向堆叠成矩阵,就可以计算全部样本的神经网络输出(预测)。 Pros and cons of activation functions 结果表明,如果在隐藏层上使用 tanh (双曲正切)函数效果总是优于 sigmoid 函数。因为函数值域在 -1 和 +1 的激活函数,其均值是更接近 0 均值的,而不是0.5,这会使下一层学习简单一点。 在讨论优化算法时,有一点要说明:我基本已经不用 sigmoid 激活函数了,tanh 函数在所有场合都优于 sigmoid 函数。 但有一个例外:在二分类的问题中,对于输出层,想让的数值介于 0 和 1 之间,而不是在 -1 和 +1 之间

P1010 一元多项式求导

混江龙づ霸主 提交于 2019-12-01 08:32:21
1010 一元多项式求导 (25 分) 设计函数求一元多项式的导数。(注: x ​ n ​​ ( n为整数)的一阶导数为 n x ​ n − 1 ​​ 。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。 注意“零多项式”的指数和系数都是 0,但是表示为 0 0 。 输入样例:    3 4 -5 2 6 1 -2 0 输出样例:    12 3 -10 1 6 0    这道题没有想象中的那么难,就是简单的格式控制,以及乘法与减法运算。不过有几个坑点, 如下:   题目木有说明长度与限制,要用数组的话尽量开长一点(我记得1024都不够),记得用EOF来检测文件结束   题目加粗处说明了特殊情况,记得特判   老样子,题目与说明了输出格式,没事别瞎输出   由于过于简单,思路就简述一下啊。我没用数组存储,直接在线读入。边读入边处理。一次读两个数x,y ,将x*y后输出,再输出y-1,至于特殊情况,我用了一个标志位来控制。 最后贴一下代码:    1 /** 2 * @brief PAT_P1010 3 * @note IndexNumber处不要用-- 4 * @author 杨文蓁的小迷弟 5 */ 6

神经网络反向传播的数学原理(转)

人走茶凉 提交于 2019-12-01 05:38:23
如果能二秒内在脑袋里解出下面的问题,本文便结束了。 已知: ,其中 。 求: , , 。 到这里,请耐心看完下面的公式推导,无需长久心里建设。 首先,反向传播的数学原理是“求导的链式法则” : 设 和 为 的可导函数,则 。 接下来介绍 矩阵、向量求导的维数相容原则 利用维数相容原则快速推导反向传播 编程实现前向传播、反向传播 卷积神经网络的反向传播 快速矩阵、向量求导 这一节展示如何使用链式法则、转置、组合等技巧来快速完成对矩阵、向量的求导 一个原则维数相容,实质是多元微分基本知识,没有在课本中找到下列内容,维数相容原则是我个人总结: 维数相容原则:通过 前后换序、转置 使求导结果满足矩阵乘法且结果维数满足下式: 如果 , ,那么 。 利用维数相容原则解上例: step1:把所有参数当做实数来求导, , 依据链式法则有 , , 可以看出除了 , 和 的求导结果在维数上连矩阵乘法都不能满足。 step2:根据step1的求导结果,依据维数相容原则做调整:前后换序、转置 依据维数相容原则 ,但 中 、 ,自然得调整为 ; 同理: ,但 中 、 ,那么通过换序、转置我们可以得到维数相容的结果 。 对于矩阵、向量求导: “当做一维实数使用链式法则求导,然后做维数相容调整,使之符合矩阵乘法原则且维数相容”是快速准确的策略; “对单个元素求导、再整理成矩阵形式”这种方式整理是困难的

1010 一元多项式求导

主宰稳场 提交于 2019-11-30 21:09:55
pat乙级 1010 一元多项式求导 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 3 -10 1 6 0 总结 参考了18Temp的博客,才知道这题代码可以这么简洁,输入数据处理方式也有技巧,输入数据不一定用循环 1 输入格式 没有结束标志 ,但 数据是两两一对 的,可以用 while(cin>>coef>>expo) 2 注意: 零多项式 表示为 0 0 ,由于 递降方式输入 ,若有零多项式则一定是输入的 第一组数据 ,则一开始 单独判断零多项式 3 指数为零的不输出 AC代码: #include < iostream > using namespace std ; int main ( ) { int coef ; int expo ; cin >> coef >> expo ; if ( expo == 0 ) { cout << "0 0" ; } else { cout << expo * coef << " " << expo - 1 ; while ( cin >> coef

图像求导及模糊

僤鯓⒐⒋嵵緔 提交于 2019-11-30 16:15:38
在很多应用中,图像强度的变化情况是非常重要的信息。强度的变化可以灰度图像的 \(x\) 和 \(y\) 方向导数 \(I_x\) 和 \(I_y\) 进行描述。图像的梯度向量为 \(\nabla I = [I_x, I_y]^T\) 。梯度有两个重要属性,一个是梯度的大小: \[ | \nabla I | = \sqrt{I_x^2+I_y^2} \] 它描述了图像强度变化的强弱,另一个是梯度的角度: \[ \alpha = arctan2(I_y, I_x) \] 描述了图像中每个像素点上强度变化最大的方向。我们可以使用离散近似的方式来计算图像的导数。图像导数大多数可以通过卷积简单地实现: \[ I_x = I*D_x \ 和\ I_y = I*D_y \] 对于 \(D_x\) 和 \(D_y\) ,通常选择Priwitt滤波器: \[ D_x = \left[ \begin{matrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{matrix} \right] 和D_y=\left[ \begin{matrix} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{matrix} \right] \] 或者Sobel滤波器: \[ D_x = \left[ \begin{matrix} -1

矩阵求导与实例

别来无恙 提交于 2019-11-30 13:13:06
缘由 布局 求导的类别 从简单的例子说起 实例 SVM的对偶形式转换 Soft-SVM对偶形式转换 线性回归 logistic回归 参考资料 缘由 机器学习的很多算法表示中都采用了矩阵的形式,对算法的描述分析中就涉及到了对向量、对矩阵的求导。 比如SVM、linear regression的推导等。 布局 矩阵求导有两种布局: 分子布局(numerator layout) 分母布局(denominator layout) 下面用向量 y //--> 对标量 x //--> 求导简单说明这两种布局的区别。 我们假定所有的向量都是列向量。 y = ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ y 1 y 2 ⋮ y m ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ //--> 在分子布局下: ∂ y ∂ x = ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y m ∂ x ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ //--> 在分母布局下: ∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y m ∂ x ] //--> 在下面的推导中,都将采用分母布局,也就是向量(列)对标量求导的结果都是行向量。(采用这种布局的主要原因是向量对向量的求导就是一个矩阵了) 求导的类别 求导大致分为5类: 向量对标量 标量对向量 向量对向量 矩阵对向量

2-7 一元多项式求导

喜你入骨 提交于 2019-11-30 04:26:17
设计函数求一元多项式的导数。 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 3 -10 1 6 0 我的答案 // // Created by 小邋遢 on 2019/9/17. // #include <bits/stdc++.h> using namespace std; int a[100000]; int b[100000]; int main() { int n = 0; int aa = 0; int bb = 0; int isShow=0; while (true) { n++; cin >> a[aa++]; cin >> b[bb++]; if (b[bb - 1] == 0) break; } for (int i = 0; i < n; ++i) { if (a[i] != 0 && b[i] != 0) { isShow=1; if (i == 0) printf("%d %d", a[i] * b[i], b[i] - 1); else printf(" %d %d", a[i] * b[i], b[i] - 1); } }

矩阵求导(二)

混江龙づ霸主 提交于 2019-11-30 00:52:25
本文承接上篇 https:// zhuanlan.zhihu.com/p/24 709748 ,来讲矩阵对矩阵的求导术。使用小写字母x表示标量,粗体小写字母 表示列向量,大写字母X表示矩阵。矩阵对矩阵的求导采用了向量化的思路,常应用于二阶方法求解优化问题。 首先来琢磨一下定义。矩阵对矩阵的导数,需要什么样的定义?第一,矩阵F(p×q)对矩阵X(m×n)的导数应包含所有mnpq个偏导数 ,从而不损失信息;第二,导数与微分有简明的联系,因为在计算导数和应用中需要这个联系;第三,导数有简明的从整体出发的算法。我们先定义向量 (p×1)对向量 (m×1)的导数 (m×p),有 ;再定义矩阵的(按列优先)向量化 (mn×1),并定义矩阵F对矩阵X的导数 (mn×pq)。导数与微分有联系 。几点说明如下: 按此定义,标量f对矩阵X(m×n)的导数 是mn×1向量,与上篇的定义不兼容,不过二者容易相互转换。为避免混淆,用记号 表示上篇定义的m×n矩阵,则有 。虽然本篇的技术可以用于标量对矩阵求导这种特殊情况,但使用上篇中的技术更方便。读者可以通过上篇中的算例试验两种方法的等价转换。 标量对矩阵的二阶导数,又称Hessian矩阵,定义为 (mn×mn),是对称矩阵。对向量 或矩阵 求导都可以得到Hessian矩阵,但从矩阵 出发更方便。 ,求导时矩阵被向量化,弊端是这在一定程度破坏了矩阵的结构

1010. 一元多项式求导

拜拜、爱过 提交于 2019-11-29 19:35:13
题目截图: 思路:   简单模拟。 代码: 1 /* 2 1010. 一元多项式求导 3 */ 4 5 #include <stdio.h> 6 #include <string.h> 7 #include <math.h> 8 #include <stdlib.h> 9 #include <time.h> 10 11 int main() { 12 int a, b, flag=0; 13 while(scanf("%d %d", &a, &b) != EOF) { 14 if(flag==0 && b==0) { // 零多项式 15 printf("0 0"); 16 } 17 if(b != 0) { 18 if(flag) { 19 printf(" "); 20 } 21 // 模拟多项式求导 22 printf("%d %d", a*b, b-1); 23 flag = 1; 24 } 25 } 26 27 return 0; 28 } 来源: http://www.cnblogs.com/coderJiebao/p/PAT1010.html