导数:我们简单的可以理解成 对于一个函数 f(X) 整体的变化趋势的一种规律。而这里的导数是一种函数。函数的导数又名导函数。
用变化率来说直白一点: 设函数y=f(X) 而我们的变化率就是这个样子的。而我们的导数,就是将变换量无限的缩小无限的缩小。无限趋近为0。用于物理来讲就是瞬时速度变化率。
说白了就是一种引入到函数里的变化率的一种概念。。
而我们这里讲解一种最基础的已知函数F(X)=Xn 求出它的导函数。
恩。不对。讲之前我们还要引入一个全新的概念: 二项式定理。
以下为证明过程。
已知-------式子1
假设x变化量为 Δx
可得:
将右边拆开:
可得出: -------式子2
我们之后利用之前讲过定义式
之后我们将这个式子2拆出个xn
我们可以令i=0 就可得出
我们就可的出-----式子3
将式子3-式子2 可得出:
===>
-式4
而我们再运用定义式将式4带入:
==>
---式5
之后我们发现如果将Δx趋近于0 Δx的指数可以为1 其中有一项是不受Δx大小所控制的,我们将它提出。
可得----式6
我们将Δx趋近于0 可以发现。式子便可以简单的整理为
于是 证明就结束了。
而多项式的导数,其实就是将每一项都求导,便可得出整个式子的导数。。
就是这样。
接下来是一道非常神奇的题目:
input:
output:
输入1:
3
-2 5 -4 1
输入2:
4
8 -20 18 -7 1
输入3:
2
2 -3 1
输出1:1 1 2
输出2:1 2 2 2
输出3 :1 2
而这道题其实是用导数来判断重根。。题目中的解可以暴力枚举。就20个。但是重根是没有办法枚举的。。当然这道题可以用多项式除法来解决。不过。我到觉得,这个求导写起来很简单。
具体为什么能用导数求解呢?这个这里无法给出证明提供一个文献:
导数在求方程重根中的应用
我们先暴力枚举出一个可行根。之后将整个多项式求导,如果这个可行根又是 求导后的式子 的可行根,说明这个根为重根。而我们可以继续往下将求导后的式子继续求导,继续判断是否为可行根,直到这个可行根不再是 某个多阶导的可行根。就可以停止,求了几次导,就有原式中可行根这个数的几个重根。而我们就可以:以递归的形式呈现出来。之后这个实现倒是很简单。计算系数就好。
其实我个人觉得就是如果在图像中。对此函数求导后 这个根的趋势,依然为0 (即趋势为没有变化),那将图像无限放大,无限放大。就可以发现 。这几个根就重合在此点上。而趋势却是很小。而每一次求导就可以发现这个趋势上的趋势上的这个根的趋势。 此段为本人意淫,没有什么根据。可以选择不看。
对了。还有就是。不开long long 见祖宗 十年OI一场空。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string.h>
using namespace std;
int line[10],line_1[10];
int n;
int visit[30];
int DFS(int k,int a)
{
int step=k;
long long int ans=0;
for(int i=0;i<=n;++i)
{
if(step){
line_1[i]*=step;
ans+=(line_1[i]*pow(a,step-1));
step--;
}
else break;
}
if(ans==0)
{
visit[a]++;
DFS(k-1,a);
}
return 0;
}
int main()
{
//freopen("equation.in","r",stdin);
//freopen("equation.out","w",stdout);
scanf("%d",&n);
for(int i=n;i>=0;--i)scanf("%d",&line[i]);
for(int a=1;a<=20;++a)
{
long long int ans=0;
int step=n;
for(int i=0;i<=n;++i)
{
ans+=(line[i]*(pow(a,step)));
step--;
}
if(ans==0){
visit[a]++;
memcpy(line_1,line,sizeof(line));
DFS(n,a);
}
}
for(int i=1;i<=20;++i)
{
if(visit[i])
{
while(visit[i]--)
{
printf("%d ",i);
}
}
}
//fclose(stdin);
//fclose(stdout);
return 0;
}
最后声明: 此博客 博主只是初学此内容所写下的博文。可能内有瑕疵与错误 往大家指出与改正。共同学习。非常感谢。