очень был бы рад любой помощи с таким заданием:
1) дан текстовый файл. из него функцией
ReadList получается список значений, затем применяется функция
Flatten и затем этот "уплощенный список" значений (называем его z) структурируем по строкам и столбцам таким образом: обращаемся к элементу списка командой
z[[1000*(i-1)+j]]. (имеем i от 1 до 256 и j от 1 до 1000, всего 256000 элементов списка, структурированных по строкам индексом i и столбцам индексом j).
2) есть возможность нарисовать зависимость
z[[1000*(i-1)+j]]:
Код:
cnz1 = Table[ z1[[1000*(i - 1) + j]], {j, 37, 520, 1}, {i, 80, 180, 1} ];
MatrixPlot[cnz1];
(тут выбраны лишь некоторые из допустимых значений индексов по причинам, в которые нецелесообразно вникать)
3) наконец, сама задача.
есть переменная wav, которая через столбцовый индекс j выражается так:
Код:
wav = wavMin + j*Inc;
где
wavMinи
Inc - константы,
j = 37..520 с шагом в 1.
команда
z[[1000*(i-1)+j]] - функция интенсивности в зависимости от i и j.
а необходимо предоставить в математике функцию интенсивности в зависимости от i и wav с указанной выше связью wav и j.
и затем изобразить эту функцию командой
MatrixPlot подобно тому, что было в п.2.
по сути: необходимо заменить в функции от дискретного переменного z столбец
j на массив
wav[j] и изобразить
z[i,wav[j]].
опишу, какие шаги я предпринимал и с какими проблемами сталкивался:
1 способ:
составлял функцию
j[wav]=IntegerPart[(wav-wavMin)Inc]+1; и создавал
Код:
wavMin = 1.232040;
Inc = 0.043127;
wavMax = wavMin + Inc*(520 - 37);
cnz1 = Table[
z1[[1000*(i - 1) + IntegerPart[(wav - wavMin)/Inc] + 1]], {wav, wavMin, wavMax, Inc}, {i, 80, 180, 1} ];
но при вызове
MatrixPlot[cnz1]график выводится с зависимостью
z1 от
j (то есть вертикальная ось занимает диапазон от 1 до (520-37), а не от
wavMin до
wavMax.
2 способ:
составлял
Код:
cnz1 = Table[
z1[[1000*(i - 1) + j]], {j, 37, 520, 1}, {i, 80, 180, 1} ];
затем выполнял
Код:
funz1 = ListInterpolation[cnz1];
то есть получаем теперь уже функцию
funz1[i,j] с непрерывно изменяющимися переменными, в котором необходимо
j заменить на
Код:
IntegerPart[(wav - wavMin)/Inc] + 1.
тут я пробовал делать подобные манипуляции:
Код:
Funz1[wav, i] = funz1[IntegerPart[(wav - wavMin)/Inc] + 1, i];
tabcnz1 = Table[Funz1, {wav, wavMin, wavMax, Inc}, {i, 1, 101, 1} ];
MatrixPlot[tabcnz1];
но вышеприведенный код приводит к тому же, что и в первом способе, график отображается в диапазоне от 1 до 520-37.