在对图形结果进行编码时,我需要您的帮助-在间隔中绘制函数。
我得到的问题是: “绘制以下复合函数。您可能想使用'if'语句和循环来'构建'。在[-3,5]的间隔内绘制函数。
enter code here
f(x) = {|x| x<0}
{-1 0 <= x < 1}
{+1 1 <= x < 2}
{ln(x) 2 <= x}
任何人都可以为我写一个代码,其中的结果向我显示GRAPH,其中显示了上述功能,而图行中没有一致性。
非常感谢您!
答案 0 :(得分:1)
使用if语句会更复杂。您可以直接使用NumPy索引和掩码来完成任务。下面是我将如何做。
说明:首先,您将在间隔(3,5)中创建x数据点的网格。然后,初始化一个相同长度的空y数组。接下来,使用x上的条件获取x数组的索引。这是通过使用蒙版完成的。 mask1 = ((x>=0) & (x<1))
定义了一个条件,然后使用y[mask1] = -1
,这意味着[mask1]
将返回条件为True
的数组索引,然后使用这些索引来分配y-值。您针对所有4个条件执行此操作。我只是在中间两个条件下使用了两个面具。您还可以使用4个变量(掩码)来执行相同的操作。这是个人喜好。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 5, 100)
y = np.zeros(len(x))
mask1 = ((x>=0) & (x<1))
mask2 = ((x>=1) & (x<2))
y[x<0] = np.abs(x[x<0])
y[mask1] = -1
y[mask2] = 1
y[x>=2] = np.log(x[x>=2])
plt.plot(x, y)
plt.xlabel('$x$')
plt.ylabel(r'$f(x)$')
plt.show()
答案 1 :(得分:1)
通常,简单的复合函数可以通过乘以相应的条件来像其他函数一样容易地编写。对数唯一需要注意的地方是对数,它不是在整个整数上定义的。通过在此处采用绝对值可以避免此问题,因为无论如何它仅与> 2范围相关。
import numpy as np
import matplotlib.pyplot as plt
f = lambda x: np.abs(x)*(x<0) - ((0<=x) & (x < 1)) + ((1<=x) & (x < 2)) + np.log(np.abs(x))*(2<=x)
x = np.linspace(-3,5,200)
plt.plot(x,f(x))
plt.show()
根据答案下方的评论,还可以分别评估每个间隔中的功能,
intervals = [(-3, -1e-6), (0,1-1e-6), (1, 2-1e-6), (2,5)]
for (s,e) in intervals:
x = np.linspace(s,e,100)
plt.plot(x,f(x), color="C0")
答案 2 :(得分:0)
非常感谢您的帮助,它非常有用:)
此外,我想知道如何消除将间隔的每个步骤连接到下一个步骤的线条?
在每个步骤中,我只需要在图形上显示4个单独的图形结果,而不必将它们之间连接的线“连续”。