76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
import math
|
|
|
|
import numpy as np
|
|
from matplotlib import pyplot as plt
|
|
|
|
|
|
# def convert_from_c(c: int):
|
|
# k = c + 273.15
|
|
# assert k >= 0
|
|
#
|
|
# scale = [273.15, 0, 37, 100]
|
|
# mapping = [273.15, 0, 50, 100]
|
|
#
|
|
# i_scale = [scale[i + 1] - scale[i] for i in range(len(scale) - 1)]
|
|
# i_mapping = [mapping[i + 1] - mapping[i] for i in range(len(mapping) - 1)]
|
|
#
|
|
# s_scale = []
|
|
# for s in scale:
|
|
# s_scale.append(s + 0 if len(s_scale) == 0 else s_scale[-1])
|
|
# s_mapping = []
|
|
# for m in mapping:
|
|
# s_mapping.append(m + 0 if len(s_mapping) == 0 else s_mapping[-1])
|
|
#
|
|
# # 分不同部分单独 scale
|
|
# temp = []
|
|
# for d in s_scale:
|
|
# temp.append(min(d, max(k, 0)))
|
|
# k -= d
|
|
#
|
|
# s = 0
|
|
# for i in range(len(scale) - 1):
|
|
# s += temp[i] / i_scale[i] * i_mapping[i]
|
|
# s += temp[-1]
|
|
# s -= 273.15
|
|
# return s
|
|
|
|
|
|
def piecewise(c: int):
|
|
if c < 0:
|
|
return c
|
|
if c < 37:
|
|
return c / 37 * 50
|
|
if c < 100:
|
|
return 50 + (c - 37) / (100 - 37) * (100 - 50)
|
|
return 100 + (c - 100)
|
|
|
|
|
|
def plot_eq(f, lower, upper, step=0.1):
|
|
x_p = list(np.arange(lower, upper, step=step))
|
|
y_p = [f(x) for x in x_p]
|
|
plt.plot(x_p, y_p, color='#ffcccc')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
xt = [-273.15, 0, 37, 100, 200]
|
|
yt = [-273.15, 0, 50, 100, 200]
|
|
plt.xticks(xt)
|
|
plt.yticks(yt)
|
|
for x in xt:
|
|
plt.axvline(x, color='lightgray')
|
|
for y in yt:
|
|
plt.axhline(y, color='lightgray')
|
|
plot_eq(piecewise, -273.15, 200)
|
|
|
|
# plot_eq(lambda x: 201.8125 + (-201.8125) / (1 + (x / 101.6479) ** 1.098977), -237.15, 200)
|
|
# plot_eq(lambda x: 381.2003 * math.e ** (-(x - 407.029) ** 2/(2 * 163.9733 ** 2)), 0, 200 + 273.15)
|
|
# plot_eq(lambda x: -437.3297 + 3.773026 * x - 0.004290584 * x ** 2, 0, 200 + 273.15)
|
|
# plot_eq(lambda x: 3229.053 - 31.29614*x + 0.1066366*x ** 2 - 0.0001159774*x ** 3, 0, 200 + 273.15)
|
|
# plt.xticks([x + 273.15 for x in xt], [str(x) for x in xt])
|
|
# plt.yticks([x + 273.15 for x in yt], [str(x) for x in yt])
|
|
|
|
plt.ylabel("°C++ (Degrees Celsius++)")
|
|
plt.xlabel("°C (Degrees Celsius)")
|
|
plt.show()
|
|
# convert_from_c(10)
|