곡선 및 접선 플로팅에 대한 질문

Nov 13 2020

이것은 Mathematica 질문입니다.

나는 기능이있다 $y=x^3$. "Fun1"은 곡선의 모든 지점입니다. Fun1 지점에서 해당 지점에서 커브에 접하는 선을 그립니다.

커브와 접선이 교차하는 다른 지점에서 "Fun2"로 표시해야합니다. 세그먼트 Fun1Fun2와 커브 사이의 영역은 "A"로 표시되어야합니다.

이제 접선 인 Fun2 지점을 찾아야합니다.이 접선은 "Fun3"에서 곡선과 다시 교차합니다. Fun2Fun3 세그먼트와 곡선 사이의 영역은 "B"로 표시되어야합니다.

접선 문제와 비슷하다고 생각합니다

이것이 제가 지금까지 한 일입니다.

나는 FUN1에 대한 포인트 (2,8)를 고려했습니다. x와 y 좌표를 모두 고려해야합니까? 탄젠트를 찾기 위해 주어진 공식에는 y 좌표 (f [x0] + f '[x0] (x -x0))가 포함되지 않습니다. 여기에 잘못된 것이 있습니까? FUN 2를 표시하고 FUN3을 찾기위한 좌표를 찾으려면 어떻게해야합니까?

f[x_] := x^3 ;
x0 = 2;
l[x_] := f[x0] + f'[x0] (x - x0);
Plot[{f[x], l[x]}, {x, -8, 8}, 
  Mesh -> {{x0}}, 
  MeshStyle -> Red, 
  PlotRange -> {{-8, 8}, {-1, 15}}, 
  Epilog -> Text["FunOne", {x0, f[x0]} + {1, .1}]]

답변

4 m_goldberg Nov 14 2020 at 01:53

나는 미분 함수와 접선 함수를 조금 다르게 정의함으로써이 문제에 접근 할 것입니다. 또한 플로팅을 수행하기 전에 곡선과 접선의 좋은 교차점을 알아낼 것입니다. 이렇게 :

기본 정의

f[x_] := x^3;
df[x_] = f'[x];
tan[x_, x0_] := f[x0] + df[x0] (x - x0)

교차점 찾기

x0 = 1.2어떻게 x^3생겼는지 에 대한 나의 지식을 바탕으로 시작 합니다.

With[{x0 = 1.2}, NSolve[tan[x, x0] == f[x], x]]
{{x -> -2.4}, {x -> 1.2}, {x -> 1.2}}

그래서 x1 = -2.4이제는 x2.

With[{x1 = -2.4}, NSolve[tan[x, x1] == f[x], x]]
{{x -> -2.4}, {x -> -2.4}, {x -> 4.8}}

줄거리 만들기

Module[{x, pts, names, offsets, ptlbls, arealbls},
  x[0] = 1.2; x[1] = -2.4; x[2] = 4.8;
  pts = {{x[0], f[x[0]]}, {x[1], f[x[1]]}, {x[2], f[x[2]]}};
  names = {"Fun1", "Fun2", "Fun3"};
  offsets = {{10, -10}, {10, -10}, {-15, 3}}; 
  ptlbls = MapThread[Text[#1, Offset[#2, #3]] &, {names, offsets, pts}];
  arealbls = {
    Text["A", Offset[{-20, 2}, (pts[[1]] + pts[[2]])/2]],
    Text["B", Offset[{0, -35}, (pts[[2]] + pts[[3]])/2]]}; 
  Plot[Evaluate@{f[x], tan[x, x[0]], tan[x, x[1]]}, {x, -3, 5},
    Epilog -> {ptlbls, {Red, AbsolutePointSize[5], Point[pts]}, arealbls}]]

4 DanielHuber Nov 13 2020 at 22:49

잘 했어, 오류 없음. x2 만 선택되어 "Fun3"이 -y 방향으로 내려갑니다. x0 = 1을 선택하여 더 간단하게 만드십시오.

f[x_] := x^3;
x0 = 1;
l[x_] := f[x0] + f'[x0] (x - x0);
x2 = x /. Solve[l[x] == x^3, x][[1]];
Plot[{f[x], l[x]}, {x, -8, 8}, Mesh -> {{x0, x2}}, MeshStyle -> Red, 
 PlotRange -> {{-8, 8}, {-15, 15}}, 
 Epilog -> {Text["Fun1", {x0, f[x0]} + {1, .1}], 
   Text["Fun2", {x2, f[x2]} + {1, .1}]}]

3 kglr Nov 14 2020 at 04:19

를 사용 MeshFunctions하여 선택한 접선과 곡선의 교차점을 찾아 표시 할 수 있습니다 .

ClearAll[f, t]
f[x_] := x^3
t[x0_][x_] := f[x0] + f'[x0] (x - x0)

plot = With[{x0 = 2}, Plot[{f @x , t[x0]@x}, {x, -5, 5},
   PlotRange -> {{-5, 5}, {-80, 80}}, 
   MeshFunctions -> {# &, f @ # - t[x0] @ # &}, 
   Mesh -> {{x0}, {0}}, 
   MeshStyle -> Directive[PointSize @ Large, Red],
   ClippingStyle -> False]]

라벨을 삽입하는 사후 처리 :

plot /. Point[x_] :> {Point[x], 
   MapThread[Text[Style[#, 16, Black], #2, {1, -3/2}] &, {{"fun1", "fun2"}, x}]}

또는 DisplayFunction내부에서 후 처리를 수행하는 옵션 을 사용하여 두 단계를 단일 단계로 결합합니다 Plot.

With[{x0 = 2}, Plot[{f @x , t[x0]@x}, {x, -5, 5},
  PlotRange -> {{-5, 5}, {-80, 80}}, 
  MeshFunctions -> {# &, f@# - t[x0]@# &}, Mesh -> {{x0}, {0}}, 
  MeshStyle -> Directive[PointSize[Large], Red],
  ClippingStyle -> False, 
  DisplayFunction -> (Show[# /. Point[x_] :> {Point[x], 
   MapThread[Text[Style[#, 16, Black], #2, {1, -3/2}] &, 
     {{"fun1", "fun2"}, x}]}] &)]]

참고 : 버전 11.3.0에서는 x마지막 줄을 x[[;;;;2]].

업데이트 : 옵션을 사용하여 라벨을 삽입 할 수도 있습니다 MeshStyle. 이 오래된 트릭 (기능을 MeshStyle설정으로 사용)은 버전 12.1.2에서 여전히 작동합니다.

meshStyle = {PointSize[Large], Red, #, 
   If[# === {}, {}, 
     MapThread[Text[Style[#, 16, Black], #2, {1, -3/2}] &, 
        {{"fun1", "fun2"}, #[[1]]}]]} &;

With[{x0 = 2}, Plot[f[x], {x, -5, 5}, 
    MeshFunctions -> {# &, f[#] - t[x0][#] &}, Mesh -> {{x0}, {0}}, 
    ClippingStyle -> False,   
    MeshStyle -> meshStyle,
    PlotRange -> {{-5, 5}, {-80, 80}}, 
    Epilog -> {Orange, InfiniteLine[{x0, f@x0}, {1, f'[x0]}]}]]