你如何解决函数的正根,并将它们绘制为mathematica函数图中的点?

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)

但我显然不能用这种功能做到这一点,我不知道如何将这些结果添加到绘图中,以便每一行都得到一个标记,它穿过.有谁知道如何设置它?

Leo*_*rin 5

这是您的代码,为了完整性,稍微修改了绘图参数以放大感兴趣的区域:

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)

这应该在找到解决方案后执行.

  • @Elliot很抱歉这样说,但是按照惯例,每个"线程"要求**一个**问题.那是因为如果不这样做,内容对将来的参考没有用.我建议你发一个问题! (2认同)