Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба4

.docx
Скачиваний:
7
Добавлен:
18.12.2019
Размер:
154.78 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

старший преподаватель

Н.А. Соловьева

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4

Реализация алгоритма на языке питон

по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

4616

А.В.Павлов

подпись, дата

инициалы, фамилия

Санкт-Петербург 2018

  1. ПОСТАНОВКА ЗАДАЧИ

Разработать алгоритм на языке питон

ЗАДАНИЕ: Построение поверхностей второго порядка

  1. ОПИСАНИЕ РАЗРАБОТАННОЙ ПРОГРАММЫ

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

Соседние файлы в предмете Технология программирования