2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение29.05.2013, 17:17 
Заслуженный участник


11/05/08
32166
Andrew Gubarev в сообщении #729995 писал(а):
А спорить с комбинацией «численное краевой + численное Коши» я не буду.:)) Быстро и дёшево.

Ну не так уж быстро и дёшево. Сеточные схемы имеют ограниченную точность, пристрелка же требует некоторых усилий. Правда, сеточная схема даже достаточно грубая даёт хорошее начальное приближение для пристрелки, так что хотя бы в этом отношении проблем не будет. Но это лишь в том случае, если мы случайно не оказались на спектре (конечно, в этой задаче подобное крайне маловероятно).

___ALBA___ в сообщении #730046 писал(а):
можете написать как нужно правильно сделать...

Как же мы можем написать, когда Вы до сих пор так толком и не сформулировали -- ни что в точности дано, ни что требуется найти, ни каким предлагается методом.

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение29.05.2013, 18:07 
Заморожен


14/09/10
72
Да я в контексте темы то говорил, в основном. За поправку о продолжении аналитического решения — спасибо, ewert. (На своей волне был, не переключился.)

ТС как бы что-то написал по поводу условия своей задачи. Т.к. это не задача (если Maple), то можно и помочь. :)

Комбинация «решения краевой задачи + решение задачи Коши» (Maple 12 Classic WorkSheet)
Код:
> equ:= diff(y(x), x $2) + sin(x)*diff(y(x), x) + 2*y(x) = x^2:
> S1:= dsolve ({equ, y(0)=0, y(1)=1}, numeric, output=listprocedure): # Определяем краевую задачу 0<x<1
> S2:= dsolve ({equ, y(1)=1, D(y)(1)=evalf(rhs(S1[3])(1))}, numeric, output=listprocedure): # Определяем задачу Коши x>1
> P1:= plot(rhs(S1[2]), 0..1): P2:= plot(rhs(S2[2]), 1..Pi): # Рассчитываем графики
> plots[display]({P1, P2}); # Выводим график  0 < x < Pi
> f:= (u) -> if u < 1 then evalf(rhs(S1[2])(u)) else evalf(rhs(S2[2])(u)) end if; # Склеиваем решения
> u:= (i)-> evalf(i*Pi/30); # Вспомогательная функция вычисления x по номеру
> seq([u(i), f(u(i))], i = 0..30); # Рассчитываем значения реш. в соотв. точках и выводим в формате [x, y(x)]
[0., 0.], [.1047197551, .1590115742], [.2094395103, .3129785641], [.3141592654, .4573643909], [.4188790204, .5884078146], [.5235987758, .7033057063], [.6283185308, .8003180430], [.7330382858, .8787916738], [.8377580412, .9391087745], [.9424777962, .9825735167], [1.047197551, 1.011255517], [1.151917307, 1.027809817], [1.256637062, 1.035293127], [1.361356817, 1.036991972], [1.466076572, 1.036274586], [1.570796327, 1.036473429], [1.675516082, 1.040800995], [1.780235837, 1.052297903], [1.884955592, 1.073809884], [1.989675347, 1.107988774], [2.094395103, 1.157312152], [2.199114858, 1.224116366], [2.303834613, 1.310638288], [2.408554368, 1.419061915], [2.513274123, 1.551566747], [2.617993878, 1.710375642], [2.722713634, 1.897800397], [2.827433389, 2.116283669], [2.932153144, 2.368436106], [3.036872899, 2.657067406], [3.141592654, 2.985209701]

Неужели в качестве индивидуального задания могут предлагать такое? Тут работы на пять минут!

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение30.05.2013, 16:42 


