лаба4
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
старший преподаватель |
|
|
|
Н.А. Соловьева |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4 |
Реализация алгоритма на языке питон |
по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ |
|
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4616 |
|
|
|
А.В.Павлов |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2018
-
ПОСТАНОВКА ЗАДАЧИ
Разработать алгоритм на языке питон
ЗАДАНИЕ: Построение поверхностей второго порядка
-
ОПИСАНИЕ РАЗРАБОТАННОЙ ПРОГРАММЫ
import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt
import math
from scipy import integrate
from sympy import *
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
#1 1 0 0 0 0 -6 6 -4 181 1 0 0 0 0 -6 6 -4 18
def main():
str_source = input().split(' ')
sorc = [int(num) for num in str_source]
src=[]
for i in range(len(sorc)):
if (i>=3) & (i!=9):
src.append(sorc[i]/2)
else:
src.append(sorc[i])
print(src)
I1=src[0]+src[1]+src[2]
I2 = round(np.linalg.det(np.array([[src[0],src[3]],[src[3],src[1]]])) + np.linalg.det(np.array([[src[0],src[5]],[src[5],src[2]]]))+np.linalg.det(np.array([[src[1],src[5]],[src[5],src[2]]])))
sigma=round(np.linalg.det(np.array([[src[0],src[3],src[4]],[src[3],src[1],src[5]],[src[4],src[5],src[2]]])))
I3=round(np.linalg.det(np.array([[src[0],src[3],src[5]],[src[3],src[1],src[4]],[src[5],src[4],src[2]]])))
K2=round(np.linalg.det(np.array([[src[0],src[6]],[src[6],src[9]]])) + np.linalg.det(np.array([[src[1],src[7]],[src[7],src[9]]]))+np.linalg.det(np.array([[src[3],src[8]],[src[8],src[9]]])))
K3=round(np.linalg.det(np.array([[src[0],src[3],src[6]],[src[3],src[1],src[7]],[src[6],src[7],src[9]]])) + np.linalg.det(np.array([[src[0],src[5],src[6]],[src[5],src[2],src[8]],[src[6],src[8],src[9]]])) + np.linalg.det(np.array([[src[1],src[4],src[7]],[src[4],src[2],src[8]],[src[7],src[8],src[9]]])))
K4=round(np.linalg.det(np.array([[src[0],src[3],src[5],src[6]],[src[3],src[1],src[4],src[7]],[src[5],src[4],src[2],src[8]],[src[6],src[7],src[8],src[9]]])) )
delta=round(np.linalg.det(np.array([[src[0],src[3],src[4],src[6]],[src[3],src[1],src[5],src[7]],[src[4],src[5],src[2],src[4]],[src[6],src[7],src[8],src[9]]])))
l=Symbol('l')
L= solve (l**3 - I1*l**2 +I2*l - I3,l)
L1=int(L[0])
if len(L)==2:
L2=int(L[1])
elif len(L)==3:
L2=int(L[1])
L3=int(L[2])
elif len(L)==1:
L2=1
L3=1
if L1==0:
L1=int(L2)
elif L2==0:
if len(L)==3:
L2=int(L3)
else:
L2=int(L1)
elif L3==0:
L3=int(L2)
if L1==0 and L2==0 and L3==0:
print('Eror')
print(L)
#генерация точек
#X, Y = np.meshgrid(np.arange(-1, 1, 0.25), np.arange(-1, 1, 0.25))
x = np.linspace(-2, 2, 100)
z = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, z)
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
[u, v] = np.meshgrid(u, v)
print(L1,L2)
print(K3,I2)
if sigma!=0:
if I2>0 and I2*sigma>0:
if K4<0:
elipsoid(K4,I3,L1,L2,L3,u,v) #Элипсоид
elif K4>0:
mnim_elipsoid(K4,I3,L1,L2,L3,u,v) #Мнимый элипсоид
elif K4==0:
mnim_konus(L1,L2,L3,X,Y) #Мнимый конус
elif sigma==0:
if K4<0:
elip_hyper(K4,I2,L1,L2,u,v) #Элип гиперболоид
elif K4>0:
hyper_parab(K4,I2,L1,L2,u,v) #Гиперболический параболоид
elif K4==0:
if I2>0:
if I1*K3<0:
elip_cylin(K3,I2,L1,L2,X,Y) #Эллиптический цилиндр
elif I1*K3>0:
mnim_elip_cylin(K3,I2,L1,L2,X,Y) #Мнимый эллиптический цилиндр
elif K3==0:
('Ошибка')
if I2<0:
if K3!=0:
hyper_cylin(K3,I2,L1,L2,X,Y) #Гиперболический цилиндр
else:
para_peresl_plosk(L2,X,Y) #Пересек плоскости
if I2==0:
if K3!=0:
parab_cylin(K3,I1,X,Y) #Парабалический цилиндр
if K3==0:
if K2<0:
parall_plosk(K2,I1,X,Y) #Паралель плоскости
elif K2==0:
sovp_plosk(X,Y) #Совмещенные плоскости
elif K3>0:
mnim_parall_plosk(K2, I1, X, Y) #Пара Паралель плоскости
else:
print('Ошибка')
def elipsoid(K4,I3,L1,L2,L3,X,Y):
#6 5 4 0 0 0 0 0 0 -3
print('элипсоид')
u = np.linspace(0, 2 * np.pi, 20)
v = np.linspace(0, np.pi, 20)
[u, v] = np.meshgrid(u, v)
x = 1/np.sqrt(-K4/(L1*I3))* np.outer(np.cos(u), np.sin(v))
y = 1/np.sqrt(-K4/(L2*I3))* np.outer(np.sin(u), np.sin(v))
z = 1/np.sqrt(-K4/(L3*I3))* np.outer(np.ones_like(u), np.cos(v))
plot(x,y,z)
def mnim_elipsoid(K4,I3,L1,L2,L3,u,v):
print('Мнимый элипсоид')
u = np.linspace(0, 2 * np.pi, 20)
v = np.linspace(0, np.pi, 20)
[u, v] = np.meshgrid(u, v)
x = 1/np.sqrt(K4/(L1*I3))* np.outer(np.cos(u), np.sin(v))
y = 1/np.sqrt(K4/(L2*I3))* np.outer(np.sin(u), np.sin(v))
z = 1/np.sqrt(K4/(L3*I3))* np.outer(np.ones_like(u), np.cos(v))
plot(x,y,z)
def mnim_konus(L1,L2,L3,u,v):
#5 5 5 0 0 0 0 0 0 0
print('Мнимый конус')
X = u*np.cos(v)
Y = u*np.sin(v)
Z = u
plot2(X,Z,Y)
def elip_hyper(K4,I2,L1,L2,u,v):
#1 1 0 0 0 0 -6 6 -4 18
print('Элиптический гипербалоид')
X = (1 / (L1) * np.sqrt(-K4 / I2)) * np.cos(u) + v* np.sin(u)
Y = (1 / (L2) * np.sqrt(-K4 / I2)) * np.sin(u) + v *np.cos(u)
Z = (1 / 2) * np.sinh(v)
plot(X,Y,Z)
def hyper_parab(K4,I2,L1,L2,u,v):
print('Гипер парабалоид')
X = (1/(L1) * np.sqrt(-K4/I2)) * np.cosh(u) * np.cos(v)
Y = -(1/(L2) * np.sqrt(-K4/I2))* np.cosh(u) * np.sin(v)
Z = (1/2) * np.sinh(u)
plot2(X,Z,Y)
def elip_cylin(K3,I2,L1,L2,X,Z):
#9 8 0 0 0 0 7 6 0 1
print('эллиптический цилиндр')
x = np.linspace(-1, 1, 100)
z = np.linspace(-2, 2, 100)
X, Z = np.meshgrid(x, z)
Y = np.sqrt(1 - (X ** 2/(-K3/(L1*I2)))*(-K3/(L2*I2)) )
plot2(X,Y,Z)
def mnim_elip_cylin(K3,I2,L1,L2,X,Y):
print('мнимый эллиптический цилиндр')
x = np.linspace(-1, 1, 100)
z = np.linspace(-2, 2, 100)
X, Z = np.meshgrid(x, z)
Y = np.sqrt((1 - X ** 2/(K3/(L1*I2)))*(K3/(L2*I2)))
plot2(X,Y,Z)
def hyper_cylin(K3,I2,L1,L2,X,Y):
#5 -5 0 0 0 0 0 0 0 5
print('Гипер цилиндр')
u = np.linspace(-2, 2 , 100)
v = np.linspace(-2, 2, 100)
[u, v] = np.meshgrid(u, v)
X =(-K3/(L1*I2))* np.sinh(u)
Y =(K3/(L2*I2))* np.cosh(u)
Z = v
plot2(X,Y,Z)
def para_peresl_plosk(L2,X,Z):
print('Пара пересекающихся плоскостей')
Y=np.sqrt(X**2)
plot2(X,Y,Z)
def parab_cylin(K3,I1,X,Z):
#0 5 0 0 0 0 5 0 0 0
print('Парабалический цилиндр')
Y=2*X*np.sqrt(-K3/I1**3)
plot(X,Y**2,Z)
def parall_plosk(K2,I1,X,Z):
#9 4 0 12 0 0 24 16 0 3
print('Пара паралельных плокостей')
Y=K2/I1**2
plot2(X,Y**2,Z)
def sovp_plosk(X,Y):
print('Пара мнимых паралельных плокостей')
x = np.linspace(-2, 2, 100)
z = np.linspace(-2, 2, 100)
X, Z = np.meshgrid(x, z)
Y=0
plot2(X,Y**2,Z)
def mnim_parall_plosk(K2, I1, X, Y):
print('Пара мнимых паралельных плокостей')
x = np.linspace(-2, 2, 100)
z = np.linspace(-2, 2, 100)
X, Z = np.meshgrid(x, z)
Y=-K2/I1**2
plot2(X,Y**2,Z)
def plot(X,Y,Z):
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, rstride=2, cstride=10, linewidth=1, color='blue')
plt.savefig( 'save.png')
plt.show()
def plot2(X,Y,Z):
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, rstride=2, cstride=10,linewidth=1, color='blue')
surf = ax.plot_surface(X, -Y, Z, rstride=2, cstride=10, linewidth=1, color='blue')
plt.savefig( 'save.png')
plt.show()
main()
Используемые переменные:
Имя переменной |
Тип переменной |
Назначение |
scr |
Список |
Массив данных – введенные коэфиценты |
I1,I2,I3,I4,K1,K2,K3,K4 |
Число |
Подсчет инваринтов |
X,Y,Z,U,V |
Список |
Массив данных – значение точек |
Результат работы
ВЫВОДЫ
В ходе лабораторной работы я создал алгоритм программы на языке Python