Страницы: 1 2 След.
RSS
Подсчёт количества итераций на листе.
 
Здравствуйте, знатоки Эксель!

Постараюсь кратко.
Есть лист с кучей формул и циклических ссылок. Всё это работает, но из-за довольно грубой дискретности используемых констант (их изменить нельзя), иногда вычисления оказываются некорректными. Внешне это никак не отображается. Единственное отличие – пересчёт в таких случаях идёт дольше, т.к. используется максимальное заданное в экселе кол.-во итераций, а заданная точность не достигается. Но проверка по времени расчёта не годится, предполагается использование на совсем разных машинах.

Вопрос: существует ли возможность вытащить сведения, сколько итераций затрачено на решение (они ведь худо-бедно, но отображаются в строке состояния)? Чтобы в итоге сделать так: достигнут максимум итераций = неверные вычисления. Крутил Iteration(s)....не получается, третий день мучаю поисковики и ломаю мозг...
 
Цитата
Ilya66 написал:  лист с кучей... циклических ссылок. Всё это работает,
Д ну? Сами же пишете:
Цитата
иногда вычисления оказываются некорректными
А это значит, что НЕ РАБОТАЕТ.
Разрешать итеративные вычисления нужно осторожно, с оглядкой на подводные камни (и применять в специфических задачах, типа геодезических вчислений). У Вас такая хитромудрая задача?

Цитата
сколько итераций затрачено на решение
Отдельная ячейка с подсчетом и проверка на превышение допустимой границы.

Цитата
Крутил Iteration(s)
Где это?
 
Цитата
Ilya66 написал: а заданная точность не достигается
это означает что модель построена некорректно. итеративное вычисление основано на приближении к результату путем изменения дискрета в зависимости от результата чем ближе результат тем меньше дискрет, при том порой следует менять знак.  Сократить количество итераций можно меняя дискрет не линейно, а по степенной или логарифмической функции. Это все можно реализовать формулами.
По вопросам из тем форума, личку не читаю.
 
В России  вместо ответа на конкретно заданный вопрос (да, вот решение, или нет - это невозможно), пишут, что у тебя всё неправильно. :)
Цитата
vikttur написал:
Отдельная ячейка с подсчетом и проверка на превышение допустимой границы.
Хм...там циклических ссылок десятки и итерационные цепочки в десятки формул с разветвлениями. Не представляю, как это туда прикрутить.
Цитата
vikttur написал:
Где это?
В VBA, конечно. Application.Iteration....   .MaxIterations

 
Цитата
Ilya66 написал:
В России  вместо ответа на конкретно заданный вопрос (да, вот решение, или нет - это невозможно), пишут, что у тебя всё неправильно.
Зато не в России пишут всякий бред, мимо кассы, не уточняя о чем вопрос и ничего все жрут и читают. Хотите также?

Теперь по теме. Сколько поставите, столько итераций и будет, а вот будут ли изменения в расчетах - зависит от модели.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Зато не в России пишут всякий бред, не уточняя о чем вопрос...
А что Вам непонятно в вопросе:
Цитата
Ilya66 написал:
существует ли возможность вытащить сведения, сколько итераций затрачено на решение...
Что надо уточнить? Поскольку экселем кол.-во итераций на листе подсчитывается, я полагаю, что должен быть какой-то способ.
 
A1=A1+1 - вот вам подсчет итераций.
Цитата
Где это? === В VBA, конечно. Application.Iteration....
Не зря спрашивал.
1) где пример с Вашими попытками?
2) если используете VBA, то какой смысл возиться с итеративными вычислениями?
 
Цитата
Ilya66 написал: Что надо уточнить?
Понимание Ваше что вы делаете и для чего это нужно. Еще раз, если что-то непонятно- Итераций будет столько, сколько будет указано. Это
Цитата
vikttur написал: A1=A1+1 - вот вам подсчет итераций.
подтвердит мои слова. А сколько из них полезных - зависит от формул.
По вопросам из тем форума, личку не читаю.
 
Цитата
vikttur написал:
если используете VBA, то какой смысл возиться с итеративными вычислениями?
Прямой. Описать это в ВБА было бы на порядки сложнее.
Цитата
БМВ написал:
Еще раз, если что-то непонятно
Я для Вас продублировал конкретный вопрос, он непонятен?
Цитата
БМВ написал:
Итераций будет столько, сколько будет указано
Их будет столько, сколько понадобится для достижения заданной точности, или же максимально указанное кол-во, если точность не достигается.
Упрощаю вопрос: как определить, достигнуто или нет при расчёте листа максимально заданное количество итераций?
 
