python实现隐函数曲率求解
一個大作業(yè)的實現(xiàn),功能為對隱函數(shù)進行單位切向量以及曲率求解,在此分享出來,源碼如下,測試可運行,希望對您有幫助:
from sympy import *
#聲明函數(shù)與變量
c = symbols(‘c x y z’,cls=Function)
t = symbols(‘t’)
#定義隱函數(shù)集
xt = 2 * t
yt = t2 + 1
zt = t3 + 2 * t + 1
t0 = 1
#原函數(shù)
print(“xt原函數(shù):”, xt)
print(“yt原函數(shù):”, yt)
print(“zt原函數(shù):”, zt)
#代入t = 1
xt_ = xt.evalf(subs={‘t’:t0})
yt_ = yt.evalf(subs={‘t’:t0})
zt_ = zt.evalf(subs={‘t’:t0})
print(‘代入t=’, t0)
print(“xt原函數(shù)求解:”, xt_)
print(“yt原函數(shù)求解:”, yt_)
print(“zt原函數(shù)求解:”, zt_, ‘\n’)
#求一階偏導
#dxt = diff(xt, t, 2)
dxt = diff(xt, t)
dyt = diff(yt, t)
dzt = diff(zt, t)
print(“x對t的一階偏導:”, dxt)
print(“y對t的一階偏導:”, dyt)
print(“z對t的一階偏導:”, dzt)
#代入t = 1
xt1 = dxt.evalf(subs={‘t’:t0})
yt1 = dyt.evalf(subs={‘t’:t0})
zt1 = dzt.evalf(subs={‘t’:t0})
print(‘代入t=’, t0)
print(“xt一階偏導函數(shù)求解:”, xt1)
print(“yt一階偏導函數(shù)求解:”, yt1)
print(“zt一階偏導函數(shù)求解:”, zt1, ‘\n’)
#求二階偏導
dxt2 = diff(xt, t, 2)
dyt2 = diff(yt, t, 2)
dzt2 = diff(zt, t, 2)
print(“x對t的二階偏導:”, dxt2)
print(“y對t的二階偏導:”, dyt2)
print(“z對t的二階偏導:”, dzt2)
#代入t = 1
xt2 = dxt2.evalf(subs={‘t’:t0})
yt2 = dyt2.evalf(subs={‘t’:t0})
zt2 = dzt2.evalf(subs={‘t’:t0})
print(“xt二階偏導函數(shù)求解:”, xt2)
print(“yt二階偏導函數(shù)求解:”, yt2)
print(“zt二階偏導函數(shù)求解:”, zt2)
#求解單位切向量
#C’(t) = [xt1,yt1,zt1]
normal = sqrt(xt1xt1 + yt1yt1 + zt1*zt1)
if(normal == 0.0):
print(‘單位切向量不存在?!?
else:
print(‘單位切向量為:’, xt1/normal, yt1/normal, zt1/normal)
#求解C(t)在t0出處的曲率
#C’‘(t) = [xt2,yt2,zt2]
#計算||C’(t)||2^3
normal_3 = normalnormalnormal
#計算C’(t)叉乘C’'(t)
aXb1 = yt1zt2 - yt2zt1
aXb2 = -(xt1zt2 - xt2zt1)
aXb3 = xt1yt2 - xt2yt1
normal_up = sqrt(aXb1aXb1 + aXb2aXb2 + aXb3*aXb3)
if(normal_3 == 0.0):
print(‘normal_3 == 0.0,此曲率公式無法用于本場景計算?!?
#其它方法:函數(shù)極限逼近
else:
kt = normal_up / normal_3
print(‘所求曲率為:’, kt)
運行結果如下:
總結
以上是生活随笔為你收集整理的python实现隐函数曲率求解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue + monaco-editor
- 下一篇: js打印功能