Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions Planets
Original file line number Diff line number Diff line change
@@ -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)
54 changes: 54 additions & 0 deletions numpy
Original file line number Diff line number Diff line change
@@ -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)
68 changes: 68 additions & 0 deletions numpy_dec
Original file line number Diff line number Diff line change
@@ -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)