Цитата
Ilya66 написал:
Их будет столько, сколько понадобится для достижения заданной точности
Доказать сможете? Если вы не можете их посчитать, то откуда такая уверенность?
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Сколько поставите, столько итераций и будет
Миш, не обязательно. Зависит от логики (алгоритма) решения.
ИМХО, по данному вопросу всю воду, которую возможно, уже вылили. Далее - только с конкретным примером.
 
Цитата
Михаил Витальевич С. написал:
Миш, не обязательно. Зависит от логики (алгоритма) решения.
Тезка, тут вопрос в термине. Если говорить об итерации расчета формул, то одно , если о количестве перерасчетов Excel то другое. Ну не останавливает Excel перерасчет при достижении чего-то. Если меняется дельта по условию цель достигнута  - дельта 0 нет тогда 1  - это не означает что установленное число раз "эта проверка не будет выполнена". Будет в соседней X=X+1 в ней прибавится столько сколько максимально проставлено в настройках.  Таким образом это количество будет разбито на полезную часть и бесполезную, которая не приводит перерасчету модели.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Доказать сможете?
Доказывать то, что написано в мануале?
P.S. Проблема решена "в лоб" - сравнение времени расчётов при числе итераций = х(заданной для этого листа по умолчанию) и 3х. Неизящно, но работает. Всем спасибо.
 
любое уродское решение, дающее правильный результат, в моих глазах выглядит гораздо привлекательнее любого изящного решения считающего ерунду.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ilya66 написал:
Доказывать то, что написано в мануале?
Написано то одно но каждый читает то что ему хочется.
Iteration     is the repeated recalculation of a worksheet until a specific numeric condition is met. Excel cannot automatically calculate a formula that refers to the cell — either directly or indirectly — that contains the formula. This is called a circular reference. If a formula refers back to one of its own cells, you must determine how many times the formula should recalculate. Circular references can iterate indefinitely. However, you can control the maximum number of iterations and the amount of acceptable change.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Написано то одно но каждый читает то что ему хочется.
Читают все одно и то же, понимают по-разному. Вам осталось уяснить, для чего при задании максимального числа итераций задаётся ещё и относительная точность. А также понять, что фраза "циклические ссылки могут повторяться бесконечно" вовсе не означает, что циклические ссылки всегда будут повторяться бесконечно (т.е. до установленного максимального значения итераций). Наконец, почитать про циклические ссылки с примерами в инете.

Цитата
Ігор Гончаренко написал:
любое уродское решение, дающее правильный результат, в моих глазах выглядит гораздо привлекательнее любого изящного решения считающего ерунду.
:) Согласен.
 
Цитата
Ilya66 написал:
Вам осталось уяснить, для чего при задании максимального числа итераций задаётся ещё и относительная точность.
Мне то это как раз понятно, ибо я остановлю пересчет при достижении результата, так как знаю, что не всегда 2*2=4, и вот именно для этого и точность введена, чтоб тот кто не знает не удивлялся.
Precision     is a measure of the degree of accuracy for a calculation. Excel stores and calculates with 15 significant digits of precision. However, you can change the precision of calculations so that Excel uses the displayed value instead of the stored value when it recalculates formulas.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
так как знаю, что не всегда 2*2=4
В арифметике 2*2 = 4 всегда. А за то, что в экселе железные правила арифметики вдруг стали относительны, спасибо создателям сей программы. :D
 
Цитата
Ilya66 написал:
в экселе железные правила арифметики вдруг стали относительны,
не в Excele, а в компьютере
и если вы научились скидывать компьютер со стола на орехи и таким образом их лущить, то это ваше право использовать свой компьютер именно так, хотя можно было почитать инструкцию и использовать его по назначению
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
не в Excele, а в компьютере
Пользователю безразлично, в экселе или компьютере не соблюдаются правила арифметики. И где (в какой) инструкции на компьютер написано, что сей чудный аппарат не может без "хвостов" в дцатых разрядах произвести арифметические действия с целыми числами, т.е. то, что умеет любой первоклассник?

