Страница 1 из 1

ODE и программирование

Добавлено: Вт дек 04, 2012 6:49 am
Chernykh_IL
Решаю задачу по моделированию выпрямителя. Моделирую диод нелинейной функцией ("маленькое" сопротивление в при положительном токе и "большое" сопротивление при отрицательном токе). Столкнулся с тем, что если эту нелинейную функцию выполнить на основе функции if или с помощью программы (составного оператора из нескольких строк), то задача не решается. Ошибка: "значение должно быть скалярным".
Однако, если ту же функцию выполнить на основе встроенной функции Хевисайда (равно как и на основе sign), то все работает, и диаграммы соответствуют реальности (дополнительно проверено в OrCad).
Признаться, в описании пакета не находил такого ограничения, или я что-то делаю неверно.
Прилагаю файл сделанный в Mathcad 14.
Спасибо.

P.S. Ну, да... Я "в курсе", что Simulink и еще куча программ решат эту задачу "в легкую", но мы ведь Mathcad обсуждаем...

Re: ODE и программирование

Добавлено: Ср дек 05, 2012 4:49 pm
VFO
Chernykh_IL писал(а):Решаю задачу по моделированию выпрямителя. Моделирую диод нелинейной функцией ("маленькое" сопротивление в при положительном токе и "большое" сопротивление при отрицательном токе). Столкнулся с тем, что если эту нелинейную функцию выполнить на основе функции if или с помощью программы (составного оператора из нескольких строк), то задача не решается. Ошибка: "значение должно быть скалярным".
Однако, если ту же функцию выполнить на основе встроенной функции Хевисайда (равно как и на основе sign), то все работает, и диаграммы соответствуют реальности (дополнительно проверено в OrCad).
Признаться, в описании пакета не находил такого ограничения, или я что-то делаю неверно.
Прилагаю файл сделанный в Mathcad 14.
Спасибо.

P.S. Ну, да... Я "в курсе", что Simulink и еще куча программ решат эту задачу "в легкую", но мы ведь Mathcad обсуждаем...

Интересное решение! Спасибо.
Эту задачу лучше решать в среде Mathcad Prime.
Почему!?
Там функция odesolve (а почему вы с ней не работаете?) работает с if и с единицами измерения.
См. пример - http://communities.ptc.com/message/188012

Решение будет намного элегантней!
Давайте попробуем?

Добавлено: Чт дек 06, 2012 7:09 am
Chernykh_IL
Пробовал пару раз Odesolve - те мои задчи, что rkfixed "брал" без проблем odesolve "не смог" взять. Попробую снова... Mathcad Prime... Он уже полностью "перекрыл" возможности "старого" Mathcad'а ?
Спасибо.

Добавлено: Чт дек 06, 2012 7:56 am
VFO
Chernykh_IL писал(а):Пробовал пару раз Odesolve - те мои задчи, что rkfixed "брал" без проблем odesolve "не смог" взять. Попробую снова... Mathcad Prime... Он уже полностью "перекрыл" возможности "старого" Mathcad'а ?
Спасибо.

См
http://communities.ptc.com/polls/1134
и
http://communities.ptc.com/polls/1141

Но то, что odesolve теперь работает с физическими величинами - это уникальное свойство, которого нет у других программ!
Только из-за этого стоит поставить на свой компьютер Prime (и оставить Mathcad 15!).

Re: ODE и программирование

Добавлено: Чт дек 06, 2012 2:40 pm
Korobov V I
Chernykh_IL писал(а): Столкнулся с тем, что если эту нелинейную функцию выполнить на основе функции if или с помощью программы (составного оператора из нескольких строк), то задача не решается. Ошибка: "значение должно быть скалярным".
Однако, если ту же функцию выполнить на основе встроенной функции Хевисайда (равно как и на основе sign), то все работает...

Должен Вас разочаровать. Функция, сформированная через if, работает. Вы просто неверно к ней обращаетесь.
См. рис.
Изображение

Добавлено: Пт дек 07, 2012 10:52 am
Chernykh_IL
Должен Вас разочаровать.

Так наоборот - воодушевили. Буду обращаться правильно.

Добавлено: Пт дек 07, 2012 7:19 pm
Chernykh_IL
Да, если поставить индекс "0" при переменной "х", работает. Работает и с использованием программы (ура!). Непонятно только, почему же его нужно указывать? В данном конкретном случае D(t,x) ведь не векторная функция. Прошу пояснить.
Спасибо.
P.S. Перестает работать формула для вычисления производной тока (d_tok:= .....).

Добавлено: Пн дек 10, 2012 7:35 am
Chernykh_IL
Коллеги, помогите разобраться.
В чем разница применения функции, созданной на основе программы (Функция-2) и функции, созданной на основе функции Хевисайда (Функция-1):

1. Почему для Функции-2 необходимо указывать индекс 0 для переменной х (Формула-2), а при использовании Функции-1 это не требуется (Формула-1)?

2. Почему в случае использования Функции-2 и Формулы-2 перестают работать выражения для вычисления производных через функцию D(t,x) - Выражения 1 и 3.
При этом работают Выражения 2 и 4. Но там используется та же самая функция D(t,x), только записанная заново.
В случае же использования Функции-1 и Формулы-1 все выражения (1-4) работают, как по-моему и должно быть.

Соответствующие файлы прилагаю.

Спасибо.