【转载】我们怎么理解导数?

本文介绍了对导数的三种认知:变化率、线性近似工具和线性变换。在从物理概念引入导数后,作者指出在一元函数中导数作为切线斜率的观念在多元函数中变得片面,进而阐述了导数如何用于找到线性近似,并在二元函数中寻找切平面。通过线性变换的概念,解释了多元微积分中可微函数切线共面的原因。

参考:马同学马同学提供线性代数,微积分,概率论与数理统计,机器学习等知识讲解https://www.matongxue.com/madocs/243/

        在我学习微积分的过程中,我对导数的认知经历了三次变化:(1)导数是变化率、是切线的斜率、是速度、是加速度;(2)导数是用来找到“线性近似”的数学工具;(3)导数是线性变换。

        我认为第一种认知比较片面,在多元函数的情况下甚至是错误的。第二种认知更接近微积分的本质,第三种认知是为了实现第二种认知发展出来的。因为种种原因,我们的学习都是从第一种认知开始的。我会在本文分别介绍一下这三种认知。最后会通过第三种认知回答“多元微积分中,可微函数的切线为什么会共面(此平面即切平面)?”

1、导数是变化率、是切线的斜率、是速度、是加速度

        微积分的发明人之一是牛顿,牛顿主要还是研究物理为主,微积分不过是他发明出来研究物理的一个数学工具(大师就是这么厉害)。因为牛顿研究物理的缘故,所以牛顿用变化率的方式引入了导数(牛顿称之为“流数”)。在物理里面变化率还是很自然的概念,比如为了求瞬时速度:

 

同理,求加速度的话就是求速度对于时间的变化率,这里就不赘述了。学习物理的一般习惯把导数看作变化率。还可以顺便得到了切线的斜率:

 我们一般是上面这样的学习过程,所以我们认为,导数是曲线的变化率、是瞬时速度、是加速度,还可以是切线的斜率。

但是!把导数看作是变化率、是切线的斜率,在一元函数的时候是正确的,但是,敲黑板,说但是了哈。在二元函数中,比如这样一个曲面上的一点a,在曲面上可以做无数条过a点的曲线(图上随便画了三根):

 

把导数看作是变化率、是切线的斜率,在多元函数中是片面的,甚至是不正确的。我们必须要重新审视“导数是什么”这个问题。顺便说一下,把导数继续看作变化率,切线的斜率,可以得到偏导数、方向导数、全导数,可以参看我之前写过的一个回答:什么是全导数? - 知乎

导数是用来找到“线性近似”的数学工具。讲这个之前,我们要先理解微积分的基本思想。这个思想在我的很多回答中都提到了,这里简单的阐述下。

2 导数是用来找到“线性近似”的数学工具

2.1 微积分的基本思想

微积分的基本思想是“以直代曲”: 

“以直代曲”的意思就是,切线可以在切点附近很好的近似曲线: 

 如果在曲线上多选几个点,都作出附近的切线,我们可以透过切线看到曲线的轮廓:

切线可以在切点附近很好的近似曲线。如果仔细看泰勒公式、洛必达法则等,还会通过代数发现这一事实。

2.2 导数是用来找到“线性近似”的数学工具

因为“以直代曲”是微积分的基础,所以我们首要任务就是要找到这个“直”,也就是切线,也就是所谓的“线性近似”。导数就是为了完成这个任务需要使用的数学工具。我们来看看,在一元函数中:

 因此,在一元函数中,我们把导数看作斜率,可以找到我们想要的“线性近似”(切线),但是在二元中,我们需要新的技术手段。

3 导数是线性变换

3.1 二元函数的“线性近似”

导数最主要的目的是找到“线性近似”,在一元函数的时候是要找到切线,在二元函数的时候是要找到一个切平面(可以参考我之前的回答:求解全微分的意义?最好感性一点的认识 - 知乎)

3.2 线性变换

对线性代数不熟悉的话,可以先看下我之前的回答 如何通俗地讲解「仿射变换」这个概念? - 知乎。下面就会用到大量的线性代数基础知识,我不再进行解释了。还是从一元的时候开始推:

 

preview

 

