Member 14081726 Ответов: 1

Я все время получаю ошибку, которая говорит, что нельзя добавить скалярные и векторные величины.


сцена.ширина = 600 #размер нашего портала
сцена.высота = 600

# Создайте сюжет
PosGraph = график(ширина=600, высота=250, заголовок='Канистра, плавающая на воде: эксперимент и моделирование',
ytitle='позиция (м)', xtitle='время (сек)')

#expt = серия(graph = PosGraph, color=color.cyan)
sim = серия(graph = PosGraph, color=color.red)

# Загрузите данные. Он ожидает данные в строках, где каждый набор данных разделен запятыми.
# Время должно быть в первой колонке, а позиция-во второй.
# Он игнорирует любые другие столбцы, хотя вы могли бы прочитать свой в скорости или что-то еще.
#
#Он должен иметь данные в первой строке. Удалите все заголовки и имена столбцов.

#Ф = read_local_file()

# Создайте пустой список или массив для хранения данных
t_data = []
x_data = []

# Теперь пройдите строку за строкой через файл и добавьте данные из первого столбца (номер 0) в массив времени
# и второй столбец (номер 1) для размещения массива
#для строки в f.text.splitlines():
#седла = ряд.сплит(",")
# t_data.append(float(cols[0]))
# x_data.append(float(cols[1]))

# поставь это и на график тоже. X = время, Y = положение
# expt.plot(float(cols[0]), float(cols[1]))

####
## Теперь смоделируйте эти результаты. Ниже приведено то, что вам нужно будет изменить для вашего эксперимента
####

#Установите некоторые константы
г = -9.8
deltat = .05 #интервал времени для каждого цикла в секундах; выберите любое малое значение
масса = 0,022 # это было измерено
Пи=3,14
Мой генератор был массой на горизонтальной пружине. Ваш генератор может зависеть от различных факторов

D = 1000 # это было измерено. Вы также можете использовать его в качестве параметра подгонки, который вы меняете (кг)

П = Д #Ро
f_friction = 1.1 # это, вероятно, трудно измерить, поэтому я буду использовать его в качестве подходящего параметра для изменения
# начиная с 0, это хороший способ увидеть, что колебания в вашем симуляторе работают
y_init = -0.028 # посмотрите на свою первую точку данных
y_equil = -0.017 # точка, вокруг которой вы колеблетесь. Хороший выбор для начала исходит из данных
Р=0.015
#УСТАНОВИТЕ НАЧАЛЬНЫЕ ЗНАЧЕНИЯ ВЕЩЕЙ
t = 0 #время инициализации. Выберите первую временную точку ваших экспериментальных данных, чтобы графики могли совпадать
v_i = vec(0,1,0) #инициализировать скорость. Посмотрите на свои первые точки данных положения, чтобы оценить начальную скорость

#ОПРЕДЕЛИТЕ НЕКОТОРЫЕ ОБЪЕКТЫ
#Во-первых, мой блок
контейнер = цилиндр(pos=vec(0,y_init,0), size = вектор(.03, .049, .03), v = v_i)
#Я мог бы добавить весну, но это было бы только для шоу

#РАСЧЕТ - ЭТО ЦИКЛ, В КОТОРОМ ПРОИСХОДИТ ВСЕ ВОЛШЕБСТВО
в то время как t < 6.8: #скажите ему, как долго нужно запускать цикл, в секундах (как долго идут ваши экспериментальные данные?)
rate(40) #скажите ему, как быстро запустить цикл (большие числа быстрее)
Ч= контейнер.пос
V= Pi*r^2*H
в=v_i


#Вычислите силы на вашем генераторе. Мои - это пружина и трение. Ваш может быть другим
# Fsp = -spring_k * (block.pos - vector(x_equil, 0,0)) # - k *delata_x, которая является позицией блока минус позиция равновесия
Ffric=-0,5*V норма
Fg = g*масса # противоположное направление скорости
Fb = p*V*g
#Получить вектор чистой силы
Fnet = Fb + Fg + Ffric

#Найдите ускорение корабля. Второй закон Ньютона!
a = Fnet/масса

#позвольте ускорению изменить скорость корабля на короткий промежуток времени "дельтат"
# vf = vi + a*t
v = v + a*deltat

#разрешить скорости изменять положение судна в течение короткого промежутка времени "дельтат"
# xf = xi + v*t
container.pos = container.pos + container.v*deltat


#постройте график соответствия данных вашему эксперименту
SIM-карты.участок(Т,контейнер.пос)

#опережающее время по интервалу deltat
t = t + deltat

#вернитесь к началу цикла и пересчитайте все в новой позиции; повторяйте до тех пор, пока оператор 'while' не будет удовлетворен

Что я уже пробовал:

Я попытался дать каждой переменной число

OriginalGriff

Ну, это не C++. Матлаб наугад.
Отредактируйте свой вопрос и исправьте теги, чтобы они соответствовали тому, что это за чертовщина, а затем сообщите нам, где и когда возникает ошибка - просто сбросьте на нас код и скажите: "это не работает", - это вообще ничего не говорит нам.

Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

1 Ответов

Рейтинг:
1

Richard MacCutchan

v_i = vec(0,1,0) #initialize speed. Look at your first position data points to estimate the initial speed

...

v=v_i   # so v is defined as a vector

...

v = v + a*deltat # you cannot add a single value to a vector