Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [Wolfram Mathematica] - Решение системы интегральных уравнений (http://forum.oszone.net/showthread.php?t=249481)

TaDa 19-12-2012 09:02 2048586

[Wolfram Mathematica] - Решение системы интегральных уравнений
 
Здравствуйте, друзья!

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

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

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

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

TaDa 19-12-2012 09:05 2048589

Да, и еще 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 2049170

Цитата:

Цитата TaDa
будет ли Математика воспринимать это выражение верно »

Да. В этом смысле она как человек. Если a чему-то присвоена, то сделает подстановку дальше. Если не надо делать, то лучше подать Hold[a]

Цитата:

Цитата TaDa
получает в качестве аргумента True »

Выражение является тождеством?

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

TaDa 23-12-2012 17:29 2051717

pva, спасибо, Ваш ответ был весьма полезен и в сущности разрешил мою проблему.

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

pva 24-12-2012 23:16 2052845

У меня тоже не получилось заставить это сделать Solve. Но получилось отфильтровать конечные решения:

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

TaDa 18-01-2013 06:19 2069275

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

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

pva 18-01-2013 22:25 2069945

TaDa,
Цитата:

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

тут написано Select[подстановка x->решение, лябда-функция: # є Reals &], всё очень хорошо описано в книжке, встроенной прямо в пакет.
Цитата:

Цитата TaDa
кстати говоря, функция Reduce[] »

Да, тут надо поиграться, что окажется лучше

TaDa 25-01-2013 19:38 2074944

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 2075323

убери двоеточие из присваивания - оно обозначает отложенное, т.е. сначала подставить, потом вычислить, или используй Evaluate:
Код:

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


TaDa 28-01-2013 08:54 2076625

pva, спасибо, этот способ действительно работает.

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

pva 01-02-2013 20:48 2080405

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

  N[Cosh[Pi]]

TaDa 18-03-2013 09:42 2113465

При дальнейшем решении возникли следующие 2 вопроса:

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

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

pva 24-03-2013 12:29 2117298

Цитата:

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

Можно, например, усечь полученный результат (второй параметр N[])
Цитата:

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

Уже и не помню, что это такое. У меня теория функций комплексной переменной была лет 10-15 назад :)

TaDa 17-04-2013 09:47 2134269

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" коэффициентах идет речь, т.к. я в качестве коэффициентов уравнения использую совершенно нормальные действительные числа.


Время: 12:06.

Время: 12:06.
© OSzone.net 2001-