【发布时间】:2018-05-17 06:44:02
【问题描述】:
给定两个函数,我想找到它们之间的切线。如果给定两个任意函数 f(x) 和 g(x),则其公式/系统为:
f(x)-x*f'(x)-g(y)+y*g'(y)=0
f'(x)-g'(y)=0
当求解时,假设 x=a 和 y=b,给出两个点:(a,f(a)) 和 (b,g(b)),这样就可以在它们之间画一条线。 我想找到之间切线的函数是 x^-x 及其一阶导数 (x^-x(-ln(x)-1))。 我的代码是:
import sympy as sp
import numpy as np
import scipy.optimize as opt
n=1
s1,s2=sp.symbols('s1 s2')
def f1(z1):
return z1**-z1
def myFunction(z):
x=z[0]
y=z[1]
q1=f1(s1)-s1*sp.diff(f1(s1),s1,n)-
sp.diff(f1(s2),s2,n)+s2*sp.diff(f1(s2),s2,n+1)
q2=sp.diff(f1(s1),s1,n)-sp.diff(f1(s2),s2,n+1)
F=np.empty((2))
F[0]=abs(q1.subs([(s1,x),(s2,y)]))
F[1]=abs(q2.subs([(s1,x),(s2,y)]))
return F
zGuess=np.array([0.6,1.3])
z=opt.fsolve(myFunction, zGuess)
print(z)
解决方案应该是 x=0.59515 和 y=1.37866,但它显示“无法计算 0.6 的一阶导数”。在分别对 x 和 y 求导后,我不知道如何让它输入求解系统的初始值。我如何在能够改变 n 的同时解决这些值,以便在一阶导数和二阶导数之间也可以找到切线,依此类推?这是一张显示它的样子的图片。
【问题讨论】:
-
嘿@Mr. T,我意识到我必须使用虚拟变量进行微分,然后使用 subs 函数根据 x 和 y 获取它,但现在它说“不能将复数转换为浮点数”。这些功能很复杂,但并不复杂。 (即实数和虚数)python 甚至可以解决像这样的长方程吗?这些就是系统方程的样子。 -xx**(-x)*(-log(x) - 1) + yy**(-y)*((log(y) + 1)**2 - 1 /y) - y**(-y)*(-log(y) - 1) + x**(-x) , -y**(-y)*((log(y) + 1)** 2 - 1/y) + x**(-x)*(-log(x) - 1)
标签: python-3.x system derivative