мне нужно доработать программу, чтобы при повторном старте программы она предлагала изменить, или оставить без изменений введенные до этого данные.
чтобы данные можно было изменять (не переписывать, а именно редактировать)
Код:
#подключаем библиотеки
from scipy import linalg
import numpy as np
import matplotlib.pyplot as plt
def vvod_m(): #создаем Функцию ввода матрицы
matrica=[]
i=0
while i>-1:
matrica.append(input().split())
end=matrica[i][0]
if end == ".":
break
i+=1
raw=len(matrica)-1
_ = matrica.pop(raw) # Удаляем строку в матрице
for i in range(len(matrica)): # len(A) - возвращает количество строк в матрице А
for j in range(len(matrica[i])): # len(A[i]) - возвращает количество элементов в строке i
matrica[i][j]=float(matrica[i][j])
matrica=np.array(matrica)
return matrica
def grafiki(mat,mat2):
x1=0
for cp in range(len(mat)):
for s in range(len(mat[c])):
x1=x1+1
x1=np.arange(x1)
mat = np.concatenate(mat).flat
mat = np.array(mat)
x2=x1.copy()
x1=0
for cp in range(len(mat2)):
for s in range(len(mat2[c])):
x1=x1+1
x1=np.arange(x1)
mat2 = np.concatenate(mat2).flat
mat2 = np.array(mat2)
plt.plot(x2,mat,label='line A2')
plt.plot(x1,mat2,label='line B2')
plt.legend()
plt.show()
def vivod(matrica): #создаем функцию вывода матрицы
for i in range(len(matrica )): # len(A) - возвращает количество строк в матрице А
for j in range(len(matrica [i])): # len(A[i]) - возвращает количество элементов в строке i
print(matrica [i][j], end = ' ')
print() # делаем переход на новую строку
c=1
while c==1:
print("Введите матрицу A по строкам:") #Вводим матрицу А
A=vvod_m()
print("Введите нулевой вектор Y по строкам:") #Вводим нулевой вектор Y0
Y0=vvod_m()
print("Введите пеpиод дискретизации") #Вводим период дискретизации dt
dt=float(input())
print("Введите время наблюдения:") #Вводим время наблюдения t
t=float(input())
print("количество столбцов для расчета")
k=int(input())
print("Введите матрицу B:")
B=vvod_m()
print("Введите нулевой вектор U:")
U0=vvod_m()
print("Введите величину отклонения вектора управления:")
DU=vvod_m()
U1=U0.copy()
i=0 #переменная числа повторений цикла
it=int(t/dt) #количество периодов дискретизации
Y=Y0.copy() #Присваиваем матрице векторов значение нулевого векторв
A=np.hstack((A,B))
vivod(A)
Y0=np.vstack((Y0, U0))
Yi1=Y0
while i < it: # Каждый период дискретизации считаем матрицу векторов
# Присваиваем предыдущему вектор-столбцу значение текущего
print("произведение столбца на матрицу:")
Yi=np.matmul( A,Y0 ) # Умножаем матрицу А на предыдущий вектор
U1=U0+DU
U0=U1
print("Yi")
vivod(Yi) #Выводим текущий вектор
Y=np.hstack((Y,Yi)) # добавляем вектор к предыдущей
print("Y")
vivod(Y)
for j in range(len(Y[0])):
if k == j:
Y=np.delete(Y,[0],axis=1)
print("i")
print(i)
vivod(Yi1)
Y1 = linalg.pinv(Yi1)
Yi1=np.delete(Yi1,[0],axis=1)
print("Псевдообратная")
vivod(Y1)
print("")
print("Произведение Y и псевд")
A1=np.matmul( Y,Y1 )
vivod(A1)
A2=np.delete(A1,np.s_[len(Yi):len(Yi)+len(U0)],axis=1)
B2=np.delete(A1,np.s_[0:len(Yi)],axis=1)
print("A2")
vivod(A2)
print("B2:")
vivod(B2)
print("Собственные числа матрицы А2:")
val, vect = linalg.eig(A2)
print(val)
Y0=np.vstack((Yi, U0))
Yi1=np.hstack((Yi1,Y0))
i+=1
grafiki(A2,B2)
print("Продолжить работу? Да(1)/Нет(0)")
c=int(input())
if c==0:
break
чтобы данные можно было изменять (не переписывать, а именно редактировать)