Цитата
Ігор Гончаренко написал:
использовать его по назначению
Калькулятор в том же компьютере таких вольностей себе не позволяет. Так что дело как обычно, в кривых ручках программистов.
 
нет дело в безграмотных пользователях не желающих изучать базовые принципы работы устройства за эксплуатацию которого они взялись
видите-ли уважаемый ошибка описанная в документации является не ошибкой, а особенностью эксплуатации системы в определенных условиях

компьютер придумали не программисты, а бестолковые (с вашей точки зрения) инженеры, откажитесь от их дурацкого и бесполезного изобретения и считайте все на счетах или на калькуляторе
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ilya66 написал: И где (в какой) инструкции на компьютер написано...
Стандарт такой, параграф 9.
Компьютер использует вычисления с плавающим разделителем, чему еще не научили первокласника )

О вопросе темы. Я Вам давал подсказку, Вы ее не поняли или не захотели подумать, хотя видели и даже цитировали предложение
Цитата
Отдельная ячейка с подсчетом и проверка на превышение допустимой границы
A1=A1+1. Но! Не просто так, а с проверкой результата (не десятков пзависимостей, а конкретного, нужного результата!) . Если нужный результат достигнуть, остановить счет в ячейке. И пусть итерации и дальше молотятт - в ячейке будет нужное значение.

Цитата
vikttur написал: где пример с Вашими попытками?
Об этом не только я писал. Игнор... Похоже, Вы не за советами зашли, а только высказать свое (естественно, самое правильное) мнение...
 
Цитата
Ilya66 написал:
не может без "хвостов" в дцатых разрядах произвести арифметические действия с целыми числами, т.е. то, что умеет любой первоклассник?
Интересный у вас первоклассник, однако. Если он 2 поделит на 3 и получит на калькуляторе только 15 шестёрок после запятой (в лучшем случае, а некоторые так в последнем разряде и 7! покажут - караул!) - то это нормально? Ведь должно же быть бесконечное их число... :)  Непорядок, выкиньте неправильный калькулятор
Изменено: Андрей VG - 26.07.2020 00:42:55
 
Цитата
vikttur написал:
Стандарт такой , параграф 9.
Я же спрашивал про инструкцию для чайника-пользователя, который всё же знает, что 2 + 3 - 1 = 4, а не какие-нибудь 4,000000000000000000000000012. Дело не столько в абсолютной ошибке, а в том, что при сравнении арифметически одинаковых чисел, с точки зрения компьютера они оказываются не равны. И приходится пихать Round там, где это по обычной, нормальной математике не нужно.
Цитата: Язык программирования и программист не могут изменить эту ситуацию...
Язык - да, а программист не может, или не хочет? Если пользователь вводит целые числа, или числа с точностью до N знака, неужто программист не в состоянии сделать, чтобы программа это отслеживала? Не верю.

Цитата
vikttur написал:
A1=A1+1. Но! Не просто так, а с проверкой результата (не десятков пзависимостей, а конкретного, нужного результата!)
:) Нет там НУЖНОГО результата, это не подгон решения под правильный ответ. Будь известен результат, зачем нужны какие-то вычисления??????

Цитата
Андрей VG написал:
Интересный у вас первоклассник, однако. Если он 2 поделит на 3 и получит на калькуляторе только 15 шестёрок после запятой (в лучшем случае, а некоторые так в последнем разряде и 7! покажут - караул!) - то это нормально? Непорядок, выкиньте неправильный калькулятор
1 А потом умножит эти 0,6666666666666667 на 3 и получит 2. И при сложении, вычитании, умножении и делении целых чисел получает-таки целые числа. На калькуляторе в компьютере. Удивительно.
2 Речь зашла не о бесконечных десятичных дробях, а о 2х2. Думаю, сойдёмся на том, что результат = 4, независимо от того, что там думает компьютер. :)
3 Пусть не первоклассник, (в каком там классе дроби проходят?), запишет абсолютно точный результат - 2/3. Компьютер так не умеет? Так пускай его научат...программисты, ваш выход.

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

Цитата
Ігор Гончаренко написал:
компьютер придумали не программисты, а бестолковые (с вашей точки зрения) инженеры
:) Не валите с больной головы на здоровую, как раз к инженерам претензий нет. Практика показывает, что именно программисты - самое слабое звено.
 
