1-2 基于MATLAB的空间曲线曲率挠率的数值计算
1.工具
- 向量函数:设曲线 r ( s ) = ( x ( s ) , y ( s ) ) r(s)=(x(s),y(s)) r(s)=(x(s),y(s))是一条正则曲线,其中 s s s是弧长参数。 r ( s ) r(s) r(s)是以向量形式表示的,所以称为向量函数。
- 向前差商:导数通过 lim Δ x → 0 Δ y Δ x \lim_{\Delta x \to 0} \frac{\Delta y}{\Delta x} \quad limΔx→0ΔxΔy定义的,所以在MATLAB中我们选定步长 Δ x \Delta x Δx(一般小于0.1)后令 f ′ ( x ) = lim Δ x → 0 Δ y Δ x f'(x)=\lim_{\Delta x \to 0} \frac{\Delta y}{\Delta x} f′(x)=limΔx→0ΔxΔy.
2.空间曲线曲率及挠率公式
- 由于空间曲线存在切向量和法向量,且设 α ( s ) \alpha (s) α(s)是 r ( s ) r(s) r(s)的单位切向量场,则 ∣ α ( s ) ∣ = 1 |\alpha (s)|=1 ∣α(s)∣=1,由微分几何知识 β = α ′ ( s ) ∣ α ′ ( s ) ∣ \beta=\frac{\alpha' (s)}{|\alpha'(s)|} β=∣α′(s)∣α′(s)是 r ( s ) r(s) r(s)的单位主法向量,令 γ = α ( s ) × β \gamma=\alpha (s)\times\beta γ=α(s)×β是 r ( s ) r(s) r(s)的单位次法向量。对这些几何量做若干次微商和内积运算后得到空间曲线曲率计算公式: k ( s ) = ∣ r ′ ( t ) × r ′ ′ ( t ) ∣ ∣ r ′ ( t ) ∣ 3 (1) k(s)=\frac{|r'(t)\times r''(t)|}{|r'(t)|^3}\tag {1} k(s)=∣r′(t)∣3∣r′(t)×r′′(t)∣(1)
- 挠率表示曲线相对平面曲线的扭曲程度,由 ∣ d γ d s ∣ |\frac{d\gamma}{ds}| ∣dsdγ∣刻画,而这个几何量由主法向量等几何量的若干次微商运算及内积运算后得到挠率计算公式: τ ( t ) = k ( s ) = ( r ( t ) , r ′ ( t ) , r ′ ′ ( t ) ) ∣ r ′ ( t ) × r ′ ′ ( t ) ∣ 2 (2) \tau(t)=k(s)=\frac{(r(t),r'(t),r''(t))}{|r'(t)\times r''(t)|^2}\tag {2} τ(t)=k(s)=∣r′(t)×r′′(t)∣2(r(t),r′(t),r′′(t))(2)
3.MATLAB程序实现
例
\quad
计算
r
(
t
)
=
(
5
s
i
n
t
,
5
c
o
s
t
,
3
t
)
,
t
∈
(
0
,
2
π
)
r(t)=(5sint,5cost,3t),t\in(0,2\pi)
r(t)=(5sint,5cost,3t),t∈(0,2π)的数值曲率与数值挠率
解
\quad
直接对公式(1)和公式(2)离散化计算结果即可
clc,clear
h=0.01; %定义步长
t=0:h:2*pi; %定义域
x=5*cos(t);
y=5*sin(t);
z=3*t;
r=[x;y;z]; %表示函数
r1=gradient(r)./h; %求一阶导
r2=gradient(r1)./h; %二阶导
r3=gradient(r2)./h; %三阶导
r1=r1';r2=r2';r3=r3';
%% 曲率、挠率
v=cross(r1,r2,2); %一阶导与二阶导做外积
e=dot(r3,v,2); %(r',r'',r''')混合积
c=zeros(length(t),1); %定义矩阵c储存一阶导二阶导叉乘模长,d储存一阶导模长
d=c;
for i=1:length(r)
c(i)=norm(v(i,:)); %一阶导二阶导外积的模长
d(i)=norm(r1(i,:)); %一阶导模长
end
k=c./(d.^3); %曲率
tt=e./c.^2; %挠率
从计算结果我们可以发现端点值用此方法处理效果不好,更好的处理结果见知网论文资料。