Неясности в вычислениях с использованием матрицы

Неясности в вычислениях с использованием матрицы - Messages

#1 Posted: 9/2/2014 3:49:51 AM
Анатолий

Анатолий

0 likes in 9 posts.

Group: User

Работаю в версии 0.97 (5346), Win XP SP3.
Смотрел в версии 0.95 и получил тоже самое.

См. прикрепленный файл
SMath.png
#2 Posted: 9/2/2014 5:08:57 AM
Serg

Serg

7 likes in 105 posts.

Group: Moderator

А зачем переопределяете уже определенную переменную?
Удалите и все будет верно.
Ученье свет!
#3 Posted: 9/2/2014 5:41:44 AM
Анатолий

Анатолий

0 likes in 9 posts.

Group: User

Спасибо за ответ, но:
1. В Руководстве не нашел ничего о недопустимости переопределения переменных.
2. См. прилагаемый файл

т.е. ответ неверный.
SMath.png
#4 Posted: 9/2/2014 8:31:38 AM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

Когда определяется переменная, её значение зависит от того, известны ли программе имена, входящие в её определение.
Если имя, входящее в определение, уже задано, подставляется его значение. Иначе остаётся само имя.

Например, в Вашем последнем примере, слева, R определено до того, как заданы i и j. Поскольку они были неизвестны, R определилась как

[MATH lang=eng]el(VV,i)+el(VV,j)[/MATH],

то есть как этакая замаскированная функция. Затем, определяя i и j и получая значение R, Вы фактически спрашиваете: "Чему равно выражение [MATH lang=eng]el(VV,i)+el(VV,j)[/MATH] при текущем значении i и j?"

А на момент, когда Вы определяете Z, i равно трём, а j - двум. Z вычисляется в момент определения и имеет значение

[MATH lang=eng]el(VV,3)+el(VV,2)≡55[/MATH],

и затем, переопределяя i и j, Вы спрашиваете, чему равно [MATH lang=eng]el(VV,3)+el(VV,2)[/MATH] при текущих i и j.

Это можно увидеть во всплывающих подсказках, появляющихся при наведении курсора на определение.
Wrote

... т.е. ответ неверный.


Проявляйте уважение к тем, кто берёт на себя труд отвечать на Ваши вопросы. В данном случае не ответ неверный, а Ваши знания недостаточны. Вам дали не полный ответ, а направление поиска. Следовательно, неверен Ваш вывод.
С уважением, Михаил Каганский
#5 Posted: 9/2/2014 9:25:21 AM
Анатолий

Анатолий

0 likes in 9 posts.

Group: User

Приношу извинения за некорректность.
Спасибо за разъяснения.
Но чуднО. И оказалось, что матрица здесь не причем: речь идет о логике работы программы.

Где об этом нюансе в Руководстве почитать?

И как объяснить это? (см.приложенное).
Это - нонсенс и караул!
Как я объясню моему инженеру, к-рый пользовался Excel'ем, что он что-то неверно записал?
Как быть? Как отключить это запоминание?
Image 1.png
#6 Posted: 9/3/2014 1:16:18 AM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

Объяснить инженеру, "который пользовался Excel'ем", что это - не Excel - мне кажется, высшее техническое образование инженера должно давать ему возможность осознать этот факт. Если человек умеет выполнять свою работу только при условии, что все кнопочки и лампочки на инструменте расположены строго в определённом порядке - его квалификация нуждается в переоценке... И для него - повторюсь - есть всплывающие подсказки, где он может сразу увидеть, как именно программа восприняла его определение.

То, что Вы называете "нонсенсом" - как раз правильно! Именно так и должно быть, это логично, разумно и естественно. Переменная нужна для того, чтобы хранить ЧИСЛО до того момента, как туда не запишут другое ЧИСЛО. А вот наоборот (хранить не число, а выражение) - это особенность, которая может сбивать с толку, хотя и довольно интересная, если ей грамотно пользоваться.

Поясню на этом Вашем примере ещё раз.

