Ell*_*iot 1 plot equation wolfram-mathematica
我试图绘制以下函数的图形,并在图中指示函数通过45度斜率.我已经能够使用以下代码绘制函数本身:
T = 170 Degree;
f[s_, d_] = Normal[Series[Tan[T - (d*s)], {s, 0, 4}]];
r[h_, d_] = Simplify[Integrate[f[s, d], {s, 0, h}]];
a[h_] = Table[r[h, d], {d, 1, 4, .5}];
Plot[a[h], {h, 0, 4}, PlotRange -> {{0, 4}, {0, -4}}, AspectRatio -> 1]
Run Code Online (Sandbox Code Playgroud)
我需要在每条曲线上显示斜率超过45度的点.然而,由于Solve和Reduce函数中的表格有些奇怪,我到目前为止还无法解决数字问题.我试过了:
Reduce[{a'[h] == Table[-1, {Dimensions[a[h]][[1]]}], h >= 0}, h]
Run Code Online (Sandbox Code Playgroud)
但我显然不能用这种功能做到这一点,我不知道如何将这些结果添加到绘图中,以便每一行都得到一个标记,它穿过.有谁知道如何设置它?
这是您的代码,为了完整性,稍微修改了绘图参数以放大感兴趣的区域:
Clear[d,h,T,f,r,a];
T = 170 Degree;
f[s_, d_] = Normal[Series[Tan[T - (d*s)], {s, 0, 4}]];
r[h_, d_] = Simplify[Integrate[f[s, d], {s, 0, h}]];
a[h_] = Table[r[h, d], {d, 1, 4, .5}];
plot = Plot[a[h], {h, 0, 4}, PlotRange -> {{0, 0.8}, {0, -0.5}},
AspectRatio -> 1, Frame -> {False, True, True, False},
FrameStyle -> Directive[FontSize -> 10],
PlotStyle -> {Thickness[0.004]}]
Run Code Online (Sandbox Code Playgroud)
以下是获取解决方案的代码(h坐标):
In[42]:= solutions = Map[Reduce[{D[#, h] == -1, h >= 0}, h] &, a[h]]
Out[42]= {h == 0.623422, h == 0.415615, h == 0.311711, h == 0.249369,
h == 0.207807, h == 0.178121, h == 0.155856}
Run Code Online (Sandbox Code Playgroud)
现在制作情节:
points = ListPlot[MapIndexed[{#1, a[#1][[First@#2]]} &, solutions[[All, 2]]],
PlotStyle -> Directive[PointSize[0.015], Red],
PlotRange -> {{0, 0.8}, {0, -0.5}}, AspectRatio -> 1,
Frame -> {False, True, True, False},
FrameStyle -> Directive[FontSize -> 10]]
Run Code Online (Sandbox Code Playgroud)
最后,结合图表:
Show[{plot, points}]
Run Code Online (Sandbox Code Playgroud)

编辑:
回应在找到点切割地块的要求 - 这是一种方式:
plot =
With[{sols = solutions[[All, 2]]},
Plot[Evaluate[a[h]*UnitStep[sols - h]], {h, 0, 4},
PlotRange -> {{0, 0.8}, {0, -0.5}}, AspectRatio -> 1,
Frame -> {False, True, True, False},
FrameStyle -> Directive[FontSize -> 10],
PlotStyle -> {Thickness[0.004]}]]
Run Code Online (Sandbox Code Playgroud)
这应该在找到解决方案后执行.