| 
| 
 | Вопрос # 5 348/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Может кто ответит конечно...
 
 Имею строку 'y = ( x^(3+x) - sin(x) - 5)'
 Как можно в ней (и других, подобных), ПРОГРАММНО выразить x?
 
|  |   Вопрос задал: Gooddy (статус: 3-ий класс)Вопрос отправлен: 31 мая 2011, 03:56
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 19; последнее сообщение — 6 июня 2011, 10:28; участников в обсуждении: 7. 
|   | min@y™ (статус: Доктор наук), 31 мая 2011, 08:12 [#2]: Цитата (Мережников Андрей): что значит  А то и значит. На входе программы, например, строка 'y = x2', а на выходе должно быть 'x = ±y1/2'.
 
 2Аффтар: кто ж тебе такое задание-то выдал? Может быть это задание было некорректно сформулировано и/или не так понято?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 31 мая 2011, 10:44 [#3]:Опять символьное решение уравнений... Боян! виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | IlluminatI (статус: 2-ой класс), 31 мая 2011, 16:59 [#4]:bugmenot, почему боян? Маткад и аналоги справляются же, значит, это реально. Только сложно. Крайне сложно   |  
|   | Вадим К (статус: Академик), 31 мая 2011, 17:19 [#5]:а может человеку задали решить это в маткаде? Хотя в большинстве случаев эту задачу можно решить, если интересен не "символьный переворот", а числовой.
 Для выражений пишем парсер (это достаточно классическая задача).
 потом для строим таблицу соответствий x - y, то есть, фактически делаем табуляцию функции. (это вообще классическая задача).
 теперь, когда нам по значению y нужно найти x, пробегам по таблице, находим диапазоны для x. а дальше методом деления пополам уточняем значения до нужной точности.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 31 мая 2011, 17:47 [#6]: Цитата (IlluminatI): Маткад и аналоги справляются же, значит, это реально.  Маткад с ЭТИМ не справляется! Он решает уравнения только численными методами!
 
 Цитата (Вадим К): Хотя в большинстве случаев эту задачу можно решить, если интересен не "символьный переворот", а числовой. Дык, как я понял, нужно именно преобразование "y = f(x)" в "х = g(y)". По крайне мере, аффтар так сформулировал задачу. И если эта формулировка является правильной, то ответ тут один: ЭТО UNREAL.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Gooddy (статус: 3-ий класс), 1 июня 2011, 03:00 [#7]:-_- УСЕМ. 
 Короче, чтобы было проще.
 
 Рисую график функции. Для подсчёта значений есть 3 варианта:
 
 1. Все уравнения записываются в виде y=f(x), т.е. например
 y = x^2+x+1, далее все х заменяются циферками, считается значение y для всех х и по полученным точкам строится график.
 Проблемы: уравнение должно быть выражено через переменную, при быстром движении графика вверх или вниз количество точек существенно падает и он становится "ломанным", нельзя писать многие фичечки: например если выразить через y уравнение  окружности, то начертится только верхняя часть.
 
 2. Все уравнения записываются в любом виде u(y)=f(x), например sin(y)^2 = 1.2^x
 далее все x и y заменяются (проверяются все комбинации). Так я тоже делал и это ещё хуже!
 Во первых, может быть банальное несовпадение в 0,000001 (в левой части например получится больше на одну мильонную чем в правой), но это легко исправить (хотя тогда может начертить и лишнего!).
 Во вторых, этот метод очень ресурсоёмкий. Для проверки 500х500 значений нужно подставить, посчитать и решить нужно ли рисовать дохрена значений!
 
 Ну и последний метод, который собственно всё решает но очень сложен в реализации:
 
 3. Имеем уравнение вида sin(x) = y^2.
 Шаг 1. Выражаем через y - y = sin(x)^1/2
 Шаг 2. Узнаём точки.
 Шаг 3. Выражаем через х - х = arcsin(y^2)
 Шаг 4. Узнаём точки.
 Шаг 5. Чертим график.
 
 Этот алгоритм в 2 раза медленнее (как минимум) чем первый но в разы быстрее чем второй, более того у него нет недостатков!
 
 min@y меня понял сразу, спасибо.
 
 Жаль конечно что нельзя.
 А кстати, есть идеи как график нормально вывести то?
 Если 3-ий метод вообще не катит, может есть ещё какой простой?
 Чисти код! Чисти код! Чисти код! |  
|   | Мережников Андрей (статус: Абитуриент), 1 июня 2011, 05:45 [#8]: Цитата (Gooddy): при быстром движении графика вверх или вниз График по экрану бегает, когда его строят?
 |  
|   | min@y™ (статус: Доктор наук), 1 июня 2011, 08:17 [#9]: Цитата (Gooddy): при быстром движении графика вверх или вниз количество точек существенно падает и он становится "ломанным" Так и быть должно, это нормально. И от этого можно избавиться, динамически снижая шаг аргумента при большом приращении функции.
 
 Цитата (Gooddy): например если выразить через y уравнение окружности, то начертится только верхняя часть. Это смотря как выражать! Пусть уравнение такое:
 x2 + y2 = R2
 Тогда
 y = ±(R2 - x2)1/2
 Обрати внимание на знак "±".
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Gooddy (статус: 3-ий класс), 4 июня 2011, 01:59 [#10]:ага, функция f(x) вернёт 2 значения? математики негодуют. Можно конечно говорить что это не функция а уравнение (собственно так и есть), тогда всё ок)
 Чисти код! Чисти код! Чисти код! |  
|   | min@y™ (статус: Доктор наук), 4 июня 2011, 12:35 [#11]: Цитата (Gooddy): ага, функция f(x) вернёт 2 значения? математики негодуют. Именно 2 значения. И математики не негодуют, а курят в коридоре и кромко смеются.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Егор (статус: 10-ый класс), 4 июня 2011, 23:45 [#12]: Цитата (min@y™): Маткад с ЭТИМ не справляется! Он решает уравнения только численными методами! скрин выложить? маткад решит эту задачку безо всяких численных методов.
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | min@y™ (статус: Доктор наук), 5 июня 2011, 10:57 [#13]: Цитата (Егор): скрин выложить? маткад решит эту задачку безо всяких численных методов.  Давай, жду с нетерпением!
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 5 июня 2011, 13:04 [#14]: Цитата (IlluminatI): bugmenot, почему боян? Маткад и аналоги справляются же, значит, это реально. Только сложно. Крайне сложнИ это тоже уже было. https://expert.delphi-int.ru/question/5170/
 и  еще десяток подобных обсуждений
 и выводы всегда одни и те же.
 Боян Бояныч!
 
 Цитата (min@y™): Маткад с ЭТИМ не справляется! Он решает уравнения только численными методами!Вздор, уже много лет дела обстоят не так. виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | min@y™ (статус: Доктор наук), 5 июня 2011, 13:25 [#15]: Цитата (bugmenot): Вздор, уже много лет дела обстоят не так.  Доказательства - В СТУДИЮ!!! Хочу лично в этом убедиться!
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 5 июня 2011, 18:30 [#16]:Если троим участникам, уже высказавшимся по теме, веры на слово нет - наверное будет надежнее скачать триал и убедиться самостоятельно. виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | Егор (статус: 10-ый класс), 5 июня 2011, 19:59 [#17]:конкретно это уравнение не имеет символьного решения. а вообще, вот тебе скриншот с символьным решением, накопанный в недрах сети: 
  и версия здесь совсем уж неприлично старая - ещё под винду 3.х
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | min@y™ (статус: Доктор наук), 6 июня 2011, 08:15 [#18]: Цитата (bugmenot): наверное будет надежнее скачать триал и убедиться самостоятельно Мне не нужен триал, у меня есть лицензионный маткад.
 
 Цитата (Егор): конкретно это уравнение не имеет символьного решения. Почему?
 
 Цитата (Егор): а вообще, вот тебе скриншот с символьным решением, накопанный в недрах сети Всё равно не верю! Фотожаба! Дайте мне mcd-файл с выражением из вопроса.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 6 июня 2011, 10:28 [#19]:Маткад умеет решать символьные выражения. Сам когда то этим пользовался. Как минимум точно умеет интегрировать и дифференцировать. Указанный выше текст можно набрать в маткаде - должен отработать
   Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |