求导

1010 一元多项式求导 (25 分)

北战南征 提交于 2019-11-29 19:31:04
设计函数求一元多项式的导数。(注: 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这道题目不难,但是刚开始的零多项式困惑了我好久(数学太菜!),上网查了一下:原来零多项式就是结果为0的多项式。这个概念搞清楚后就简单多了。另外还有输入时读取数据的问题,用Ctrl+Z表示文件结束符EOF。如何告诉程序输入已经结束了呢?在Windows下,输入完毕后先按Enter,再按Ctrl+Z键,最后再按Enter键即可结束输入。在Linux下,输入完毕后按Ctrl+D键即可结束。我的思路:计算系数coe与ind的成绩,如果为0则不输出;否则输出导数形式coe*ind ind-1。另外要注意每次输出时要判断是否为第一次输出(与题目要求输出格式相符合)。最后判断一下是否有输出,如果没有输出,则给定的多项式的导数项为零多项式。 #include <bits/stdc++.h> using namespace

1010 一元多项式求导 (25 分)

对着背影说爱祢 提交于 2019-11-29 19:30:46
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思路:  这个题目非常简单但是容易出错:                  1、当所有多项式都是零的话,输出“0 0”                  2、输出的时候不能使用i==nodes.size()-1的方式控制空格的输出,因为无法得知哪一个才是最后一个才能输出的。很有可能只有第一个需要输出,而后面全是0 #include<iostream> #include<string> #include<vector> #include<string> #include<cstdio> #include<cmath> #include<string.h> #include<algorithm> #include<map> #include<stack> using

7-16 一元多项式求导

故事扮演 提交于 2019-11-29 19:30:32
7-16 一元多项式求导(20 分) 设计函数求一元多项式的导数。 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 3 -10 1 6 0思路:使用了sstream可以说是非常简单了,你要说不知道求导规则那就没办法了。要注意的是当零多项式和常数多项式的时候需要输出0 0,否则有两个测试用例过不去。 #include<stdio.h> #include<sstream> #include<iostream> using namespace std; int main() { string s; getline(cin, s); stringstream ss(s); int a, b, flag = 1; //flag用来标记输出是否为第一个控制多余空格,以及判断是否没有输出 while (ss >> a >> b){ if (a*b != 0 && flag != 1)cout << " "; if (a*b != 0) { cout << a*b << " " << b - 1; flag++; } } if (flag == 1)cout << "0

动手学深度学习第一课:从上手到多类分类-Autograd

被刻印的时光 ゝ 提交于 2019-11-29 03:16:24
使用autograd来自动求导 在机器学习中,我们通常使用梯度下降来更新模型参数从而求解。损失函数关于模型参数的梯度指向一个可以降低损失函数值的方向,我们不断地沿着梯度的方向更新模型从而最小化损失函数。虽然梯度计算比较直观,但对于复杂的模型,例如多达数十层的神经网络,手动计算梯度非常困难。 为此MXNet提供autograd包来自动化求导过程。虽然大部分的深度学习框架要求编译计算图来自动求导,mxnet.autograd可以对正常的命令式程序进行求导,它每次在后端实时创建计算图从而可以立即得到梯度的计算方法。 下面让我们一步步介绍这个包。我们先导入autograd。 import mxnet.ndarray as nd import mxnet.autograd as ag 为变量附上梯度 假设假设我们想对函数f = 2 * (x ** 2)求关于x的导数。我们先创建变量x,并赋初值。 x = nd.array([[1, 2], [3, 4]]) x [[ 1. 2.] [ 3. 4.]] <NDArray 2x2 @cpu(0)> 当进行求导的时候,我们需要一个地方来存x的导数,这个可以通过NDArray的方法attach_grad()来要求系统申请对应的空间。 x.attach_grad() 下面定义f。默认条件下,MXNet不会自动记录和构建用于求导的计算图

1010 一元多项式求导 (Python实现)

自闭症网瘾萝莉.ら 提交于 2019-11-28 10:15:51
设计函数求一元多项式的导数。(注:x​n​​(n为整数)的一阶导数为nx​n−1​​。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0 。 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 3 -10 1 6 0 Python实现: nums = input().split() num = [] for i in nums: num.append(int(i)) nums = num result = [] for i in range(0, len(nums), 2): if nums[i] * nums[i+1] != 0: result.append(nums[i] * nums[i + 1]) result.append(nums[i + 1] - 1) if len(result) != 0: print(" ".join(str(i) for i in result)) else: print("0 0") 来源: CSDN 作者: Dora Yihong 链接: https://blog.csdn.net/lee1hong

Pytorch——自动求导机制

别来无恙 提交于 2019-11-28 08:16:12
文章目录 Tensor Autograd Autograd过程解析 结论 引用 Tensor Tensor(张量)是Pytorch中的基础计算单位,和numpy中的ndarray一样都是表示一个多维矩阵,不同的地方在于:Tensor既可以在CPU上运算也可以在GPU上进行运算,而ndarray只能在CPU上进行计算。 Tensor有三个重要的属性: data :保存张量的值; grad :保存该张量的梯度; grad_fn :指向一个用于反向传播计算输入梯度的Function对象; 在创建Tensor默认是不使用梯度的,如果需要进行梯度计算需要设置属性: requires_grad = True Autograd Autograd是Pytorch的核心模块,该模块实现了深度学习算法的反向传播(BP)求导过程。在Pytorch中所有作用在Tensor上的操作,Autograd都能为其提供自动微分求导的操作。 在创建Tensor时,同设置属性 requires_grad 为 True 声明该Tensor需要计算梯度。 用户手动创建的Tensor的 grand_fn 属性默认是 None 。 在张量进行操作之后 grad_fn 就回被赋值为一个新的函数,该函数指向创建了该Tensor的Function对象。 Tensor 和 Function 共同组成一个非循环图,通过 grad_fn

PAT B1010 一元多项式求导

老子叫甜甜 提交于 2019-11-28 05:55:27
PAT B1010 一元多项式求导 题目描述:   设计函数求一元多项式的导数。(注:x​n​​(n为整数)的一阶导数为nx​n−1​​。)    输入格式:   以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。    输出格式:   以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。    输入样例:    3 4 -5 2 6 1 -2 0    输出样例:    12 3 -10 1 6 0 参考代码: 1 /*********************************************** 2 PAT B1010 一元多项式求导 3 ***********************************************/ 4 #include <iostream> 5 #include <vector> 6 7 using namespace std; 8 9 int main() 10 { 11 vector<int> func; //储存系数和指数,偶数位是系数,奇数位是指数 12 13 int temp = 0; 14 while (cin >> temp) { 15 func.push_back

PAT Basic 1010 一元多项式求导 (25 分)

拥有回忆 提交于 2019-11-28 04:37:21
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。 输出格式: 每个测试用例的输出占一行,输出倒序后的句子。 输入样例: Hello World Here I Come 输出样例: Come I Here World Hello #include <iostream> #include <sstream> #include <stack> using namespace std; int main() { stringstream ss; string str,tmp; stack<string> ans; getline(cin,str); ss<<str; while(ss>>tmp){ ans.push(tmp); } while(!ans.empty()){ cout<<ans.top(); ans.pop(); if(ans.size()!=0) cout<<" "; } system("pause"); return 0; } 来源: https://www.cnblogs.com/littlepage/p/11392193.html

PTA1010一元多项式求导

*爱你&永不变心* 提交于 2019-11-27 20:39:14
设计函数求一元多项式的导数。 ​ n ​​( n为整数)的一阶导数为 n x ​ n − 1 ​​。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0 。 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 3 -10 1 6 0 import java.util.Scanner; public class Main{//success public static void main(String[] args) { Scanner in = new Scanner(System.in); boolean flag = true; String s = in.nextLine(); in.close(); String[] s1 = s.split("\\s+"); for(int i = 0 ; i <= s1.length - 2 ; i += 2) { if(Integer.parseInt(s1[i + 1]) * Integer.parseInt(s1[i]) != 0) { if(!flag) { System.out.print("

7-16 一元多项式求导

风流意气都作罢 提交于 2019-11-26 18:51:07
#include <iostream> #include <stdio.h> #include <sstream> using namespace std; typedef struct note { int xs,zs; struct note *next; }note; note* CreatList() { note *head,*q,*p; head=(note*)malloc(sizeof(note)); head->next=NULL; q=head; string b; getline(cin,b); stringstream ss(b); int aa,bb; while(ss>>aa>>bb) { p=(note*)malloc(sizeof(note)); p->xs=aa; p->zs=bb; p->next=NULL; q->next=p; q=p; } return head; } note* QD(note* p) { note *head; head=p; while(p!=NULL) { if(p->zs!=0) { p->xs=p->xs*p->zs; p->zs=p->zs-1; } else { p->xs=0; p->zs=0; } p=p->next; } return head; } void Print(note* p) { int f