官术网_书友最值得收藏!

3.3 曲線

對(duì)于普通一元函數(shù)光滑y = fx),在點(diǎn)Px0, y0)處,利用fx)一階導(dǎo)數(shù),得到P點(diǎn)處切線斜率。fx)在P點(diǎn)切線方程如下:

如圖3.17所示,很容易地得到fx)在P點(diǎn)(x0, y0)切向量:

圖3.17 函數(shù)fx)上P點(diǎn)切向量和法向量

和平面直線不同,切向量隨著P點(diǎn)位置變化而變化。和上一節(jié)平面直線一樣,同樣構(gòu)造如下二元Fx, y)函數(shù):

P點(diǎn)(x0, y0)法向量:

同樣,法向量隨著P點(diǎn)位置變化而變化。以如下函數(shù)為例,用diff() 和quiver() 函數(shù)計(jì)算一階導(dǎo)數(shù),并繪制函數(shù)法向量和切向量:

fx)一階導(dǎo)數(shù)如下:

P點(diǎn)(x0, y0)法向量表達(dá)式如下:

P點(diǎn)(x0, y0)切向量表達(dá)式如下:

叢書第一冊(cè)第6章中,繪制過函數(shù)切線和法線位置圖。當(dāng)時(shí)采用gradient()、surfnorm() 和quiver()等函數(shù)。本節(jié)采向量解析式和quiver()函數(shù)繪制切向量和法向量。圖3.18展示x在[-5, 5] 范圍變化時(shí),不同位置法向量和切向量大小和方向。

圖3.18 函數(shù)fx)不同點(diǎn)法向量和切向量

以下代碼繪制圖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

還有一類重要函數(shù),叫作隱函數(shù)(implicit function)。通俗地說,因變量隱含在隱函數(shù)方程中。比如下式,圓心位于原點(diǎn)單位圓方程:

上式中,x為自變量,y為因變量;發(fā)現(xiàn)xy并非一一映射關(guān)系。本書第1章符號(hào)數(shù)學(xué)運(yùn)算部分討論過fimplicit() 和fimplicit3() 函數(shù)繪制隱函數(shù)平面圖形和空間圖像。本節(jié)下面內(nèi)容介紹隱函數(shù)法向量和法向量。以單位圓方程為例,先構(gòu)造Fx, y)函數(shù),如下:

x-y平面,圓上任意一點(diǎn)P點(diǎn)(x0, y0)法向量表達(dá)式如下:

P點(diǎn)(x0, y0)切向量表達(dá)式如下:

圖3.19展示單位圓上不同位置切向量和法向量,可由以下代碼獲得。下列代碼使用for循環(huán),請(qǐng)讀者嘗試用向量運(yùn)算代替for循環(huán)。

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')

圖3.19 單位圓不同點(diǎn)法向量和切向量

主站蜘蛛池模板: 同仁县| 三门峡市| 泰宁县| 寻乌县| 云南省| 格尔木市| 乌拉特前旗| 浦县| 华阴市| 前郭尔| 葵青区| 威宁| 桃园县| 昭苏县| 永登县| 山东省| 唐河县| 永新县| 邹城市| 金阳县| 富顺县| 阳高县| 安乡县| 大连市| 许昌市| 青田县| 花莲县| 四子王旗| 嘉义县| 永新县| 河源市| 青阳县| 镇远县| 黔南| 乌拉特前旗| 济阳县| 德庆县| 谢通门县| 汕尾市| 涟源市| 花莲县|