Как поместить результаты в таблицу или массив в Mathematica?
Привет у меня есть список чисел, например, k_1,k_2,...k_n, и f является функцией. Теперь я применяю f в списке чисел, и мне нужно, чтобы эти числа увеличивались, т.е.
f(k_i)>f(k_j) for any i>j .
Я могу получить число результатов k_i в каждой строке, но мне нужны результаты в одной таблице, разделенной запятой или чем-то еще, и подсчитывающим количество результатов.
Например:
k = Table[k1, k2, k3, k4, k5, k6, k7, k8, k9, k10];
count = 0;
i=1;
For[j = i, j <= 10, j++,
If[f[k[[j]]] - f[k[[i]]] > 0, i = j; Print["k", i];
count = count + 1]];
Print["count= ", count]
Я получил результат как:
k2
k3
k5
k9
count=4
но мне нужны результаты, чтобы быть вместе:
{k2,k3,k5,k9}
count=4
любая идея?
Спасибо
2 ответа
Вместо Print
Вы могли бы сделать AppendTo
т.е.
list={};AppendTo[list,5]
Возможно, было бы неплохо начать изучать подход функционального программирования, поскольку Mathematica располагает инструментами для повышения его эффективности, приведенный выше код может выглядеть примерно так
pairs = Partition[list, 2, 1];
increasingPairs = Select[pairs, f[First[#]] < f[Last[#]] &];
Last /@ increasingPairs
Вы, кажется, хотите самую длинную возрастающую подпоследовательность. Самый простой и эффективный способ получить его в Mathematica состоит в следующем:
lis[f_, vals_List] := LongestCommonSequence[#, Sort[#]] &[Map[f, vals]];
Пример:
In[8]:= lis[# &, {5, 3, 6, 1, 5, 7}]
Out[8]= {5, 6, 7}
В принципе, ответ не уникален - может быть несколько разных длинных увеличивающихся подпоследовательностей одинаковой длины.