22/05/13
43
Почему-то ошибки вылазят...чтож такое
Используется синтаксис Matlab M
> S2 := dsolve*({equ, y(1) = 1, (D(y))(1) = evalf((rhs(S1[3]))(1))}, numeric, output = listprocedure);
%;
Error, invalid input: rhs received (dsolve*({diff(diff(y(x), x), x)+sin(x)*(diff(y(x), x))+2*y(x) = x^2, y(0) = 0, y(1) = 1}, numeric, output = listprocedure))[3], which is not valid for its 1st argument, expr
> P1 := plot(rhs(S1[2]), 0 .. 1); P2 := plot(rhs(S2[2]), 1 .. Pi);
%;
Error, invalid input: rhs received (dsolve*({diff(diff(y(x), x), x)+sin(x)*(diff(y(x), x))+2*y(x) = x^2, y(0) = 0, y(1) = 1}, numeric, output = listprocedure))[2], which is not valid for its 1st argument, expr
Error, invalid input: rhs received S2[2], which is not valid for its 1st argument, expr
> plots[display]({P1, P2});
%;
Error, (in plots:-display) expecting plot structures but received: {P1, P2}

 

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение31.05.2013, 08:24 
Заморожен


14/09/10
72
Первые строки Вы не привели, поэтому обоснованный ответ дать нельзя. Но в первой приведенной Вами строке между dsolve и открывающей скобкой стоит символ *, а этого быть не должно. Видя это, могу предположить, что и в предыдущей строке между dsolve и скобкой стоит *.

[Для других читателей темы. Моё предыдущее сообщение было скорее неуместной шуткой. Код, конечно, работает: картинка рисуется, значения решения вычисляются. Но дело вот в чём. Даже если мы предположим, что Maple самостоятельно правильно выбирает величину «шага» в разностной схеме и параметры схемы решения задачи Коши для получения решения с точностью не меньшей заданной (что в общем случае неверно, и поэтому требует проверки в каждом конкретном случае), то это было бы верно для отдельно взятой краевой задачи или задачи Коши. В случае же приведенного кода одно из начальных условий задачи Коши является результатом решения краевой задачи, оно приближенное. Естественно, Maple не гарантирует даже на словах, что он сможет обеспечить ошибку решения, не превышающую заданную точность. :)]

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение02.06.2013, 07:09 


22/05/13
43
Вот прикрепляю код,посмотрите,пожалуйста,почему там возникли ошибки,по возможности,помогите исправить...
http://yadi.sk/d/aGblfNxp5Lz_w

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение02.06.2013, 18:46 
Заморожен


14/09/10
72
У Вас в файле S1 := dsolve ({equ, y(0) = 0, y(1) = 1});, а должно быть S1 := dsolve({equ, y(0) = 0, y(1) = 1}, numeric, output=listprocedure);. Т.е. добавьте numeric, output=listprocedure и удалите пробел между dsolve и открывающей скобкой. (В Classic Worksheet допустимы пробелы между названием функции/процедуры и открывающей скобкой, а, грубо говоря, в используемой Вами среде — нет.)
После исправлений картинка рисуется.

Дальше, возможно, у Вас возникнут затруднения с arrow процедурой. В ней можно под вашу среду заменить if структуру на if выражение. Дальше в файле не набрано определение функции u. Если поправить, то всё заработает.

Совет: используйте Maple Input (Найдете на палитре "Insert Maple Input...").
И еще. Лучше набирать код в тексте сообщения, а не отсылать к внешним файлам. Так удобнее общаться.

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение03.06.2013, 13:32 