3.3 通过导数A来找到切平面 

 

 至此,导数完成了找到“线性近似”的任务。这里也很自然的回答了“多元微积分中,可微函数的切线为什么会共面(此平面即切平面)?”

 

 

 

 

 

 

### 回答1: 在C语言中,可以使用数值方法来近似计算函数的导数。其中最常用的方法是有限差分法,其基本思想是通过计算函数在两个相邻点处的函数值之差来估计导数。 有限差分法的一般形式为: f'(x) ≈ (f(x + h) - f(x)) / h 其中 h 是一个很小的数,表示两个相邻点之间的距离。通过不同的取值方式,可以得到多种不同的差分公式,如中心差分法、向前差分法和向后差分法等。 以下是一个简单的C语言程序,使用向前差分法计算函数 f(x) = x^2 在 x=1 处的导数: ```c #include <stdio.h> #include <math.h> double f(double x) { return x * x; } double df(double x, double h) { return (f(x + h) - f(x)) / h; } int main() { double x = 1.0; double h = 0.0001; double dfx = df(x, h); printf("f'(%lf) = %lf\n", x, dfx); return 0; } ``` 输出结果为: ``` f'(1.000000) = 2.000100 ``` 需要注意的是,选择合适的步长 h 对计算结果的精度有很大影响。通常情况下,可以通过尝试不同的 h 值,观察计算结果的变化来确定一个合适的值。另外,对于一些更加复杂的函数,可能需要使用更加精细的差分公式或者其他数值方法来计算导数。 ### 回答2: 要用C语言计算函数的导数,可以采用数值方法和符号方法两种方式。 数值方法是通过近似计算函数在某一点的导数值。可以使用有限差分法,即将函数在某一点x附近进行展开,并且利用函数在附近的多个点上的取值来估计导数值。常用的有两点公式、三点公式和五点公式等。以三点公式为例,假设函数为f(x),要计算在点x0处的导数,可以使用以下公式: f'(x0) ≈ (f(x0+h) - f(x0-h)) / (2h) 其中h为足够小的步长。通过不断减小h的值,可以得到更精确的导数值。 符号方法是通过对函数进行解析求导,利用已知的数学公式来计算导数。需要在C语言中定义函数,并使用数学库中的函数来进行各种运算。例如,要计算f(x) = x^2的导数,可以直接在C语言中定义函数f,然后使用pow函数计算x的平方。导数为f'(x) = 2x。 总的来说,数值方法适用于一般的函数,可以通过逼近计算得到数值解。符号方法适用于已知解析表达式的函数,可以直接通过数学公式来计算导数。根据不同情况,可以选择合适的方法来计算函数的导数。 ### 回答3: 计算函数的导数是通过近似的方式来实现的。在C语言中,我们可以使用数值求导方法来计算函数的导数。 一种常用的数值求导方法是有限差分方法。它基于函数在某点附近的局部线性逼近来计算导数。具体而言,我们可以选择一个小的步长h,然后使用以下公式来计算函数f(x)在某点x处的导数: f'(x) ≈ (f(x+h) - f(x))/h 在C语言中,我们可以编写一个函数来实现这个计算过程。以下是一个示例代码: ```c #include <stdio.h> double compute_derivative(double (*func)(double), double x) { double h = 0.0001; // 步长 double fx = func(x); double fx_plus_h = func(x + h); double derivative = (fx_plus_h - fx) / h; return derivative; } double my_function(double x) { return x * x; // 待求导函数 } int main() { double x = 2.0; double derivative = compute_derivative(my_function, x); printf("函数在x=%.2f处的导数为:%.2f\n", x, derivative); return 0; } ``` 在上述代码中,我们定义了一个`compute_derivative`函数,它接受一个函数指针作为输入,并计算该函数在给定点的导数。在`main`函数中,我们示范了如何计算函数`f(x)=x^2`在x=2处的导数。运行上述代码,我们将得到输出结果: 函数在x=2.00处的导数为:4.00 这表示函数`f(x)=x^2`在x=2处的导数为4.00。你可以根据你要计算导数的具体函数,修改`my_function`函数中的函数表达式,并在`main`函数中更改要计算导数的点的值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值