Вопросы о программировании в Mathematica

paha73

Вот встретилось примерно такое
f[x_Integer] := f[x] = x+10;
Объясните, пожалуйста, зачем такое используется и почему оно работает так как работает?

seregaohota

А как оно работает?
По-идее это определение (знак :=) функции с целым аргументом, хотя может матрицы-вектора т.к. скобки прямые почти везде под индексы используют?
И по-идее тогда f[3] выдаёт 13, а f[5] 15?

11111galina

Можешь переписать как f[x_Integer]:=x+10; и все будет работать так же =)

slsf

Это хитрый трюк. На самом деле дело тут не в смысле, а в скорости.
Вы одновременно задаете саму функцию и прописываете определения уже вычисленных значений.
То есть, при повторном наборе f[1] в системе уже будет определена простая символьная подстановка f[1]=11.
Которая и будет реализована системой вместо повторного вычисления функции f.
Трюк этот оправдывает себя на сложных функциях - факториал, аккерман и так далее.
Успехов.
.

11111galina

Куда же мы их прописываем? Их в любом случае сначала нужно вычислить, а хранить вычисленные значения для всех пусть даже целых значений переменной - это что-то из области фантастики, может ты хреново объяснил или я хреново понял?
Если мы напишем f[x] = x+10;
то чтобы получить, скажем график f[x] придется все равно написать Plot[Evaluate[f[x]],{x,xmin,xmax}];
Т.е. вычислять значения функции.

slsf

По поводу объяснения - верен второй вариант ответа
Поэкспериментируйте с системой и Вы сами все поймете.
Можете обратить внимание на то, как изменяется результат команды ?f в вышеприведенном примере.

Sensor4ik

+1 к . Знак ":=" в Математике не равнозначен знаку "=". Он означает SetDelayed. Наберите в Математике "SetDelayed" И нажмите F1. После прочтения определения функции "SetDelayed" станет понятно, что имел в виду .

paha73

спасибо огромное

Lene81

Он означает SetDelayed.
Ленивые вычисления? Типа delayed/force в scheme?
Оставить комментарий
Имя или ник:
Комментарий: