Я пытаюсь реализовать модель, описанную в этой статье, которая имитирует уравнение, предложенное Аланом Тьюрингом модели Фитцхью-Нагумо в 2D в качестве модели для формирования моделей кожи животных -в других Слова: моделирование двух веществ, рассеивающихся по поверхности, как они взаимодействуют друг с другом, и какие модели возникают. Это результат статьи:
Я реализовал его ( моя интерпретация, по крайней мере, ) в обработке/Java, но это не работает так, как должны (значения расходятся, evel к первой итерации), поэтому мне интересно, что идет не так в моей реализации (включено в конце поста). < /p>
Это 3 соответствующих детали из статьи, касающиеся реализации: < /p>
1. U & V < /h3>
Существует два вещества, U и V (которые можно рассматривать как активатор и ингибитор соответственно)
2. Уравнения конечных разностей
Довольно простая свертка пикселей определяется для каждого значения (Pixel) из u и v . Значения для данного пикселя на следующем поколении рассчитываются с использованием как ИТ, так и его соседей. Итерация для данного пикселя (i, j) определяется как:
Значение v < /em> на итерации n+1 для данного пикселя (i, j) определяется как:
3. Константы они использовали
Таким образом, проблема, с которой я понимаю, заключается в том, что значения u и v быстро расходятся до Infinity/Nan (i Ожидайте, что они должны оставаться в пределах 0 ... 1, хотя в статье явно это не упоминается). v , кажется, расходится в первую очередь, взяв u вместе с ним, как можно увидеть здесь (для некоторого постоянного индекса):
0.94296926 0.77225316 // u, v after random initialisation
0.91600573 -62633.082 // values after first iteration -- v has already diverged massively
63.525314 5.19890688E8 // second iteration -- even more divergence
-520088.38 -2.98866172E14 // ...and so on...
1.40978577E14 1.2764294E19
-Infinity -1.7436987E24
NaN NaN
NaN NaN
< /code>
code < /h2>
//Parallel Simulation of Pattern formation in a reactiondiffusion system of Fitzhugh-Nagumo Using GPU CUDA
// Alfredo Gormantara and Pranowo1
static final float a = 2.8e-4;
static final float b = 5.0e-3;
static final float k = -0.005;
static final float tau = 0.1;
static final float delta_t = 1e-3;
float[][] u; // activator
float[][] v; // inhibitor
void setup() {
size(512, 512);
frameRate(5);
u = new float[height][width];
v = new float[height][width];
for (int i = 0; i < u.length; i++) {
for (int j = 0; j < u[0].length; j++) {
u[j] = random(1); // random of max of 1 ?
v[j] = random(1); // random of max 1?
}
}
loadPixels();
}
void draw() {
float[][] u_n_1 = new float[height][width]; // array holding the n+1 iteration values of u
float[][] v_n_1 = new float[height][width]; // array holding the n+1 iteration values of v
float denom = 2f / width; // 2/MESH_SIZE -- I think mesh_size is dimension of the grid
denom*=denom; // square for denominator
println(u[34][45], v[34][45]); // print vals of one location to see divergence
for (int y = 0; y < height; y++) {
int negative_y_i = y-1 < 0 ? height-1 : y-1; // wrap around grid
for (int x = 0; x < width; x++) {
final float u_n = u[y][x];
final float v_n = v[y][x];
int negative_x_i = x-1 < 0 ? width-1 : x-1; // wrap around grid
// calculate laplace (12)
float u_n_1_laplace = u[y][(x+1) % (width)] + u[y][negative_x_i] + u[(y+1) % (height)][x] + u[negative_y_i][x]; //n+1th iteration
u_n_1_laplace -= (4 * u_n);
u_n_1_laplace /= denom; // divide by (2/DIM)^2
u_n_1_laplace *= a;
// calculate n+1th iteration u value
u_n_1[y][x] = u_n + delta_t*( u_n_1_laplace + u_n -(u_n*u_n*u_n) - v_n + k );
// calculate laplace (14)
float v_n_1_laplace = v[y][(x+1)% (width)] + v[y][negative_x_i] + v[(y+1)% (height)][x] + v[negative_y_i][x]; //n+1th iteration
v_n_1_laplace -= (4 * u_n);
v_n_1_laplace /= denom; // denom is really small, so value goes huge
v_n_1_laplace *=b;
v_n_1[y][x] = v_n + (tau/delta_t)*( v_n_1_laplace + u_n - v_n);
pixels[y*width + x] = color((int) ((u_n_1[y][x]-v_n_1[y][x])*255));
}
}
u = u_n_1.clone(); // copy over new iteration values
v = v_n_1.clone(); // copy over new iteration values
updatePixels();
}
Подробнее здесь: https://stackoverflow.com/questions/656 ... -iteration
Внедрение диффузионной модели диффузии Фицхух-Нагумо расходится по первой итерации ⇐ JAVA
Программисты JAVA общаются здесь
1738678701
Anonymous
Я пытаюсь реализовать модель, описанную в этой статье, которая имитирует уравнение, предложенное Аланом Тьюрингом модели Фитцхью-Нагумо в 2D в качестве модели для формирования моделей кожи животных -в других Слова: моделирование двух веществ, рассеивающихся по поверхности, как они взаимодействуют друг с другом, и какие модели возникают. Это результат статьи:
Я реализовал его ( моя интерпретация, по крайней мере, ) в обработке/Java, но это не работает так, как должны (значения расходятся, evel к первой итерации), поэтому мне интересно, что идет не так в моей реализации (включено в конце поста). < /p>
Это 3 соответствующих детали из статьи, касающиеся реализации: < /p>
1. U & V < /h3>
Существует два вещества, U и V (которые можно рассматривать как активатор и ингибитор соответственно)
2. Уравнения конечных разностей
Довольно простая свертка пикселей определяется для каждого значения (Pixel) из u и v . Значения для данного пикселя на следующем поколении рассчитываются с использованием как ИТ, так и его соседей. Итерация для данного пикселя (i, j) определяется как:
Значение v < /em> на итерации n+1 для данного пикселя (i, j) определяется как:
3. Константы они использовали
Таким образом, проблема, с которой я понимаю, заключается в том, что значения u и v быстро расходятся до Infinity/Nan (i Ожидайте, что они должны оставаться в пределах 0 ... 1, хотя в статье явно это не упоминается). v , кажется, расходится в первую очередь, взяв u вместе с ним, как можно увидеть здесь (для некоторого постоянного индекса):
0.94296926 0.77225316 // u, v after random initialisation
0.91600573 -62633.082 // values after first iteration -- v has already diverged massively
63.525314 5.19890688E8 // second iteration -- even more divergence
-520088.38 -2.98866172E14 // ...and so on...
1.40978577E14 1.2764294E19
-Infinity -1.7436987E24
NaN NaN
NaN NaN
< /code>
code < /h2>
//Parallel Simulation of Pattern formation in a reactiondiffusion system of Fitzhugh-Nagumo Using GPU CUDA
// Alfredo Gormantara and Pranowo1
static final float a = 2.8e-4;
static final float b = 5.0e-3;
static final float k = -0.005;
static final float tau = 0.1;
static final float delta_t = 1e-3;
float[][] u; // activator
float[][] v; // inhibitor
void setup() {
size(512, 512);
frameRate(5);
u = new float[height][width];
v = new float[height][width];
for (int i = 0; i < u.length; i++) {
for (int j = 0; j < u[0].length; j++) {
u[i][j] = random(1); // random of max of 1 ?
v[i][j] = random(1); // random of max 1?
}
}
loadPixels();
}
void draw() {
float[][] u_n_1 = new float[height][width]; // array holding the n+1 iteration values of u
float[][] v_n_1 = new float[height][width]; // array holding the n+1 iteration values of v
float denom = 2f / width; // 2/MESH_SIZE -- I think mesh_size is dimension of the grid
denom*=denom; // square for denominator
println(u[34][45], v[34][45]); // print vals of one location to see divergence
for (int y = 0; y < height; y++) {
int negative_y_i = y-1 < 0 ? height-1 : y-1; // wrap around grid
for (int x = 0; x < width; x++) {
final float u_n = u[y][x];
final float v_n = v[y][x];
int negative_x_i = x-1 < 0 ? width-1 : x-1; // wrap around grid
// calculate laplace (12)
float u_n_1_laplace = u[y][(x+1) % (width)] + u[y][negative_x_i] + u[(y+1) % (height)][x] + u[negative_y_i][x]; //n+1th iteration
u_n_1_laplace -= (4 * u_n);
u_n_1_laplace /= denom; // divide by (2/DIM)^2
u_n_1_laplace *= a;
// calculate n+1th iteration u value
u_n_1[y][x] = u_n + delta_t*( u_n_1_laplace + u_n -(u_n*u_n*u_n) - v_n + k );
// calculate laplace (14)
float v_n_1_laplace = v[y][(x+1)% (width)] + v[y][negative_x_i] + v[(y+1)% (height)][x] + v[negative_y_i][x]; //n+1th iteration
v_n_1_laplace -= (4 * u_n);
v_n_1_laplace /= denom; // denom is really small, so value goes huge
v_n_1_laplace *=b;
v_n_1[y][x] = v_n + (tau/delta_t)*( v_n_1_laplace + u_n - v_n);
pixels[y*width + x] = color((int) ((u_n_1[y][x]-v_n_1[y][x])*255));
}
}
u = u_n_1.clone(); // copy over new iteration values
v = v_n_1.clone(); // copy over new iteration values
updatePixels();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/65637877/implementation-of-fitzhugh-nagumo-diffusion-model-diverging-by-first-iteration[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия