Форум программистов, компьютерный форум, киберфорум
Wolfram Mathematica
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
3 / 3 / 0
Регистрация: 14.06.2012
Сообщений: 109

Два способа решения - два разных ответа

21.04.2017, 21:30. Показов 1518. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
почему-то два разных способа решения задачи приводят к двум разным ответам.

Задача такова:
Есть уравнение

Code
1
2
3
4
5
6
 
    j - Sqrt[q^2 + qp^2 - 
       2 q qp Cos[\[Theta]]] - \[Sqrt](qp^2 + 
         1/2 (16 m5^2 + ma^2 + mp^2 - 
            Sqrt[(-(16 m5^2) - ma^2 - mp^2)^2 - 
             4 (ma^2 mp^2 - 16 m5^2 qp^2)])) == 0
где:
Code
1
2
3
4
5
6
 
 \[Theta] = Pi/6; ma = 980; mp = 139;
     j = \[Sqrt](q^2 + 
        1/2 (16 m5^2 + ma^2 + mp^2 + 
           Sqrt[(-(16 m5^2) - ma^2 - mp^2)^2 - 
            4 (ma^2 mp^2 - 16 m5^2 q^2)]))
Нужно найти qp.
Все параметры реальны и положительны.

Первый способ решения такой:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 eqn = j - 
        Sqrt[q^2 + qp^2 - 
          2 q qp Cos[\[Theta]]] - \[Sqrt](qp^2 + 
           1/2 (16 m5^2 + ma^2 + mp^2 - 
              Sqrt[(-(16 m5^2) - ma^2 - mp^2)^2 - 
                4 (ma^2 mp^2 - 16 m5^2 qp^2)])) == 0;
    With[{gensol = Solve[eqn , qp]}, 
      Block[{\[Theta] = Pi/6, ma = 980, mp = 139, 
        j},(*subs vals when gensol is evaluated*)
       j = \[Sqrt](q^2 + 
           1/2 (16 m5^2 + ma^2 + mp^2 + 
              Sqrt[(-(16 m5^2) - ma^2 - mp^2)^2 - 
                4 (ma^2 mp^2 - 16 m5^2 q^2)]));
       sols = gensol]];
    qpC13 = Compile[{{q, _Complex}, {m5, _Complex}}, 
       Evaluate[qp /. sols[[3]]], 
       RuntimeOptions -> "EvaluateSymbolically" -> False] ;
       Plot3D[Re@qpC13[q, m5], {q, 0, 10000}, {m5, 0, 2000}, 
     AxesLabel -> Automatic]
Картинка которая получается:
[del]

Второй способ немного иной:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
eqn = j - 
    Sqrt[q^2 + qp^2 - 
      q qp Cos[\[Theta]]] - \[Sqrt](qp^2 + 
       1/2 (16 m5^2 + ma^2 + mp^2 - 
          Sqrt[(-(16 m5^2) - ma^2 - mp^2)^2 - 
            4 (ma^2 mp^2 - 16 m5^2 qp^2)])) == 0;
 
With[{gensol = Solve[eqn, qp]}, 
  Block[{\[Theta] = Pi/6, ma = 980, mp = 139, j}, 
   j = \[Sqrt](q^2 + 
       1/2 (16 m5^2 + ma^2 + mp^2 + 
          Sqrt[(-(16 m5^2) - ma^2 - mp^2)^2 - 
            4 (ma^2 mp^2 - 16 m5^2 q^2)]));
   sols = gensol]];
