как поместить результаты в таблицу или массив в Mathematica? - PullRequest
1 голос
/ 20 января 2011

Привет, у меня есть список чисел, например, 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 ]

2 голосов
/ 20 января 2011

Кажется, вы хотите самую длинную увеличивающуюся подпоследовательность.Самый простой и эффективный способ получить его в Mathematica - это:

lis[f_, vals_List] := LongestCommonSequence[#, Sort[#]] &[Map[f, vals]];

Пример:

In[8]:= lis[# &, {5, 3, 6, 1, 5, 7}]

Out[8]= {5, 6, 7}

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

2 голосов
/ 20 января 2011

Вместо Print вы могли бы сделать AppendTo, то есть

list={};AppendTo[list,5]

Возможно, было бы хорошо начать изучать подход к функциональному программированию, поскольку Mathematica имеет инструменты, чтобы сделать его эффективным, приведенный выше код может выглядеть примерно так

pairs = Partition[list, 2, 1];
increasingPairs = Select[pairs, f[First[#]] < f[Last[#]] &];
Last /@ increasingPairs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...