![MATLAB金融风险管理师FRM(高阶实战)](https://wfqqreader-1252317822.image.myqcloud.com/cover/187/36862187/b_36862187.jpg)
3.3 曲线
对于普通一元函数光滑y = f(x),在点P(x0, y0)处,利用f(x)一阶导数,得到P点处切线斜率。f(x)在P点切线方程如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P116_3712483.jpg?sign=1738903774-qpVJzbjmrMtXfsHm6PLR4AhYOwetrj4D-0-f3a20acf16384454a5e7ff0277e26c44)
如图3.17所示,很容易地得到f(x)在P点(x0, y0)切向量:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P116_3712484.jpg?sign=1738903774-xOK9G03h84HBMZ4a0N7H8mZh8hFmDYUK-0-2a17cd4aa83050c512d300e0f0a04798)
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P116_3712485.jpg?sign=1738903774-2uzPqAJvJ6juoG9qpHjtno0NcGr2uWrr-0-2dca34c834552bceb7de732e2316a988)
图3.17 函数f(x)上P点切向量和法向量
和平面直线不同,切向量随着P点位置变化而变化。和上一节平面直线一样,同样构造如下二元F(x, y)函数:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P116_3712487.jpg?sign=1738903774-HzcpNDcgmiGYaM21UJjH6dIQKFbVQltY-0-34b77f8b38b4206985865f2d1a224db2)
P点(x0, y0)法向量:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P116_3712488.jpg?sign=1738903774-l0v6QiOZpYr4ewiU2Xhppflnz8SiSvKP-0-60a4d03c6af373d60856a53d5ffe65ab)
同样,法向量随着P点位置变化而变化。以如下函数为例,用diff() 和quiver() 函数计算一阶导数,并绘制函数法向量和切向量:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712491.jpg?sign=1738903774-TKLLeRquCbWCKkfTtN3oDURxZTf4KvfM-0-bce02f1c4b3beab0faa8dd3d4ec5c99c)
f(x)一阶导数如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712492.jpg?sign=1738903774-OZmN3lL9Gx69jlH9tZNtYzDBkKsjv2Qz-0-65b02924ac2c8c87002b664479adf769)
P点(x0, y0)法向量表达式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712493.jpg?sign=1738903774-l3bW0PnvijEegEzNAe6ZoFpR6Qfo9SgX-0-38241627d9a2cf400719099db54a4ca0)
P点(x0, y0)切向量表达式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712494.jpg?sign=1738903774-T04t8sK3N3wRKU6yEIooiPKnf3oAbsIy-0-f927803384cf2f7c141ba4feaad299b2)
丛书第一册第6章中,绘制过函数切线和法线位置图。当时采用gradient()、surfnorm() 和quiver()等函数。本节采向量解析式和quiver()函数绘制切向量和法向量。图3.18展示x在[-5, 5] 范围变化时,不同位置法向量和切向量大小和方向。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712495.jpg?sign=1738903774-pqwceKZMnLQaakz397P2B11Lx0vRXNUV-0-ebba5f10bd8824d64b63238c69b62593)
图3.18 函数f(x)不同点法向量和切向量
以下代码绘制图3.18。
B4_Ch3_3.m clc; close all; clear all syms f(x) f(x) = cos(2*x)*x; df = diff(f,x) x_fine = -5:0.1:5; x_coarse = -3.5:0.5:3.5; f_x_fine = double(subs(f,[x],{x_fine})); f_x_coarse = double(subs(f,[x],{x_coarse})); df_x_coarse = double(subs(df,[x],{x_coarse})); figure(1) subplot(1,2,1) plot(x_fine,f_x_fine,'color',[0,96,166]/255); hold on plot(x_coarse,f_x_coarse,'xk') quiver(x_coarse,f_x_coarse,... df_x_coarse,-1 + 0*df_x_coarse,... 'color',[255,153,255]/255) decor subplot(1,2,2) plot(x_fine,f_x_fine,'color',[0,96,166]/255); hold on plot(x_coarse,f_x_coarse,'xk') quiver(x_coarse,f_x_ coarse,... 1 + 0*df_x_coarse, df_x_coarse,... 'color',[0,153,255]/255) decor function decor() daspect([1,1,1]); xlim([-5,5]); ylim([-5,5]); ax = gca; box off; grid off ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin'; yticks([-4:2:4]); xticks([-4:2:4]); xlabel('x'); ylabel('y') end
还有一类重要函数,叫作隐函数(implicit function)。通俗地说,因变量隐含在隐函数方程中。比如下式,圆心位于原点单位圆方程:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P118_3712499.jpg?sign=1738903774-27uPzyX8ULcrXOHc3kZ3rsWSWmR8aZQ5-0-92f699629e87adebdf314fcf12d0ca47)
上式中,x为自变量,y为因变量;发现x和y并非一一映射关系。本书第1章符号数学运算部分讨论过fimplicit() 和fimplicit3() 函数绘制隐函数平面图形和空间图像。本节下面内容介绍隐函数法向量和法向量。以单位圆方程为例,先构造F(x, y)函数,如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P118_3712501.jpg?sign=1738903774-tGVMINH5WmHyfAiHBJ49DNDM7sCYT276-0-2a5036af20b8d3d125c25364d520dfb3)
x-y平面,圆上任意一点P点(x0, y0)法向量表达式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P118_3712503.jpg?sign=1738903774-uCYLEBIgSYIJCLWh8U0HfKPvPsjBp0BY-0-2a8c6c5f4f60c899f9f3a0c8762901d3)
P点(x0, y0)切向量表达式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P119_3712505.jpg?sign=1738903774-3T7B62KoNIOsBaxj3pALNEEkEcGyk0fF-0-a2f8f1d33870f9dec831c3b1f3e9d8b7)
图3.19展示单位圆上不同位置切向量和法向量,可由以下代码获得。下列代码使用for循环,请读者尝试用向量运算代替for循环。
B4_Ch3_4.m clc; close all; clear all syms x y f = x^2 + y^2 - 1; g = gradient(f, [x, y]) [XX1, XX2] = meshgrid(-3:0.2:3,-3:0.2:3); % 0.4 [XX1_fine, XX2_fine] = meshgrid(-3:.2:3,-3:.2:3); figure(1) hold on thetas = pi/12:pi/6:2*pi; for ii = 1:length(thetas) theta = thetas(ii); x0 = cos(theta); y0 = sin(theta); plot(x0,y0,'xk') dFF_dx = subs(g(1), [x y], {x0,y0}); dFF_dy = subs(g(2), [x y], {x0,y0}); h1 = quiv er(x0,y0,dFF_dx,dFF_dy,... 'color',[255,153,255]/255) h1.AutoScaleFactor = 0.4; h2 = quiver(x0,y0,-dFF_dy,dFF_dx,... 'co lor',[0,153,255]/255) h2.AutoScaleFactor = 0.4; end fimplicit(f, [-2 2 -2 2],'color',[0,96,166]/255,'LineWidth',1); hold on daspect([1,1,1]) xlim([-2.1,2.1]); ylim([-2.1,2.1]); ax = gca; box off; gri d off ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin'; yticks([-2:1:2]); xticks([-2:1:2]) xlabel('x'); ylabel(' y')
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P120_3712509.jpg?sign=1738903774-fKzaXO41cHaWzSNp3M50a8WiKdprkAdo-0-63b0049ac323cb8e39fb9b3df286a7dc)
图3.19 单位圆不同点法向量和切向量