Увы...Самое слабое звено  - пользователи. Особенно такие, которе не хотят слышать разумные доводы.
 
Ilya66,  Есть у Бредбери рассказ, вот там два персонажа встретились , но оказались в разных измерениях, и вроде пообщались но пожать руку не смогли. Я о том что вы вроде говорите правильные вещи но для своего измерения. Напомню, есть простые  дроби, а есть десятичные и запись 2/3 и 0.(6)  это запись, которая по идее означает равенство. Также любой инженер (простите не любой)  скажет что не нужно показывать результат  с точностью до 15го знака если прибор или данные имеют точность до второго. Да разница в числе полученном разными вычислениями может присутствовать при вычислении с плавающей точкой. Если не устраивает, то разработайте и предложите свой стандарт, который будет лишен этого недостатка, а пока его нет, то "слабое звено" дало вам настройку "точность" для итераций.
Цитата
Ilya66 написал:
Нет там НУЖНОГО результата
вы читаете не все , следом было
Цитата
vikttur написал:
Если нужный результат достигнуть, остановить счет в ячейке. И пусть итерации и дальше молотятт - в ячейке будет нужное значение.
не знаете как? Так напишите. Сделайте пример, который будет понятен Вам. а пока ответ на вопрос темы - итераций на листе будет столько, сколько указано в настройках приложения. Ни больше, ни меньше. То что не все будут приводить к изменениям значений отдельных ячеек -это другой вопрос.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
но для своего измерения
Вот, вот. ТС не хочет усвоить того простого факта, что Excel не использует в вычислениях простых чисел, только числа с плавающей запятой (ссылка на стандарт есть). Совсем. Только в VBA есть возможность для чисел задавать типы, в том числе целочисленные. Если нужно работать с чем-то, где есть типизация, то лучше тогда использовать базы данных. Но это уже совсем другая история.
 
Цитата
Ilya66 написал:
существует ли возможность вытащить сведения, сколько итераций затрачено на решение
Тестовый пример для подсчёта итераций при достижении (или недостижении) требуемой точности.
*Файл перезалил. Считал с 1, а не с 0.
**Если точность не достигнута из-за ограничения количества итераций, по F9 можно продолжить вычисления.
***Сделал УФ при достижении точности. Файл перезалил.
Изменено: Светлый - 01.08.2020 15:54:26
 
Цитата
БМВ написал:
Я о том что вы вроде говорите правильные вещи но для своего измерения.
То же самое могу сказать о Вас.

Цитата
БМВ написал:
Также любой инженер (простите не любой)  скажет что не нужно показывать результат  с точностью до 15го знака если прибор или данные имеют точность до второго.
Любой даже не инженер согласится, что если для вычислений вводятся числа с точностью, скажем, до 5-го знака, то "шум" в каком-нибудь шестнадцатом разряде, образующийся при вычислениях есть мусор, и должен по умолчанию отбрасываться. Просто по обычной логике, коль скоро стандарт вычислений не позволяет избавиться от этой погрешности.

Цитата
БМВ написал:
а пока ответ на вопрос темы - итераций на листе будет столько, сколько указано в настройках приложения.
Второй раз - ответ неверный.

Цитата
Андрей VG написал:
ТС не хочет усвоить того простого факта, что Excel не использует в вычислениях простых чисел
Да усвоил, усвоил. Мне непонятно почему, зная этот врождённый дефект, создатели счётных программ не озаботились о его устранении, переложив проблему на плечи пользователя. Почему я и "гоню" на программистов.

Цитата
Светлый написал:
Тестовый пример для подсчёта итераций при достижении (или недостижении) требуемой точности.
Спасибо. В-общем, я решил задачу другим способом. Гораздо проще написать десяток строк в VBA, чем городить подобную проверку на каждую итерационную цепочку.

P.S. ИМХО, тема превратилась в перепалку знатоков против чайника (меня). Да я и не обижаюсь, но больше писать нечего. Ещё раз всем спасибо.
 
Цитата
БМВ: итераций на листе будет столько, сколько указано в настройках приложения.
Цитата
Ilya66: ответ неверный.
Надо, наверное, рассказать, показать и выяснить, где правда. Тема ведь останется, кому-то еще можете пользу принести.
Страницы: 1 2 След.
Наверх