22/05/13
43
Все получилось нормально,кроме одного,краевое условие было ошибочным,на самом деле оно такое: $y(0)=0, y(\pi)=1$. И теперь,когда я хочу построить график,у меня строится не такой,который должен быть...вот код,посмотрите что исправить:
Код:
equ:=diff(y(x), x$2)+sin(x)*diff(y(x), x)+2*y(x) = x^2;
S1:=dsolve({diff(y(x), x$2)+sin(x)*diff(y(x), x))+2*y(x) = x^2, y(0) = 0, y(Pi) = 1}, numeric, output = listprocedure);
S2:= dsolve({diff(y(x), x$2)+sin(x)*(diff(y(x), x)+2*y(x) = x^2, y(1) = 1, D(y)(1)=evalf(rhs(S1[3])(1))}, numeric, output = listprocedure);
P1:=plot(rhs(S1[2]), 0..1);
P2:=plot(rhs(S2[2]), 1..Pi);
plots[display]({P1, P2});
f:= (u) -> if u < 1 then evalf(rhs(S1[2])(u)) else evalf(rhs(S2[2])(u))end if; # Склеиваем решения
> u:= (i)-> evalf(i*Pi/30);

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение03.06.2013, 15:41 
Заморожен


14/09/10
72
Я сильно подозреваю, что Maple 12 не умеет вычислять предел решений конфлюэнтного уравнения Гойна при [$x \to 0$ и их значения в окрестности нуля] $z \to 1 $ и их значения в окрестности $z=1$. Так
eval(HeunC(2,-1/2,-1/2,1,-17/8,1/2*cos(x)+1/2), x=0.000023) возвращает -.1865018591,
но
eval(HeunC(2,-1/2,-1/2,1,-17/8,1/2*cos(x)+1/2), x=0.000022) уже возвращает Float(infinity)+Float(infinity)*I

Хорошо бы было иметь процедуры для вычисления предела, а также значений решений конфлюэнтного уравнения Гойна.

Вам и для практики хорошо бы найти аналитическое решение и построить график, используя аналитическое решение.

Предлагаю бартер. Вы приводите задокументированные (со ссылками на статьи и книги) процедуры (Maple) для вычисления значений функций Гойна (решений конфлюэнтного уравнения Гойна) и нахождения их пределов, а я Вам набираю численное решение.

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение04.06.2013, 03:28 


22/05/13
43
Весь интернет облазил, нашел какие-то ссылочки в иностранной литературе...http://www.maplesoft.com/support/help/Maple/view.aspx?path=HeunC
http://www.maplesoft.com/support/help/Maple/view.aspx?path=Heun

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение04.06.2013, 16:14 


22/05/13
43
Вообще на этом сайте можно многое найти http://www.maplesoft.com

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение05.06.2013, 09:21 
Заморожен


14/09/10
72
По приведенным Вами ссылкам хелпы. Я не понял, на что Вы хотели обратить внимание этими ссылками. Хелп я читал. Проблемы у функции HeunC вблизи $z=1$ не только в Maple 12, но и в Maple 15. Тут надо серьёзно разобраться в математике и только потом браться за программирование.

В справке Maple даётся ссылка на книгу (привожу название перевода)
Славянов С., Лай В. Специальные функции: Единая теория, основанная на анализе особенностей. — СПб.: Невский диалект, 2002 (можно легко найти в Сети электронную версию)
Также можно поискать ссылки в книге
Бейтмен Г., Эрдейи А. Высшие трансцендентные функции. Эллиптические и автоморфные функции. Функции Ламе и Матье. — Наука, 1967 (djvu)
Будем надеяться, другие участники приведут более удачные ссылки.

Для чего в данной задаче нужны решения Гойна. Используя два линейно независимых решения однородного уравнения можно построить функцию Грина и таким образом найти решение краевой задачи (в виде интеграла).
[О решении краевой задачи при помощи функции Грина можно посмотреть, например, в краткой теоретической справке книги Филиппова А.Ф. «Сборник задач по дифференциальным уравнениям» или в книге Эльсголца Л.Э. «Дифференциальные уравнения и вариационное исчисление».]

Возможно, есть другие более уместные варианты решения. Меня заинтриговала именно дырка в библиотечной функции Maple.

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение06.06.2013, 09:44 


22/05/13
43
График получился верный,только осталось получить значения решений в соответствующих точках и вывести в формате [x,y(x)] на сетке размером $\frac{\pi}{30}$ для данного графика. Помогите, пожалуйста.
Код:
equ:=diff(y(x), x$2)+sin(x)*diff(y(x), x)+2*y(x) = x^2;
S1:=dsolve({diff(y(x), x$2)+sin(x)*diff(y(x), x))+2*y(x) = x^2, y(0) = 0, y(Pi) = 1}, numeric, output = listprocedure);
P1:=plot(rhs(S1[2]), 0..Pi);
plots[display]({P1});

 Профиль  
                  
 
 Re: Помогите решить дифференциальное уравнение.
Сообщение06.06.2013, 17:21 


22/05/13
43
Перепробовал множество вариаций, что-то не получается....помогите...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу Пред.  1, 2, 3

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group