![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=1738962508-ymeI1xmaMW8iuXsTrSoTZSuSM3Aes6tT-0-581c5a30d284e48991df16c46b1f29eb)
如图3.17所示,很容易地得到f(x)在P点(x0, y0)切向量:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P116_3712484.jpg?sign=1738962508-4ZHifyUbVf8bEE1M95iJZ21Os3lYzeqZ-0-506b813bc1dd5ab2869f5c339f99b599)
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P116_3712485.jpg?sign=1738962508-JeTlzgPtoL15U4ChiN9PEX2NiRayz4cD-0-35d684ea4b85fada547ffa8dc23fb8df)
图3.17 函数f(x)上P点切向量和法向量
和平面直线不同,切向量随着P点位置变化而变化。和上一节平面直线一样,同样构造如下二元F(x, y)函数:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P116_3712487.jpg?sign=1738962508-l7L40QSqdsZARTAOS9X9lyeJ8YGlzagR-0-e27b34b3f15cb1c17838fa351071e91f)
P点(x0, y0)法向量:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P116_3712488.jpg?sign=1738962508-1QBp9qfbUO516tFn8XqdjtbvMgB7vSBH-0-ad2c4d9cd96ecbf98ae880658e7ac8eb)
同样,法向量随着P点位置变化而变化。以如下函数为例,用diff() 和quiver() 函数计算一阶导数,并绘制函数法向量和切向量:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712491.jpg?sign=1738962508-mD0tU1rPtwBlpumqhkC3sBLvegpZcjmX-0-d30581ca8f20ed23e4ab32cf4313125f)
f(x)一阶导数如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712492.jpg?sign=1738962508-RgELL8rE31eIzH6aZJ0XUWfdecmi2rSd-0-ded5507f45b19d2df6068361425e01ae)
P点(x0, y0)法向量表达式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712493.jpg?sign=1738962508-JopiDZNtASlgnKqzcNsOrVhXvxxfhjP7-0-8755d457d5ee8dc5b3bfabadf6f3d913)
P点(x0, y0)切向量表达式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712494.jpg?sign=1738962508-QhWAiCDX1utFMTnjdkIIIcFuF4cYYDDT-0-cf70001f5ed23ae5f40b6c5da98eb7b6)
丛书第一册第6章中,绘制过函数切线和法线位置图。当时采用gradient()、surfnorm() 和quiver()等函数。本节采向量解析式和quiver()函数绘制切向量和法向量。图3.18展示x在[-5, 5] 范围变化时,不同位置法向量和切向量大小和方向。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P117_3712495.jpg?sign=1738962508-TjrygOZnUV5KS5onfpC1PcWFEZveDYFw-0-102495e8abe53ad3763a2a796f4c3a9e)
图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=1738962508-i0iszd6AUzvFtLI4FrzbWDSLCdgYs5ck-0-60b4ae2faf6ce0c3124f491e18250d68)
上式中,x为自变量,y为因变量;发现x和y并非一一映射关系。本书第1章符号数学运算部分讨论过fimplicit() 和fimplicit3() 函数绘制隐函数平面图形和空间图像。本节下面内容介绍隐函数法向量和法向量。以单位圆方程为例,先构造F(x, y)函数,如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P118_3712501.jpg?sign=1738962508-oLNF53bzBZuvmWDYKqXwZRHvAFUe4vuO-0-1ecd0587aa74d51fb4800d10c0c8e0a9)
x-y平面,圆上任意一点P点(x0, y0)法向量表达式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P118_3712503.jpg?sign=1738962508-nWayuiP9Mv1riThIRre4nWZJaGzbDFcC-0-3b05e38f59d139cd3d487bb5c60a868c)
P点(x0, y0)切向量表达式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P119_3712505.jpg?sign=1738962508-W6sF989zkzuZ6GQaXTodi8gdF2pgS5WJ-0-3729ddec72b948d4c889ed73a2a79b38)
图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=1738962508-CQzkTdDR8quRXvUq0VuzPH1fHHtmOtFB-0-7b4c99c579742e26d0b0ba908ee080ed)
图3.19 单位圆不同点法向量和切向量