Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Выполняем рассчеты согласно ЛР1 (К остальным ЛР комментарии аналогичные)
- void IsingModel::findNewConfigLR1(int steps) //кол-во шагов задается при вызове функции
- //По заданию это 100*N, где N = m_size*m_size
- {
- emit clearChart();
- for (int i = 0; i < steps; i++)
- {
- if (!m_started) //нужно для прерывания потока
- break;
- //Генерируем случайные координаты
- int n = rand()%m_size;
- int m = rand()%m_size;
- //Запоминаем текущую конфигурацию и энергию
- QVector<QVector<int>> tmpSpins(m_spins);
- int tmpEnergy = m_energy;
- //Переворачиваем Спин
- spinAt(n, m) *= -1;
- //Считаем энергию
- updateEnergy();
- //Если новая энергия меньше старой, оставляем текущую конфигурацию
- //и переходим к следующей иттерации
- if (m_energy < tmpEnergy)
- {
- //Передаем сигнал о выводе конфигурации на экран каждые N шагов
- if (i%(m_size*m_size) == 0)
- {
- emit drawMatrix(m_spins);
- }
- //Отсылаем сигнал с текущей энергией и Средней энергией на один спин
- emit sendEnergy(m_energy, avgEnergy());
- //qDebug() << m_energy;
- continue;
- }
- //Иначе возвращаем старую конфигурацию и энергию
- else
- {
- m_spins = tmpSpins;
- m_energy = tmpEnergy;
- }
- //Передаем сигнал о выводе конфигурации на экран каждые N шагов
- if (i%(m_size*m_size) == 0)
- {
- emit drawMatrix(m_spins);
- }
- }
- //Говорим потоку, что мы закончили выполнение функции
- m_started = false;
- emit finished();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement