Это мой код Python.
import numpy as np
import matplotlib.pyplot as plt
n = 3; #% No of image
T = 100; #% for the time period user wants to see the mirage
ts = .2*(100/(2*n-3)); #% standing time
tv = .6*((100-((2*n-3)*ts))/(2*(n-1))); #% travelling time
m1 = np.arange(0,tv,0.1);
x1 = 0.5*(1-(np.cos(np.pi*(m1/tv))));
xa = x1;
x2 = []
#travelling toward from left to right
for i in np.arange(1,n-1):
x1 = x1+i -1
#standing at one point
for f in np.arange(1,ts):
x2.append(x1[-1])
if i==1:
x3 = [x1, x2]
else:
x3 = [x3,x1,x2]
#%travelling from right to left
xd = np.flip(xa)
for i in range(0, n - 1):
if i == 0:
pass
else:
xd = xd - 1
xw = []
for f in np.arange(1, ts):
mini = np.amin(xd)
xw.append(mini)
if i == 0:
xm = np.concatenate((xd.reshape(1, -1), np.array(xw).reshape(1, -1)), axis=1)
else:
xm = np.concatenate((xm, xd.reshape(1, -1), np.array(xw).reshape(1, -1)), axis=1)
xm = abs(np.amin(xm)) + xm
#%cloning the cycle
xs = []
for r in np.arange(1, np.fix(T/(2*(n-1)*(tv+ts)))):
if r==1:
xs.append[x3,xm]
else:
xs.append[xs,x3,xm]
plt.plot(xs)
Но когда я запускаю его, ничего не выходит
И это мой код Matlab
clc;
close all;
clear all;
% all of the given time are in milisecond
n = 3;% No of image
T = 100;% for the time period user wants to see the mirage
ts = .2*(100/(2*n-3)); % standing time
tv = .6*((100-((2*n-3)*ts))/(2*(n-1)));% travelling time
m1 = 0:.1:tv;
x1 = .5*(1-cos(pi*(m1/tv)));%position equation
xa = x1;
%travelling toward from left to right
for i= 1:n-1
x1 = x1+i-1;
%standing at one point
for f = 1:ts
x2(f) = x1(end);
end
if i==1
x3=[x1,x2];
else
x3 = [x3,x1,x2];
end
end
disp(x2)
%travelling from right to left
xd = flip(xa);
for i= 1:n-1
if i==1
else
xd = xd-1;
end
%standing at one point
for f = 1:ts
xw(f) = min(xd);
end
if i==1
xm=[xd,xw];
else
xm = [xm,xd,xw];
end
end
xm = abs(min(xm))+xm;
#%cloning the cycle
xs = []
for r in np.arange(1, np.fix(T/(2*(n-1)*(tv+ts)))):
if r==1:
xs.append(x3,xm)
else:
xs.append(xs,x3,xm)
plt.plot(xs)
И это вывод, который поставляется с кодом Matlab. Я хочу, чтобы вывод моего кода Python был таким же, как код Matlab, или, по крайней мере, я хочу увидеть график. Но это ничего не показывает. Итак, как я могу решить эту проблему? Заранее спасибо.
Похоже, ваш xs
пуст, проверьте его размер. Затем проверьте, каковы размеры x3
, xm
, xs
и вашего итератора цикла.
`xs.append[x3,xm]` ?? Append — это метод, он нужен ()
, а не []
@AnderBiguri Я исправил это, но все равно дает тот же пустой сюжет.
@Adriaan xs намеренно пуст. Чтобы список можно было заполнить хм, х3. И вы правы, октава отличается, почему я ее пометил.
Конечно, вы инициализируете xs
пустым, но он не должен быть пустым после списка. Вот почему я предложил вам проверить их размеры.
Я не вижу, чтобы это было исправлено в коде здесь.
Вот исправленная версия вашего кода. Основная идея — не смешивать concatenate
с append
. В MATLAB [[a],[b]]
представляет собой горизонтальную конкатенацию и отличается от list.append()
в Python. Также позаботьтесь об инклюзивном диапазоне в MATLAB и эксклюзивном диапазоне в Python, и fix
возвращает float
, тогда как int
возвращает integer
.
import numpy as np
import matplotlib.pyplot as plt
# all of the given time are in milisecond
n = 3 # No of image
T = 100 # for the time period user wants to see the mirage
ts = 0.2*(100/(2*n-3)) # standing time
tv = 0.6*((100-((2*n-3)*ts))/(2*(n-1))) # travelling time
m1 = np.arange(0,tv+.1,0.1)
x1 = 0.5*(1-np.cos(np.pi*(m1/tv))) # position equation
xa = x1
# travelling toward from left to right
x2 = np.zeros(int(ts))
for i in range(1,n):
x1 = x1+i-1
# standing at one point
for f in np.arange(0,int(ts)):
x2[f] = x1[-1]
if i == 1:
x3 = np.concatenate((x1,x2))
else:
x3 = np.concatenate((x3,x1,x2))
# # travelling from right to left
xd = xa[::-1] # flip xa
xw = np.zeros(int(ts))
for i in range(1,n):
if i != 1:
xd -= 1
# standing at one point
for f in np.arange(0,int(ts)):
xw[f] = np.min(xd)
if i == 1:
xm = np.concatenate((xd,xw))
else:
xm = np.concatenate((xm,xd,xw))
xm += np.abs(np.min(xm))
# cloning the cycle
for r in range(0,int(T/(2*(n-1)*(tv+ts)))):
if r == 0:
xs = np.concatenate( (x3,xm) )
else:
xs = np.concatenate( (xs,x3,xm) )
plt.plot(xs)
который показывает тот же график, что и MATLAB.
омг, я не знаю, как вас отблагодарить. Я напрягался из-за этого неделями. У меня практически не было опыта работы с Python, поэтому я решил написать код в Matlab, а затем преобразовать его в Python. Спасибо, что нашли время написать его. Желаю тебе всего наилучшего. Еще раз спасибо.
Да, я уже проголосовал за ваш ответ.
Прочтите описания как матлаб, так и октава. Они нет одинаковы, поэтому используйте только оба тега, когда спрашиваете о сходствах/различиях между ними.