В момент первого определения Z все входящие в определение переменные уже определены. Z может быть вычислена в этот момент полностью. Программа её успешно и вычисляет. Z получает окончательное значение, дальнейшие Ваши фокусы с другими переменными больше на неё не влияют.
То же самое и при переопределении.

То, чего, похоже, хотите Вы - т.е. чтобы все переменные запоминали не численное значение выражения, получающееся в месте определения, а только формулу, и пересчитывались каждый раз в том месте, где используются - сделало бы использование программы невозможным. Вы не смогли бы полагаться ни на одно значение, полученное с помощью любого выражения сложнее "X:=5". Вам бы приходилось в каждом месте, где Вы хотите получить результат, перепроверить все значения всех переменных, входящих в определение искомой величины, и все определения всех входящих туда переменных по цепочке: а не переопределили ли Вы где-то какую-нибудь величину случайно?

Например, рассмотрим вариант, когда Вы хотите запомнить значение некоего (i-го) элемента вектора V. Вы пишете:

[MATH lang=eng]A:el(V,i)[/MATH]

и со спокойной совестью надеетесь, что A хранит то, что там было. Затем Вы что-то делаете с вектором, и хотите сравнить текущее значение этого элемента с сохранённым. Как Вы думаете, Вам это удастся, если в A будет лежать не число, а формула (вида "найди текущее значение переменной i; теперь загляни в вектор V и найди там элемент с номером, равным вычисленному значению i" )?

А если нужно такое выражение-формула, то это называется функцией. Определите свои функции a(b,c):=b+c и пользуйтесь потом явно a(11,22)=33; a(22,44)=66; ... А если Вы хотите упрощённой записи (то есть без синтаксиса функции), то для Вас есть специальная возможность - определить выражение заранее, до определения входящих в него элементов. Но пользоваться этой возможностью нужно осознанно, понимая, что именно делаешь. Что под видом "переменной" на самом деле имеешь дело с замаскированной функцией.

Так что для не очень сообразительного инженера можно просто написать инструкцию: в зависимости от того, что Вам импонирует, либо "определять все входящие в выражение величины строго ДО того, как они будут использованы в формуле", либо (если хочется острых ощущений при отлавливании неочевидных ошибок) "определять все входящие в выражение величины строго ПОСЛЕ того, как они будут использованы в формуле".
С уважением, Михаил Каганский
#7 Posted: 9/3/2014 3:25:31 AM
Анатолий

Анатолий

0 likes in 9 posts.

Group: User

Спасибо за столь развернутый ответ.
Из Вашего сообщения я понял, что противоядия нет. Ф-ции не слишком понятны для обывателя, да и обращение к ф-ции не очень читаемо.
Как-то исправило бы это положение, если бы ф-цию можно было вызывать типа:
f(t:=23, w:=84, Q:=B, ...)

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

Хотел бы сказать большое спасибо всем, кто работал и работает над этой программой. Молодцы!

Это замечательный программый продукт (ничуть не хуже MathCAD, а может быть и лучше) с хорошей поддержкой, отличный сайт и живой форум.
Значит всё можем! И это радует.

Но, наверное, реклама слабовата: в учебных заведениях (и не только) используют краденый MathCAD, а о SMath не слыхали вовсе.
Расчет-Экc-Бульдозера.doc (89 KiB) downloaded 37 time(s).
#8 Posted: 9/3/2014 3:54:50 AM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

Wrote

Как-то исправило бы это положение, если бы ф-цию можно было вызывать типа:
f(t:=23, w:=84, Q:=B, ...)



А вы попробуйте Это как раз возможно.

Wrote

Прилагаю расчет в ходе работы над к-рым эта проблема проявилась: может быть Вам будет любопытно.



На самом деле было бы интересно увидеть файл .sm с этим расчётом, с указанием места, где Вам хотелось бы видеть что-то по-другому. Может быть, такая возможность есть, только другим путём...
С уважением, Михаил Каганский
#9 Posted: 9/3/2014 5:01:10 AM
Анатолий

Анатолий

0 likes in 9 posts.

Group: User

Михаил, сообщаю следующее:

1=========================================
Цитата из Руководства пользователя,глава 8, раздел 8.1, подраздел "Проверка рабочего листа в SMath Studio":
----- начало цитаты -----------
SMath Studio просматривает рабочий лист также, как вы читаете его: слева направо и
от начала до конца. Это означает что переменная или функция, определенная посредством
команды “: =”, будет действовать везде ниже и правее от места определения.

...
(после рисунка 8.2)
Замечание: Вы можете определить переменную не раз в том же самом рабочем листе. SMath Studio просто использует первое определение для всех выражений ниже первого определения и выше второго. Для выражений ниже второго определения и выше третьего, SMath Studio использует второе определение, и так далее.
------- конец цитаты -----------
Это к предмету всего предыдущего разговора. В чем я не прав?

2=================================================
Пробую вызов ф-ции с именованными параметрами (скажу, что в Руководстве я этого не нашел)
F(A,С):=A+С
F(1,2)=3
F(A:=1,С:=2) <= добавить символ "=" не удается

3=================================================
sm-файл расчета пришлю обязательно, если получится его сделать.

4=================================================
Неудачно назвал тему. Хотел бы "Неясности с областью действия переменных"
Как это сделать - не знаю. Может быть подскажете?

С уважением, Анатолий.
#10 Posted: 9/3/2014 7:54:53 AM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

По первому пункту - при чём тут неправота? Переопределяйте любую переменную, сколько нужно. На то она и переменная. Кто утверждал обратное? Просто каждое определение следует заданным в программе правилам. Их Вам объяснили. Их надо учитывать. Если следующее определение производится в других условиях, результат у него другой. Вот и всё.

Функция вида f(a:=1,b:=2)=... у меня прекрасно набирается. Тут нужно разбираться, может быть, что-то с настройками?
С уважением, Михаил Каганский
#11 Posted: 9/3/2014 8:11:44 AM
Медведев Виктор

Медведев Виктор

13 likes in 157 posts.

Group: User

Wrote


Функция вида f(a:=1,b:=2)=... у меня прекрасно набирается. Тут нужно разбираться, может быть, что-то с настройками?



Возможно, проблема в типе разделителя? (точка или точка с запятой, в зависимости от версии и настроек)
#12 Posted: 9/3/2014 9:10:59 AM
Анатолий

Анатолий

0 likes in 9 posts.

Group: User

1. По некоторым обстоятельствам предпочитаю portable версию программы.
Но имею 0.95 portable, у 0.97 ее почему-то нет.
0.97 работает с именованными параметрами у ф-ций нормально, 0.95 - глючит.
Спасибо большое за подсказку и подталкивание.

2. Прилагаю sm-файл, к-рый накропал по ранее приложенной методике.
Обратите внимание: в тексте формирование конечной матрицы (для меня это просто таблица) описано в 2-х областях.
Результат получен, но как-то коряво. Будем полировать: для пользователя большое значение имеет оформление и легкость восприятия. Это сложно.

3. Кстати, выяснился один глюк программы (0.95, в 0.97 еще не проверял):
рамкой выделяю кусок текста, содержащий Область, и пытаюсь его передвинуть.
Все двигается, кроме Области. Крайне неприятно.
П.С. по п.3: 0.97 тоже глючит, но несколько иначе. Трудно объяснить.
Выбросы от бульдозера.sm (43 KiB) downloaded 37 time(s).
#13 Posted: 9/3/2014 10:54:14 PM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

Wrote

1. По некоторым обстоятельствам предпочитаю portable версию программы.
Но имею 0.95 portable, у 0.97 ее почему-то нет.


Посмотрите https://smath.com/wiki/SMath%20with%20Plugins.ashx
С уважением, Михаил Каганский
#14 Posted: 9/4/2014 1:20:57 AM
Анатолий

Анатолий

0 likes in 9 posts.

Group: User

Спасибо. Но:
1. Это не совсем portable: требуется установка .NET
2. При запуске говорит о неподключенных плагинах. С этим не разбирался, но тоже нехорошо.
  • New Posts New Posts
  • No New Posts No New Posts