首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一图形上有不同x范围的两幅图,具有渐近性

在同一图形上有不同x范围的两幅图,具有渐近性
EN

Stack Overflow用户
提问于 2022-09-11 11:56:33
回答 1查看 23关注 0票数 0

我正在绘制一个函数的曲线,它在p点是正切的,我想独立地管理曲线和切线的xlim。在此代码中,切线半长应为1:

代码语言:javascript
复制
from sympy import init_printing, symbols, N, plot
from sympy import diff
from sympy import log, cos, atan

init_printing()
x = symbols('x')

# Plot a tangent at point (p_x, p_y), of length l
def plot_line(p_x, p_y, x, a, l):
    # Compute b, build tangent expression
    b = p_y - a*p_x
    t = a*x + b
    
    # Limit line length
    r = atan(a) # angle in rad
    dx = N(l*cos(r)) # half range for x
    lims = {'xlim': (p_x-dx, p_x+dx)}
    
    # Build plot
    t_plot = plot(t, show=False, **lims)
    return t_plot

# Function
y = 2.1*log(x)

# Point
px = 7
py = y.subs(x, px)

# Plot curve and point
marker = {'args': [px, py, 'bo']}
lims = {'xlim': (0,10), 'ylim': (0,5)}
plots = plot(y, markers=[marker], show=False, **lims)

# Find derivative, plot tangent
y_d = diff(y)
a = y_d.subs(x, px)
plots.extend(plot_line(px, py, x, a, 1))

# Finalize and show plots
plots.aspect_ratio=(1,1)
plots.show()

但事实并非如此..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-11 12:15:58

SymPy的plot()函数签名类似于以下内容:

代码语言:javascript
复制
plot(expr, range, **kwargs)

其中range是一个三元元组:(symbol, min_val, max_val)plot函数将计算从min_valmax_valexpr

**kwargs之一是xlim,它是一个2元素元组:xlim=(x_min, x_max)。它用于限制从x_minx_max沿x轴的可视化.尽管如此,由plot函数计算的数值还是从min_valmax_val

尽管如此,您需要从xlim内部删除plot_line并提供range参数:

代码语言:javascript
复制
from sympy import init_printing, symbols, N, plot
from sympy import diff
from sympy import log, cos, atan

init_printing()
x = symbols('x')

# Plot a tangent at point (p_x, p_y), of length l
def plot_line(p_x, p_y, x, a, l):
    # Compute b, build tangent expression
    b = p_y - a*p_x
    t = a*x + b
    
    # Limit line length
    r = atan(a) # angle in rad
    dx = N(l*cos(r)) # half range for x
    
    # Build plot
    # Need to provide the range to limit the line length
    t_plot = plot(t, (x, p_x-dx, p_x+dx), show=False)
    return t_plot

# Function
y = 2.1*log(x)

# Point
px = 7
py = y.subs(x, px)

# Plot curve and point
marker = {'args': [px, py, 'bo']}
lims = {'xlim': (0,10), 'ylim': (0,5)}
plots = plot(y, markers=[marker], show=False, **lims)

# Find derivative, plot tangent
y_d = diff(y)
a = y_d.subs(x, px)
plots.extend(plot_line(px, py, x, a, 1))

# Finalize and show plots
plots.aspect_ratio=(1,1)
plots.show()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73679059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档