곡선 및 접선 플로팅에 대한 질문
이것은 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}]]
답변
나는 미분 함수와 접선 함수를 조금 다르게 정의함으로써이 문제에 접근 할 것입니다. 또한 플로팅을 수행하기 전에 곡선과 접선의 좋은 교차점을 알아낼 것입니다. 이렇게 :
기본 정의
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}]]

잘 했어, 오류 없음. 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}]}]

를 사용 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]}]}]]
