【问题标题】:How to take the derivative of list inside a .dat file from Mathematica using Python?如何使用 Python 从 Mathematica 的 .dat 文件中获取列表的导数?
【发布时间】:2018-02-09 23:44:31
【问题描述】:

我有一个来自 Mathematica 的 .dat 文件。它有两列:第一列代表淬灭前的相对化学势($\theta_{0}$),第二列代表完成的平均功($\braket{W}$)。

0.0001  1.968765727
0.03151592653589794 1.526403743
0.06293185307179587 1.315922249
0.0943477796076938  1.181680326
0.12576370614359172 1.092500991
0.15717963267948964 1.034055677
0.1885955592153876  0.9986171379
0.22001148575128554 0.9811207217
0.25142741228718346 0.9778559454
0.2828433388230814  0.9864639035
0.3142592653589793  1.005123779
0.3456751918948773  1.032472433
0.3770911184307752  1.06748456
0.4085070449666731  1.109396204
0.4399229715025711  1.157654853
0.471338898038469   1.211886853
0.5027548245743669  1.271876803
0.5341707511102649  1.337555877
0.5655866776461628  1.408997391
0.5970026041820607  1.486418909
0.6284185307179586  1.570190989
0.6598344572538566  1.660731115
0.6912503837897546  1.759140881
0.7226663103256524  1.865661911
0.7540822368615504  1.982382946
0.7854981633974484  2.110586591
0.8169140899333462  2.252795219
0.8483300164692442  2.410700136
0.8797459430051422  2.589771972
0.9111618695410401  2.794071187
0.942577796076938   3.033575331
0.9739937226128359  3.323391524
1.0054096491487339  3.699588638
1.0368255756846319  3.905513036
1.0682415022205298  3.365482708
1.0996574287564276  2.902485831
1.1310733552923256  2.502188583
1.1624892818282235  2.154786056
1.1939052083641215  1.851708306
1.2253211349000195  1.585798632
1.2567370614359172  1.351316619
1.2881529879718152  1.122552869
1.3195689145077132  0.9609250081
1.3509848410436112  0.7970216327
1.3824007675795091  0.649843702
1.4138166941154071  0.5169416572
1.4452326206513049  0.3961682839
1.4766485471872028  0.2855755599
1.5080644737231008  0.1836374567
1.5394804002589988  -0.0843703707
1.5708963267948968  0.0002668209559
1.6023122533307945  0.2516937775
1.6337281798666925  0.492273888
1.6651441064025905  0.7253692214
1.6965600329384884  0.9500449098
1.7279759594743864  1.166259793
1.7593918860102844  1.374218726
1.7908078125461822  1.573771245
1.8222237390820801  1.765135571
1.853639665617978   1.948242241
1.885055592153876   2.123273373
1.916471518689774   2.290564007
1.9478874452256718  2.450236891
1.9793033717615698  2.601330042
2.010719298297468   2.745413105
2.0421352248333657  2.881912668
2.073551151369264   2.986664867
2.1049670779051617  3.13340867
2.13638300444106    3.248402463
2.1677989309769576  3.355004915
2.1992148575128554  3.457560413
2.2306307840487536  3.55222602
2.2620467105846513  3.64009798
2.2934626371205495  3.722207193
2.3248785636564473  3.796860739
2.356294490192345   3.866975081
2.3877104167282432  3.931456933
2.419126343264141   3.989416888
2.450542269800039   4.038039032
2.481958196335937   4.089254811
2.5133741228718347  4.118176178
2.544790049407733   4.167857922
2.5762059759436307  4.200698856
2.607621902479529   4.22397227
2.6390378290154266  4.244919941
2.670453755551325   4.258992793
2.7018696820872226  4.267133062
2.7332856086231203  4.268776953
2.7647015351590185  4.263238875
2.7961174616949163  4.249339865
2.8275333882308145  4.225337816
2.858949314766712   4.18946278
2.89036524130261    4.139231773
2.921781167838508   4.070571301
2.953197094374406   3.978907532
2.984613020910304   3.856762428
3.016028947446202   3.693401012
3.0474448739820996  3.473508407
3.078860800517998   3.17101391
3.1102767270538956  2.735631484

当我在 Mathematica 中绘制此图时,我注意到 $\theta_{0} = 1.02678266592038$ 的尖端。为了验证这是否真的是不连续性,我需要对 $\theta_{0}$ 取 $\braket{W}$ 的导数。我已经在 Mathematica 中完成了,但我得到的情节并不令人信服。因此,我想在 python 中尝试一下。但是,我对如何启动它一无所知。任何建议都会有很大帮助。谢谢!

编辑: 数学代码

a = Import['file.dat']
b = Interpolation[a, Method -> "Spline"]
c = b'

【问题讨论】:

  • 您确定切换编程语言会有所帮助吗?为什么不提供您使用的数据并展示您在 Mathematica 中所做的工作?
  • 这是我在 Mathematica 中所做的:(1) a = Import['file.dat'], (2) b = Interpolation[a, Method -> "Spline"], (3) c = b'。
  • edit您的问题显示您的 Mathematica 代码。

标签: python wolfram-mathematica


【解决方案1】:

我不确定为什么您在检查衍生品时遇到问题。您指出,采用完全相同的方法,导数显示了不连续性的位置。您可以在这里使用它来获取 Mathematica 格式的数据

Import["http://halirutan.github.io/Mathematica-SE-Tools/decode.m"]["http://i.stack.imgur.com/lfXo1.png"]

然后

ip = Interpolation[data, InterpolationOrder -> 3, Method -> "Spline"];
Plot[{ip[x], .1 ip'[x]}, {x, 0.0001, 3.11}]

话虽如此,你可以在这个区间内搜索一阶导数的根

FindRoot[ip'[x], {x, .8, 1.2}]

(* {x -> 1.03119} *)

【讨论】:

  • 我会调查的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 2019-08-25
  • 1970-01-01
  • 2018-02-04
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多