Генерация списка через массив в Wolfram Language

У меня есть код, в котором нам сначала нужно сгенерировать n + 1 число в диапазоне с заданным шагом. Однако я не понимаю, как и почему это работает:

a = 2;
b = 7;
h = (b-a)/n;

x[0] = a;
Array[x, n+1, 0];

For[i = 0, i < n + 1, i++, x[i] = a + h*i]

Мои вопросы:

  1. Генерируются ли элементы x автоматически при доступе? Нет упоминания x перед строкой x[0] = a
  2. Разве доступ к индексу не должен быть похож на x[[i]]?
  3. Что именно здесь делает Array? Это не связано ни с чем, что меня смущает
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
127
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте Range[2,10,2] для диапазона чисел от 2 до 10 с шагом 2 и т. д.

Кроме того, есть некоторые ошибки в вашем коде или, возможно, в вашем понимании Mathematica...

x[0] = a определяет функцию с именем x, которая при представлении аргумента 0 возвращает a (или значение a, поскольку оно определено ранее). Mathematica уделяет особое внимание используемым символам скобок [ и ], которые заключают в себя списки аргументов функций. Поскольку для функции x нет другого определения (по крайней мере, мы не видим здесь), то она будет возвращать невычисленное значение для любого аргумента, кроме 0.

И вы правы, двойные квадратные скобки, то есть [[ и ]], используются для заключения значений индекса. x[[2]] действительно будет относиться ко второму элементу списка с именем x. Обратите внимание, что Mathematica индексирует из 1, поэтому x[[0]] выдаст ошибку, если x существует и является списком.

Выражение Array[x, n+1, 0] действительно возвращает значение, но оно не присваивается никакому символу, поэтому теряется. И завершающий ; в строке подавляет поведение Mathematica по умолчанию, чтобы напечатать возвращаемое значение любого выражения, которое вы выполняете.

Наконец, по вопросу использования For для создания списков значений обратитесь к https://mathematica.stackexchange.com/questions/7924/alternatives-to-procedural-loops-and-iterating-over-lists- в математике. И, возможно, задайте дополнительные вопросы по Mathematica на этом сайте, ведь там гораздо больше шансов найти настоящих экспертов по системе.

Полагаю, я мог бы добавить ... если вы намерены использовать Array по какой-то причине, задайте другой вопрос конкретно об этом. Как вы могли (не) осознавать, я рекомендую не использовать эту функцию для создания списка чисел.

Здравствуйте, спасибо за ваш ответ. Этот код мне дали в примере лагранжевой интерполяции, просто мне он не показался хорошим и понятным, я сам слабо разбираюсь в языке. Поэтому, если есть лучшие альтернативы этому методу Array, я более чем счастлив использовать их вместо этого.

Maria Ayanyan 13.10.2022 15:36
Ответ принят как подходящий

Из документов Array[f, n, r] генерирует список, используя начало индекса r.

Сам по себе Array[x, n + 1, 0] просто создает список x функций, например.

n = 4;
Array[x, n + 1, 0]

{х[0], х[1], х[2], х[3], х[4]}

Если x определен, он применяется, например.

x[arg_] := arg^2

Array[x, 4 + 1, 0]

{0, 1, 4, 9, 16}

В качестве альтернативы, чтобы использовать x в качестве функциональной переменной, массив можно установить так

Clear[x]

With[{z = Array[x, n + 1, 0]}, z = {m, n, o, p, q}]

{x[0], x[1], x[2], x[3], x[4]}

{м, п, о, р, д}

Код OP устанавливает функциональные переменные x в цикле For, например.

Еще с n = 4

a = 2;
b = 7;
h = (b - a)/n;

For[i = 0, i < n + 1, i++, x[i] = a + h*i]

который может отображаться с помощью Array[x, n + 1, 0]

{2, 13/4, 9/2, 23/4, 7}

также x[0] == 2

Истинный

То же самое можно было бы сделать таким образом

Clear[x]

With[{z = Array[x, n + 1, 0]}, z = Table[a + h*i, {i, 0, 4}]]

{2, 13/4, 9/2, 23/4, 7}

Обратите внимание, что DownValues[x] показывает определения функций.

{HoldPattern[x[0]] :> 2, HoldPattern[x[1]] :> 13/4, HoldPattern[x[2]] :> 9/2, HoldPattern[x[3]] :> 23/4, HoldPattern[x[4]] :> 7}

Другие вопросы по теме