나는 계속해서 시도했지만 여전히 다음과 같이 보이게 만들 수 없습니다. 특히 접선은 다음과 같습니다.
MWE:(크레디트지멘스)
\documentclass[tikz,border=1mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[
scale=1.5,
every node/.style={scale=0.5},
>={Triangle[scale=0.6]}
]
% Drawing the main axis:
\draw[<->] (0,1/0.25) node[above]{$y$} --
(0,0) node[below left]{0} --
(4.5,0) node[right]{$x$};
% Drawing the main function:
\draw[thick] plot[domain=0.28:4.4, samples=200](\x,{1/\x}) node[right]{$k^{0}$};
% Drawing the dotted lines:
\draw[densely dotted, thick] (1,0) node[below]{$x^{0}$} |-
(0,1) node[left]{$y^{0}$};
% Drawing the dashed lines:
\foreach \x in {0.55,1,1.3,2}{
\draw[densely dashed] (0,0) -- (\x,1/\x);
}
% Drawing the points:
\foreach \p in {0.45, 0.55, 1, 1.3, 2, 2.6}{
\draw[fill=black] (\p,1/\p) circle (1pt);
}
% Labeling the points:
\node[above right] (M'') at (0.45,1/0.45){$M''$};
\node[above right] (A) at (0.55,1/0.55){$A$};
\node[above right] at (1,1){$P$};
\node[above right] at (1.3,1/1.3){$M$};
\node[above right] (B) at (2,1/2){$B$};
\node[above right] (M') at (2.6,1/2.6){$M'$};
% Drawing the arrows:
\draw[->] (A) -- (M'');
\draw[->] (B) -- (M');
\draw[->] (0.4,3.2) -- (0.55,3.2);
\draw[->] (3.5,0.45) -- (3.65,0.45);
% Drawing the dashed function:
\draw[ thick,
xshift = 0.3cm,
yshift = 0.3cm,
dash pattern = on 10.85pt off 3pt
] plot[domain=0.28:4.4, samples=200](\x,{1/\x}) node[right]{$k^{1}$};
\end{tikzpicture}
\end{document}
답변1
요점씨여기서는 수학적으로 발견됩니다 factorA
. 함수를 참조하세요. 점을 찾는 것도 가능할 것이다씨하지만 그러면 우리는 그 도서관 intersections
을 찾아야 할 것입니다.엑스그 포인트의 가치는xyz좌표계(회전된 좌표계를 사용하지 않는 한 그렇게 어렵지는 않습니다).
제곱근 앞에 마이너스가 있는 두 번째 솔루션도 있지만 실제로 유효한지 여부는 확인하지 않았습니다. 나는 추측한다ㅏ> 0.비> 0, 즉 해당 요소는 1보다 큽니다. 의미케이¹은 항상 위 오른쪽에 있습니다.케이⁰.
접선은 이 두 함수(또 다른 수학적 해법)의 미분에 의해 결정됩니다. PGF/TikZ 내부에서 이 작업을 수행하는 것은 쉽지 않을 것입니다.씨.
그만큼엑스가치ㅏ,비그리고씨자체 PGFMath 함수입니다. xC
함수가 포함되어 있기 때문에 이 값은 상수임에도 불구하고(매우 효율적이지 않음) 사용될 때마다 factorA
평가됩니다 .xC
암호
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows.meta, calc}
\begin{document}
\begin{tikzpicture}[
x=2cm, y=2cm, thick, >=Triangle,
every label/.append style={inner sep=+.15em},
declare function={
a = .5; b = .5; xA = .55; xB = 2; xC = factorA(xA, a, b) * xA;
f(\x) = 1/\x; ft(\x) = -1/\x/\x;
g(\x) = 1/(\x-a)+b; gt(\x) = -1/(\x-a)/(\x-a);
factorA(\x,\a,\b) = (sqrt(\a*\a-2*\a*\b*\x*\x+\b*\b*\x*\x*\x*\x+4*\x*\x)
+\a+\b*\x*\x)/(2*\x);},
label positions/.style args={#1:#2}{label #1/.style={label={#2:##1}}},
label positions/.list={A:right, B:above, C:right, R:above right},
dot/.style={
circle, inner sep=+0pt, outer sep=+0pt, minimum size=+3pt, fill,
label #1/.try={$#1$}},
mark on axis/.style args={#1:#2}{insert path={
(#1) edge[densely dotted] node[at end, below] {$x_{#2}$} (#1|-0,0)
edge[densely dotted] node[at end, left] {$y_{#2}$} (#1-|0,0)}}
]
\draw[<->] (0,4.5) node[above]{$y$} |- (5.5,0) node[right]{$x$};
\draw[very thick, samples=200] plot[domain=.28:4.4] (\x,{f(\x)}) node[right]{$k^0$}
plot[domain=.28+a:4.4+a] (\x,{g(\x)}) node[right]{$k^1$};
\foreach[count=\cnt] \pnt/\fct in {A/f, B/f, C/g}
\node[dot=\pnt] (\pnt) at (x\pnt,{\fct(x\pnt)}) {} [mark on axis=\pnt:\cnt];
\foreach \pnt/\lbl in {A/R, B/{}}
\draw[dashed] (0,0) -- ($(0,0)!2!(\pnt)$) coordinate[label \lbl/.try=$\lbl$] ();
\foreach[/pgf/inner sep=+.15em, evaluate={\ang=atan(\fct t(x\pnt));}]
\pnt/\lbl/\fct in {A/a/f, B/{}/f, C/c/g}
\draw[dashed, shift=(\pnt)](\ang+180:1) node[above left] {$\lbl$}
-- (\ang :1) node[below] {$\lbl$};
\end{tikzpicture}
\end{document}
산출
답변2
그만한 가치가 있는 것에 대해서는 다음과 같은 변형이 있습니다.당신의 다른 질문에 대한 내 대답, 또한메타포스트.
이것은 pair
변수를 처리하는 다른 방법을 보여줍니다. z
표기법을 사용하면 변수를 선언하지 않고도 변수를 사용할 수 있으며 곡선의 한 지점에 접선 막대를 그리는 함수도 있습니다. 이전과 마찬가지로 lualatex
.
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
path xx, yy, ff, k[];
xx = 20 left -- 300 right;
yy = xx rotated 90;
ff = (1, 1) {dir -45} for x = 2 upto 5: .. (x, 1/x) endfor;
ff := reverse ff reflectedabout(origin, (1,1)) & ff;
k0 = ff scaled 280/5;
k1 = subpath (2, 6) of ff scaled 280/3;
numeric a, b, c;
a = 3.4; b = 5.1;
z.A = point a of k0;
z.B = point b of k0;
z.R = 2.4 z.A;
z.S = 2 z.B;
(c, whatever) = k1 intersectiontimes (origin -- z.R);
z.C = point c of k1;
z.D = point c-3/4 of k1;
z.E = point c+3/4 of k1;
vardef tangent expr t of p =
(left--right) scaled 42 rotated angle direction t of p shifted point t of p
enddef;
draw tangent a of k0 dashed withdots scaled 1/8 withcolor 1/2 red;
draw tangent b of k0 dashed withdots scaled 1/8 withcolor 1/2 red;
draw tangent c of k1 dashed withdots scaled 1/8 withcolor 1/2 red;
draw z.D -- z.C -- z.E dashed evenly withpen pencircle scaled 1/4;
draw k0 withcolor 2/3 red;
draw k1 withcolor 2/3 red;
draw z.R -- origin dashed evenly withpen pencircle scaled 1/4;
draw z.S -- origin dashed evenly withpen pencircle scaled 1/4;
label.urt("$R$", z.R);
forsuffixes @ = A, B, C:
draw (x@, 0) -- z@ -- (0, y@) dashed withdots scaled 1/4;
label.bot("$\scriptstyle x^" & str @ & "$", (x@, 0));
label.lft("$\scriptstyle y^" & str @ & "$", (0, y@));
endfor
forsuffixes @ = A, B, C, D, E:
dotlabel.urt("$" & str @ & "$", z@);
endfor
drawarrow xx;
drawarrow yy;
dotlabel.llft("$0$", origin);
label.rt("$k^0$", point 8 of k0);
label.rt("$k^1$", point 8 of k1);
label.rt("$x$", point 1 of xx);
label.top("$y$", point 1 of yy);
endfig;
\end{mplibcode}
\end{document}
답변3
사용tzplot
:
\documentclass{standalone}
\usepackage{tzplot}
\begin{document}
\begin{tikzpicture}[scale=1.5,font=\scriptsize]
%\tzhelplines[thick](5,1/0.25)
\tzaxes(5,1/0.25){$x$}{$y$}
\tzshoworigin
% def functions
\def\kzero{1/\x}
\def\kone{2/\x}
\def\lineA{1.8*\x}
\def\lineB{(1/5)*\x}
% indifference curves
\tzfn\kzero[.28:4.4]{$k^0$}[r]
\tzfn\kone[.55:4.4]{$k^1$}[r]
% dashed rays
\tzfn[dashed]\lineA[0:1.5]{$R$}[ar]
\tzfn[dashed]\lineB[0:4]
% intersection points
\tzXpoint*{kzero}{lineA}(A){$A$}[r]
\tzXpoint*{kone}{lineA}(C){$C$}[r]
\tzXpoint*{kzero}{lineB}(B){$B$}[a]
% tangent lines
\tztangent[densely dashed,red]{kzero}(A)[.3:1.1]{$a$}[b]
\tztangent[densely dashed,red]{kone}(C)[.7:1.5]{$c$}[b]
\tztangent[densely dashed,red]{kzero}(B)[1.5:3]
\tztangent[draw=none]{kzero}(A)[1.1:.3]{$a$}[l] % label
\tztangent[draw=none]{kone}(C)[1.5:.7]{$c$}[l] % label
% projections
\tzproj(A){$x^A$}{$y^A$}
\tzproj(B){$x^B$}{$y^B$}
\tzproj(C){$x^C$}{$y^C$}
% more lines: CD and CE
\tzvXpointat*{kone}{0.7}(D){$D$}[r]
\tzvXpointat*{kone}{1.6}(E){$E$}[ar]
\tzline[densely dashed,blue](C)(D)
\tzline[densely dashed,blue](C)(E)
\end{tikzpicture}
\end{document}