From 9ee9aa1bbb513c15d8052f3095540e943fb22549 Mon Sep 17 00:00:00 2001 From: programist2007Kornev204 <120652537+programist2007Kornev204@users.noreply.github.com> Date: Mon, 19 Dec 2022 12:38:57 +0300 Subject: [PATCH 1/3] numpy_dec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Это сразу numpy decimal, без обычного. --- numpy_dec | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 numpy_dec diff --git a/numpy_dec b/numpy_dec new file mode 100644 index 0000000..389bb0a --- /dev/null +++ b/numpy_dec @@ -0,0 +1,68 @@ +-*- coding: utf-8 -*- + + import matplotlib.pyplot as plt + import numpy as np + from decimal import Decimal, getcontext + + + getcontext().prec = 5 + + + def Factorial(arr): + n = Decimal('1') + factorial = np.array([Decimal(1)]) + for x in arr[1:]: + n *= x + factorial = np.append(factorial, n) + return factorial + + + def Puasson(lambda, N): + if lambda < 0: + raise ValueError("Lambda must be positive") + numpy_arrD = np.asarray([Decimal(i) for i in range(N)]) + return lambda ** numpy_arrD * Decimal(-la).exp() / Factorial(numpy_arrD) + + + def Moment(arr, k=1): + if k < 0: + raise ValueError('"k" must be positive') + elif k % 1: + raise ValueError('"k" must be integer') + elif not isinstance(arr, np.ndarray): + raise ValueError('Wrong array format') + return np.sum(arr * np.arange(len(arr)) ** k) + + + def Mean(arr): + return Moment(arr, 1) + + + def Diviation(arr): + return Moment(arr, 2) - Moment(arr, 1) ** 2 + + + def Plotter(arr): + plt.plot(arr) + plt.show() + + + def Test(x, answer, error=0.1): + if abs(x - answer) <= error: + return "cовпадает в пределах погрешности " + str(error) + return "не cовпадает в пределах погрешности " + str(error) + + + if __name__ == '__main__': + lambda = int(input()) + N = int(input()) + k = int(input()) + error = float(input()) + arr = Puasson(la, N) + Plotter(arr) + print("Начальный момент случайной великичны для k =", + k, "равен", Moment(arr, k)) + print("Среднее значение равно", Mean(arr), + Test(Mean(arr), lambda), "с реальным значением", lambda) + print("Дисперсия случайной величины равна", Diviation(arr), + Test(Diviation(arr), lambda), "с реальным значением", lambda) From 428295e16eaecc99e439c9e71f451f4a9422d87b Mon Sep 17 00:00:00 2001 From: programist2007Kornev204 <120652537+programist2007Kornev204@users.noreply.github.com> Date: Thu, 22 Dec 2022 17:59:00 +0300 Subject: [PATCH 2/3] Planets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit последняя задача --- Planets | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Planets diff --git a/Planets b/Planets new file mode 100644 index 0000000..e30ecb4 --- /dev/null +++ b/Planets @@ -0,0 +1,72 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from tqdm import tqdm + + +file = pd.read_csv("Objects.csv") +file.head() + + +class CosmicBody: + def init(self, m=1, r=np.array([0, 0, 0]), v=np.array([0, 0, 0])): + self.m = m + self.r = r + self.v = v + + def step(self, a, dt): + self.r = self.r + dt * self.v + a * dt * dt / 2 + self.v = self.v + a + + +frame = np.array([]) +for i in file.index: + body = CosmicBody() + body.r = np.array([file["x"][i], file["y"][i], file["z"][i]]) + body.v = np.array([file["v_x"][i], file["v_y"][i], file["v_z"][i]]) + body.m = file["mass"][i] + frame = np.append(frame, body) +print(frame) + + +def acceleration(frame): + accel = np.array([]) + for i in frame: + frame1 = frame[frame != i] + a = np.array([]) + for j in frame1: + rvec = j.r - i.r + a = np.append( + a, j.m * rvec / ((rvec[0] 2 + rvec[1] 2 + rvec[2] 2) (3/2))) + a = a.reshape(-1, 3) + a = np.sum(a, axis=0) + accel = np.append(accel, a) + return accel.reshape(-1, 3) + + +def show(frame, t, dt): + fig = plt.figure(figsize=(7, 7)) + ax = fig.add_subplot(111, projection='3d') + p = 0.1 + for t0 in tqdm(np.arange(0., t, dt)): + accel = acceleration(frame) + p += 0.1 + angle = 60 + 60 * p / t + ax.clear() + ax.axes.set_xlabel("X") + ax.axes.set_ylabel("Y") + ax.axes.set_zlabel("Z") + ax.axes.set_xlim3d(-30, 30) + ax.axes.set_ylim3d(-30, 30) + ax.axes.set_zlim3d(-30, 30) + for elem in frame: + ax.scatter(elem.r[0], elem.r[1], elem.r[2], s=20) + elem.step(accel[frame == elem][0], dt) + ax.view_init(angle-60, angle) + fig.canvas.draw() + + +if name == 'main': + t = 10 + dt = 0.1 + show(frame, t, dt) From ea3854971837171bd49f28a373bc764d6d7a5f71 Mon Sep 17 00:00:00 2001 From: programist2007Kornev204 <120652537+programist2007Kornev204@users.noreply.github.com> Date: Thu, 22 Dec 2022 18:07:55 +0300 Subject: [PATCH 3/3] numpy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Я думал можно только decimal сдавать --- numpy | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 numpy diff --git a/numpy b/numpy new file mode 100644 index 0000000..38d7c23 --- /dev/null +++ b/numpy @@ -0,0 +1,54 @@ + import matplotlib.pyplot as plt + import numpy as np + import scipy.special as sci + + + def Puasson(lambda, N): + if lambda < 0: + raise ValueError("Lambda must be positive") + numpy_arr = np.arange(N) + return lambda ** numpy_arr * np.exp(-lambda) / sci.factorial(numpy_arr) + + + def Moment(arr, k=1): + if k < 0: + raise ValueError('"k" must be positive') + elif k % 1: + raise ValueError('"k" must be integer') + elif not isinstance(arr, np.ndarray): + raise ValueError('Wrong array format') + return np.sum(arr * np.arange(len(arr)) ** k) + + + def Mean(arr): + return Moment(arr, 1) + + + def Diviation(arr): + return Moment(arr, 2) - Moment(arr, 1) ** 2 + + + def Plotter(arr): + plt.plot(arr) + plt.show() + + + def Test(x, answer, error=0.1): + if abs(x - answer) <= error: + return "cовпадает в пределах погрешности " + str(error) + return "не cовпадает в пределах погрешности " + str(error) + + + if __name__ == '__main__': + lambda = int(input()) + N = int(input()) + k = int(input()) + error = float(input()) + arr = Puasson(lambda, N) + Plotter(arr) + print("Начальный момент случайной великичны для k =", + k, "равен", Moment(arr, k)) + print("Среднее значение равно", Mean(arr), + Test(Mean(arr), lambda), "с реальным значением", lambda) + print("Дисперсия случайной величины равна", Diviation(Puasson(lambda, N)), + "она", Test(Diviation(arr), lambda), "с реальным значением", lambda)