首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wolfram Mathematica InverseFunction的性能

Wolfram Mathematica InverseFunction的性能
EN

Stack Overflow用户
提问于 2018-08-03 02:21:00
回答 2查看 130关注 0票数 0

给定常量

代码语言:javascript
复制
mu = 20.82;
ex = 1.25;
kg1 = 1202.76;
kp = 76.58;
kvb = 126.92;

我需要反转函数

代码语言:javascript
复制
f[Vpx_,Vgx_] := Vpx Log[1 + Exp[kp (1/mu + Vgx/(Vpx s[Vpx]))]];

哪里

代码语言:javascript
复制
s[x_] := 1 + kvb/(2 x^2);

所以我得到了一个两个变量的函数,第二个是Vgx

我试着用

代码语言:javascript
复制
t = InverseFunction[Function[{Vpx, Vgx}, f[Vpx, Vgx]], 1, 2];

使用t[451,-4]进行测试

它花费了太多的时间,以至于每次我尝试它时,我都会停止评估。

另一方面,只使用一个变量,一切都会正常工作:

代码语言:javascript
复制
Vgx = -4;
t = InverseFunction[Function[{Vpx}, f[Vpx,Vgx]]];
t[451]

这是我的疏忽?方法是不合适的吗?或者这是Wolfram Mathematica的局限性?

谢谢

Teodoro Marinucci

附注:对于每个感兴趣的人来说,这是一个与诺曼科伦三重奏模型有关的问题。

EN

回答 2

Stack Overflow用户

发布于 2018-08-03 07:33:18

正如我在我的评论中所说的,我的猜测是InverseFunction首先试图象征性地解决相反的问题,例如Solve[Function[{Vpx, Vgx}, f[Vpx, Vgx]][X, #2] == #1, X],这需要很长时间(我没有让它完成)。然而,我遇到了一个系统选项,它似乎可以关闭这一功能并生成一个函数:

代码语言:javascript
复制
With[{opts = SystemOptions["ExtendedInverseFunction"]},
 Internal`WithLocalSettings[
  SetSystemOptions["ExtendedInverseFunction" -> False],
  t = InverseFunction[Function[{Vpx, Vgx}, f[Vpx, Vgx]], 1, 2],
  SetSystemOptions[opts]
  ]];

t[451, -4]
(*  199.762  *)

以下是几个注意事项:

  1. 根据文档,输入准确的InverseFunction应该会产生准确的答案。这里的一些参数是近似(浮点)实数,所以上面的答案是一个数值approximation.
  2. The t的实际定义取决于f。如果f改变了,那么一个副作用就是t改变了。如果这不是您明确想要的,那么用这种方式定义t可能更好:

T=InverseFunction[函数[{Vpx,Vgx},Evaluate@fVpx,Vgx],1,2]

票数 0
EN

Stack Overflow用户

发布于 2018-08-05 01:15:22

正如我已故的理论物理学教授所说,“一个简单而美丽的解决方案很可能是真的”。

下面是一段有效的代码:

代码语言:javascript
复制
    mu = 20.82; ex = 1.25; kg1 = 1202.76; kp = 76.58; kvb = 126.92; 
    Ip[Vpx_, Vgx_] = Power[Vpx/kp Log[1 + Exp[kp (1/mu + Vgx/Sqrt[kvb + Vpx^2])]], ex] 2/kg1;  
    Vp[y_, z_] := x /. FindRoot[Ip[x, z] == y, {x, 80}]  

管的“实际”放大系数是IpVpx、Vgx对Vgx的偏导数,与给定的Vpx相乘。如果可以使用导数,我会更高兴,但我有错误。

我会试着理解其中的原因,但目前

代码语言:javascript
复制
     [CapitalDelta]x = 10^-6;
代码语言:javascript
复制
     [Micro][Ipx\_, Vgx\_] := Abs[Vp[Ipx, Vgx + [CapitalDelta]x] - Vp[Ipx, Vgx]]/[CapitalDelta]x

对我来说效果很好。

谢谢,这确实是FindRoot问题的起点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51659989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档