Динамический нет. строк на листе Google Sheets

У меня есть интервал времени 0 <t <T, и у меня есть куча функций, определенных на t

t  f1(t)   f2(f1(t), t)   f3(f1, f2, t)   ...
_____________________________________________
0  f1(0)   f2(f1(0), 0)    f3(f1, f2, 0)   ...
0  f1(Δt)  f2(f1(Δt), Δt)  f3(f1, f2, Δt)  ...
...
T  f1(T)   f2(f1(0), T)    f3(f1, f2, T)   ...

Если я зафиксирую определенный временной шаг Δt, я смогу организовать свои вычисления в рабочем листе, используя параметры, определенные где-то еще, и в конечном итоге я смогу построить график некоторых результатов в зависимости от 0 < t < T.

OTOH, если, в свою очередь, временной шаг Δt зависит от этих внешних параметров, я не знаю, как изменить нет. строк в расчетном листе.

Интересно, можно ли использовать какие-то сценарии, но мой уровень написания сценариев для Google-таблиц ниже нуля :-(


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

Т дт т расходы) т+cos²(т) 1 0,2 0,2 0,4 0,6 0,8 1

Я использовал =arrayformula(if (C2:C,cos(C2:C),"")), как предложено здесь, добавив нулевую строку, чтобы избежать отображения FALSE, но остается небольшая проблема, а именно нет отображения, когда в столбце t стоит 0,

Т дт т расходы) т+cos²(т) 1 0,2 0,000 0,200 0,9800665778 1.160530497 0,400 0,921060994 1.248353355 0,600 0,8253356149 1.281178877 0,800 0,6967067093 1.285400239 1.000 0,5403023059 1.291926582

но когда я пытаюсь решить проблему, используя =arrayformula(if (isnumber(C2:C),cos(C2:C),"")), я получаю следующее:

Т дт т расходы) т+cos²(т) 1 0,2 0,000 1 1 0,200 0,9800665778 1.160530497 0,400 0,921060994 1.248353355 0,600 0,8253356149 1.281178877 0,800 0,6967067093 1.285400239 1.000 0,5403023059 1.291926582

к моему полному удовлетворению.

смотри, нет формулы массива =sequence(N+1, 1, 0, Δt)

gboffi 08.04.2024 17:33

Хорошее место - я соответствующим образом обновил свой ответ. AFAIK, функция SEQUENCE в прошлом не принимала нецелое число ни для параметров начала, ни для шага (отсюда и мой первоначальный ответ), но это поведение, похоже, было изменено.

The God of Biscuits 08.04.2024 18:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Трудно дать конкретные рекомендации, учитывая уровень абстракции вашего вопроса, но должна быть возможность динамически изменять количество возвращаемых строк, используя простые формулы без сценариев. Для вашего столбца t, если вы знаете T и Δt (и они имеют одинаковые единицы измерения), то =arrayformula(sequence(T/Δt)*Δt)) сгенерирует соответствующее количество строк (очевидно, вам нужно будет заменить T и Δt их фактическими значениями или ссылками на ячейки, содержащие фактические значения) .

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

РЕДАКТИРОВАТЬ после приведенного примера (при условии, что таблица примеров находится в верхнем левом углу вашего листа):

Для столбца t используйте =sequence(A2/B2,1,B2,B2) в C2.

Для столбца cos(t) используйте =arrayformula(if (isnumber(C2:C),cos(C2:C),)) в D2.

Для столбца t+cos²(t) используйте =arrayformula(if (isnumber(C2:C),C2:C+D2:D^2,)) в E2.

Н.Б. Если вы вычисляете множество функций во многих строках, используемый здесь подход для ограничения функций нужным количеством строк может быть неоптимальным с точки зрения времени расчета (хотя он все равно должен работать).

Теперь оно менее абстрактное... Надеюсь на это.

gboffi 08.04.2024 17:12

Ваши предложения, как и прежде, направили меня на правильный путь, но результат оказался не совсем правильным (см. мое последнее редактирование), потому что нужно использовать isnumber, чтобы различать нулевые ячейки и пустые ячейки. Если вы исправите глюки, я смогу принять ваш ответ.

gboffi 08.04.2024 22:20

Я обновил ответ по запросу, чтобы учесть t=0.

The God of Biscuits 09.04.2024 09:41

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