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) 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) 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)