Я создаю собственную систему координат с помощью векторного модуля и столкнулся с каким-то странным поведением.
Краткая версия:
Почему этот код возвращает нулевой вектор?
from sympy import Function
from sympy.vector import CoordSys3D, gradient
S = CoordSys3D('S',transformation=lambda x,y,z : (x, y, z), \
variable_names=('x','y','z'))
f = Function('f')
grad_f = gradient(f(S.x,S.y,S.z)).simplify()
print(grad_f)
0
Длинная версия:
Во-первых, следующее работает должным образом.
import sympy as sp
from sympy.vector import CoordSys3D, gradient
R = CoordSys3D('R')
f = sp.Function('f')
grad_f = gradient(f(R.x,R.y,R.z))
print(grad_f)
print(grad_f.simplify())
(Derivative(f(R.x, R.y, R.z), R.x))*R.i + (Derivative(f(R.x, R.y, R.z), R.y))*R.j + (Derivative(f(R.x, R.y, R.z), R.z))*R.k
(Derivative(f(R.x, R.y, R.z), R.x))*R.i + (Derivative(f(R.x, R.y, R.z), R.y))*R.j + (Derivative(f(R.x, R.y, R.z), R.z))*R.k
Однако, когда я пробую описанное выше в системе координат, созданной с помощью пользовательского преобразования, последний шаг упрощения не возвращает ожидаемый результат.
S = CoordSys3D('S',transformation=lambda x,y,z : (x, y, z),variable_names=('x','y','z'))
grad_f = gradient(f(S.x,S.y,S.z))
print(grad_f)
print(grad_f.simplify())
Сам градиент вычисляется правильно, но шаг упрощения возвращает вектор 0:
(Derivative(f(S.x, S.y, S.z), S.x))*S.i + (Derivative(f(S.x, S.y, S.z), S.y))*S.j + (Derivative(f(S.x, S.y, S.z), S.z))*S.k
0
При нетривиальном преобразовании координат (например, в сферической системе, определяемой пользователем) этап упрощения может занять несколько минут, прежде чем вернется (неправильный?) 0.
Это ошибка? Или я что-то упускаю из пользовательского преобразования?
ОБНОВЛЕНИЕ:
Следующее работает (но почему?)
x,y,z = sp.symbols('x,y,z')
grad_f = grad_f.subs({S.x : x, S.y : y, S.z : z})
print(grad_f)
print(grad_f.simplify())
с ожидаемыми результатами
(Derivative(f(x, y, z), x))*S.i + (Derivative(f(x, y, z), y))*S.j + (Derivative(f(x, y, z), z))*S.k
(Derivative(f(x, y, z), x))*S.i + (Derivative(f(x, y, z), y))*S.j + (Derivative(f(x, y, z), z))*S.k
Подробнее здесь: https://stackoverflow.com/questions/798 ... sformation
Sympy: проблема с упрощением вектора Sympy из пользовательского преобразования. ⇐ Python
Программы на Python
1762408175
Anonymous
Я создаю собственную систему координат с помощью векторного модуля и столкнулся с каким-то странным поведением.
[b]Краткая версия:[/b]
Почему этот код возвращает нулевой вектор?
from sympy import Function
from sympy.vector import CoordSys3D, gradient
S = CoordSys3D('S',transformation=lambda x,y,z : (x, y, z), \
variable_names=('x','y','z'))
f = Function('f')
grad_f = gradient(f(S.x,S.y,S.z)).simplify()
print(grad_f)
0
[b]Длинная версия:[/b]
Во-первых, следующее работает должным образом.
import sympy as sp
from sympy.vector import CoordSys3D, gradient
R = CoordSys3D('R')
f = sp.Function('f')
grad_f = gradient(f(R.x,R.y,R.z))
print(grad_f)
print(grad_f.simplify())
(Derivative(f(R.x, R.y, R.z), R.x))*R.i + (Derivative(f(R.x, R.y, R.z), R.y))*R.j + (Derivative(f(R.x, R.y, R.z), R.z))*R.k
(Derivative(f(R.x, R.y, R.z), R.x))*R.i + (Derivative(f(R.x, R.y, R.z), R.y))*R.j + (Derivative(f(R.x, R.y, R.z), R.z))*R.k
Однако, когда я пробую описанное выше в системе координат, созданной с помощью пользовательского преобразования, последний шаг упрощения не возвращает ожидаемый результат.
S = CoordSys3D('S',transformation=lambda x,y,z : (x, y, z),variable_names=('x','y','z'))
grad_f = gradient(f(S.x,S.y,S.z))
print(grad_f)
print(grad_f.simplify())
Сам градиент вычисляется правильно, но шаг упрощения возвращает вектор 0:
(Derivative(f(S.x, S.y, S.z), S.x))*S.i + (Derivative(f(S.x, S.y, S.z), S.y))*S.j + (Derivative(f(S.x, S.y, S.z), S.z))*S.k
0
При нетривиальном преобразовании координат (например, в сферической системе, определяемой пользователем) этап упрощения может занять несколько минут, прежде чем вернется (неправильный?) 0.
Это ошибка? Или я что-то упускаю из пользовательского преобразования?
[b]ОБНОВЛЕНИЕ:[/b]
Следующее работает (но почему?)
x,y,z = sp.symbols('x,y,z')
grad_f = grad_f.subs({S.x : x, S.y : y, S.z : z})
print(grad_f)
print(grad_f.simplify())
с ожидаемыми результатами
(Derivative(f(x, y, z), x))*S.i + (Derivative(f(x, y, z), y))*S.j + (Derivative(f(x, y, z), z))*S.k
(Derivative(f(x, y, z), x))*S.i + (Derivative(f(x, y, z), y))*S.j + (Derivative(f(x, y, z), z))*S.k
Подробнее здесь: [url]https://stackoverflow.com/questions/79810049/sympy-problem-with-simplifying-a-sympy-vector-from-user-defined-transformation[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия