我问这个question https://stackoverflow.com/questions/8592200/mathematica-tangent-of-two-curves不久前,这确实有助于达成解决方案。我已经找到了一种可以接受的方法,但仍然没有完全达到我想要的效果。假设有两个函数f1[x]
and g1[y]
我想确定的值x
and y
为公切线。我至少可以确定x
and y
对于切线之一,例如具有以下内容:
f1[x_]:=(5513.12-39931.8x+23307.5x^2+(-32426.6+75662.x-43235.4x^2)Log[(1.-1.33333x)/(1.-1.x)]+x(-10808.9+10808.9x)Log[x/(1.-1.x)])/(-1.+x)
g1[y_]:=(3632.71+3806.87y-51143.6y^2+y(-10808.9+10808.9y)Log[y/(1.-1.y)]+(-10808.9+32426.6y-21617.7y^2)Log[1.-(1.y)/(1.-1.y)])/(-1.+y)
Show[
Plot[f1[x],{x,0,.75},PlotRange->All],
Plot[g1[y],{y,0,.75},PlotRange->All]
]
Chop[FindRoot[
{
(f1[x]-g1[y])/(x-y)==D[f1[x],x]==D[g1[y],y]
},
{x,0.0000001},{y,.00000001}
]
[[All,2]]
]
但是,您会从图中注意到,在稍大的值处存在另一个公切线x
and y
(say x
〜4和y
〜5)。现在,有趣的是,如果我稍微改变一下上面的表达式f1[x]
and g1[y]
类似于以下内容:
f2[x_]:=(7968.08-59377.8x+40298.7x^2+(-39909.6+93122.4x-53212.8x^2)Log[(1.-1.33333x)/(1.-1.x)]+x(-13303.2+13303.2x)Log[x/(1.-1.x)])/(-1.+x)
g2[y_]:=(5805.16-27866.2y-21643.y^2+y(-13303.2+13303.2y)Log[y/(1.-1.y)]+(-13303.2+39909.6y-26606.4y^2)Log[1.-(1.y)/(1.-1.y)])/(-1.+y)
Show[
Plot[f2[x],{x,0,.75},PlotRange->All],
Plot[g2[y],{y,0,.75},PlotRange->All]
]
Chop[FindRoot[
{
(f2[x]-g2[y])/(x-y)==D[f2[x],x]==D[g2[y],y]
},
{x,0.0000001},{y,.00000001}
]
[[All,2]]
]
并使用相同的方法确定公切线,Mathematica 选择找到较大的值x
and y
为正斜切线。
最后,我的问题是:Mathematica 是否可以同时找到最高点和最低点x
and y
公切线的值并以类似的方式存储这些值,以便我可以制作列表图?功能f
and g
以上都是另一个变量的复杂函数,z
,我目前正在使用类似下面的东西来绘制切点(应该是两个x
和两个y
)作为函数z
.
ex[z_]:=Chop[FindRoot[
{
(f[x,z]-g[y,z])/(x-y)==D[f[x],x]==D[g[y],y]
},
{x,0.0000001},{y,.00000001}
]
[[All,2]]
]
ListLinePlot[
Table[{ex[z][[i]],z},{i,1,2},{z,1300,1800,10}]
]