Войти

Показать полную графическую версию : [Wolfram Mathematica] - Решение системы интегральных уравнений


TaDa
19-12-2012, 09:02
Здравствуйте, друзья!

Следующая проблема: имеется система из двух дифференциальных уравнений, решением которой является бигармоническая функция, имеется 8 начальных условий. Решение произвожу средствами стандартной функции DSolve[]. Начальные условия задаю следующим образом:

начальное_условие1 := выражение == 0 .

Загвоздка состоит в том, что когда функция DSolve[] начинает вычислять, она проверяет начальные условия и получает в качестве аргумента True, а не систему равенств; иными словами, насколько я понял механизм, сначала Математика проверяет истинность начальных условий, а потом передает в DSolve[] в качестве аргумента логическую переменную - True или False (вернее, 8 логических переменных - по одной на каждое из начальных условий).

В общем, как мне справиться с этим камнем преткновения?

TaDa
19-12-2012, 09:05
Да, и еще 1 вопрос по теме: если я задал функцию в виде:

f[x_,y_] := x^2+y^2;

а потом далее в программе использую f[0,y] или даже f[a,y], где a - некоторая константа, будет ли Математика воспринимать это выражение верно, т.е. произойдет ли подстановка 0 или a в аргумент x функции f?

pva
19-12-2012, 19:34
будет ли Математика воспринимать это выражение верно »
Да. В этом смысле она как человек. Если a чему-то присвоена, то сделает подстановку дальше. Если не надо делать, то лучше подать Hold[a]

получает в качестве аргумента True »
Выражение является тождеством?

Если есть непонятки с подстановкой граничных условий, то можно получить через DSolve общее решение, а затем через Solve частное.

TaDa
23-12-2012, 17:29
pva, спасибо, Ваш ответ был весьма полезен и в сущности разрешил мою проблему.

Могу я задать еще один вопрос, на этот раз относительно решения трансцендентных уравнений: каким образом можно задать область определения коэффициентов, входящих в него, и решения? То есть уравнение задано в символьном виде, и я хочу, чтобы Математика нашла его корни, например, только при положительных коэффициентах и только вещественные. Как я понимаю, нужно прописать что-то дополнительно в Solve[] - вот только что?

pva
24-12-2012, 23:16
У меня тоже не получилось заставить это сделать Solve. Но получилось отфильтровать конечные решения:

Select[x /. Solve[{(x^2 + 4)*(x - 2) == 0}], #1 \[Element] Reals & ]

TaDa
18-01-2013, 06:19
pva, а не могли бы расшифровать, что здесь написано? Просто еще не приходилось пользоваться этой функцией.

pva, кстати говоря, функция Reduce[] позволяет налагать ограничения на корень и фильтровать решения таким образом. Только вот в моем случае делает она это очень долго - фактически, я даже не знаю, завершится ли когда-нибудь этот процесс.

pva
18-01-2013, 22:25
TaDa,
Select[x /. Solve[{(x^2 + 4)*(x - 2) == 0}], #1 \[Element] Reals & ] »
тут написано Select[подстановка x->решение, лябда-функция: # є Reals &], всё очень хорошо описано в книжке, встроенной прямо в пакет.
кстати говоря, функция Reduce[] »
Да, тут надо поиграться, что окажется лучше

TaDa
25-01-2013, 19:38
pva, спасибо за расшифровку.

У меня теперь другая проблема:

задаю функцию таким образом: F1[x_,y_]:=D[F[x,y],x], где F[x,y] - некоторая функция, заданная ранее. Потом хочу вычислить F1[0,y], например. Математика начинает подставлять 0 повсюду, где видит x, и пишет, что 0 не является допустимым значением.

Вопрос: можно ли как-то обойти этот механизм?

При этом выписывать производную, что называется, "на живую" не хочется - выражение получается слишком громоздким. Да и Hold[0] не дает результата - ведь потом F1 должна войти в систему начальных условий, и последующие вычисления должны быть проделаны с подставленным нулем.

pva
26-01-2013, 11:10
убери двоеточие из присваивания - оно обозначает отложенное, т.е. сначала подставить, потом вычислить, или используй Evaluate:

F1[x_,y_]=D[F[x,y],x]
или
F1[x_,y_]:=Evaluate[D[F[x,y],x]]

TaDa
28-01-2013, 08:54
pva, спасибо, этот способ действительно работает.

Вы случайно не знаете, почему Mathematica не может взять гиперболический косинус от числа пи? Возвращает Cosh[Pi]. Странно.

pva
01-02-2013, 20:48
Математика пытается вычислить выражение до более простой аналитической формы (используется правило, которое как-то уменьшает количество узлов выражения). Если ей не удаётся найти более простую форму, она оставляет выражение не вычисленным, причём используются только аналитические правила. Чтобы "заставить" её получить приближённое численное значение, можно воспользоваться функцией N[] (там же можно указать точность вычисления)

N[Cosh[Pi]]

TaDa
18-03-2013, 09:42
При дальнейшем решении возникли следующие 2 вопроса:

1. Каким образом можно ограничить в системе точность решения? А конкретнее - количество знаков после запятой?

2. Можно ли каким-то образом узнать, в каких точках комплексной плоскости вычет функции отличен от нуля, и если возможно, то как это осуществляется практически?

pva
24-03-2013, 12:29
1. Каким образом можно ограничить в системе точность решения? А конкретнее - количество знаков после запятой? »
Можно, например, усечь полученный результат (второй параметр N[])
Можно ли каким-то образом узнать, в каких точках комплексной плоскости вычет функции отличен от нуля, и если возможно, то как это осуществляется практически? »
Уже и не помню, что это такое. У меня теория функций комплексной переменной была лет 10-15 назад :)

TaDa
17-04-2013, 09:47
pva, насчет вычетов - я подумал, что это совершенно ненужный ход. Так что не стоит и голову ломать лишний раз - просто думал, что это можно относительно легко осуществить, написав что-то вроде "если вычет == 0, то вывести x". Кстати, надо будет попробовать :)

Странно, что я даю Математике короткие трансцендентные уравнения, а она, решая их, выводит на экран комментарий:

"Reduce was unable to solve the system with inexact coefficients. The answer was obtained by solving a corresponding exact system and numericizing the result".

Совсем неясно, о каких "inexact" коэффициентах идет речь, т.к. я в качестве коэффициентов уравнения использую совершенно нормальные действительные числа.




© OSzone.net 2001-2012