opt = Experimental`OptimizeExpression[qp /. sols[[3]]];
Block[{\[Theta] = Pi/6, f}, 
 f[q0_, m50_] := 
  Block[{q = SetPrecision[q0, 40], m5 = SetPrecision[m50, 40], qp}, 
   qp = First@opt;
   Re@qp /; Im@qp == 0];
 Plot3D[f[q, m5], {q, 0, 10000}, {m5, 0, 1000}, MaxRecursion -> 3, 
  AxesLabel -> Automatic]]
Картинка получается другая:
[del]

Не подскажите, почему так происходит? Уже лысину прочесал - не пойму в чём дело.
Миниатюры
Два способа решения - два разных ответа   Два способа решения - два разных ответа  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.04.2017, 21:30
Ответы с готовыми решениями:

Два способа решения задачи
Задача. Решите двумя способами следующую задачу: а.За 16 лопат уплатили 9 руб.60 коп.Сколько нужно уплатить за 48 таких лопат. 1...

Написать еще два способа решения
int c = 0, k; Console.WriteLine("Введите число"); k = Int32.Parse(Console.ReadLine()); while (k...

Два ответа в разных колонках одного запроса
Прошу помочь с SQL запросом. Исходная таблица: Numx|IFx|Summx 1|True|10 1|True|20 2|False|15 2|True|40 3|False|50

7
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
21.04.2017, 22:43
Цитата Сообщение от illuminates Посмотреть сообщение
почему-то два разных способа решения задачи приводят к двум разным ответам.
Непосредственно решения qp /. sols[[3]] получаются одинаковыми. Отличаются только картинки и предварительно составленные функции.

На самом деле, даже функции отличаются не сильно. Если Вы уберёте /; Im@qp == 0 во втором способе или наоборот добавите это условие в первом способе, картинки и функции совпадут.
1
3 / 3 / 0
Регистрация: 14.06.2012
Сообщений: 109
21.04.2017, 23:42  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Если Вы уберёте /; Im@qp == 0 во втором способе или наоборот добавите это условие в первом способе, картинки и функции совпадут.
Меня это обстоятельство очень озадачивает, ведь я все равно беру лишь реальную часть. Есть ли разница писать при этом Im@qp == 0 или нет?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
21.04.2017, 23:52
Цитата Сообщение от illuminates Посмотреть сообщение
Есть ли разница писать при этом Im@qp == 0 или нет?
Как видите на графике, есть.

/; — оператор, который запрещает применять правило, если не выполняется условие справа. По моему мнению, легче понять работу этого оператора, поставив его слева от := или = (и, разумеется, открыв спавку ref/Condition), например,
Haskell
1
2
3
f[x_ /; Im[x] == 0] = x;
f[10]
f[10 + I]
просто бывает часто так, что для рассчёта условия нужно выполнить некоторые действия, которые также нужно сделать для рассчёта правой части := или =, как в Вашем случае:
Haskell
1
2
3
4
f[q0_, m50_] /; Block[{q = SetPrecision[q0, 40], m5 = SetPrecision[m50, 40]}, Im@First@opt == 0] := 
  Block[{q = SetPrecision[q0, 40], m5 = SetPrecision[m50, 40], qp}, 
   qp = First@opt;
   Re@qp];
И чтоб не повторять код и не нагружать систему ненужной работой, WM предлагает возможность использовать /; в левой части :=/= и под Module/Block/With.

Если условие ложно, функция не вычисляется. Plot интерпретирует невычисленную функцию как отсутствие значения, поэтому соответствующая часть на графике попросту отсутствует.

Далее вопрос к Вашим нуждам: как обрабатывать ту часть области определения функции, где qp имеет мнимую составляющую? Вовсе отбросить эти точки или же оставить точки, но отбросить мнимую часть?
1
3 / 3 / 0
Регистрация: 14.06.2012
Сообщений: 109
22.04.2017, 23:25  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Вовсе отбросить эти точки или же оставить точки, но отбросить мнимую часть?
То есть правильно я Вас понимаю, во втором варианте отбрасывается комплексные решения полностью, в то время как в первом варианте лишь мнимые части решений?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
22.04.2017, 23:37
Лучший ответ Сообщение было отмечено illuminates как решение

Решение

Вроде того. На всякий случай сформулирую это формально:

Есть уравнение с параметром (у нас параметры q и m5). Оно может быть решено в комплексных числах, а может — в действительных.
В комплексных числах решается при любых параметрах. Получаем комплексную функцию qp от действительных параметров. Строим график действительной части этой функции. Можем построить и что-то другое.
В действительных числах уравнение решается не при любых параметрах. Поэтому получаем частичную вещественную функцию qp. Строим её график.
Очевидно, что если взять комплексную функцию и сузить её до той области, где мнимая часть равна нулю, а затем взять композицию с Re, получим в точности то же, что во втором случае.
1
3 / 3 / 0
Регистрация: 14.06.2012
Сообщений: 109
26.04.2017, 21:11  [ТС]
Спасибо, Вы очень мне помогли. Единственно что хотелось ещё узнать, это возможно ли во втором способе сложить два решения (скажем sols[[3]]+sols[[4]]) и построить их совместный график.
Если писать
Code
1
Experimental`OptimizeExpression[qp /. sols[[3]]+sols[[4]]];
то ничего не выходит.
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
26.04.2017, 22:42
Code
1
(qp /. sol[[3]]) + (qp /. sol[[4]])
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2017, 22:42
Помогаю со студенческими работами здесь

Что будет, если два разных потока попытаются отправить одновременно одному клиенту два разных пакета
Здравствуйте! Имеется вот такой незамысловатый метод отправки пакетов на сокет клиента public static void...

Программа спрашивает у пользователя чему равны два выражения 12+3 и 19-9 и не выходит пока пользователь не даст ДВА ВЕРНЫХ ОТВЕТА ПОДРЯД. Если пользов
Программа спрашивает у пользователя чему равны два выражения 12+3 и 19-9 и не выходит пока пользователь не даст ДВА ВЕРНЫХ ОТВЕТА ПОДРЯД....

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

Два способа создания методов
Всем привет. Надо сделать лабораторную работу в C# на создание двух одинаковых методов, которые вызываются по-разному. Первый метод...

два способа, один не работает
Задание: Создайте функцию truncate(str, maxlength), которая проверяет длину строки str, и если она превосходит maxlength – заменяет конец...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru