Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

Задачата на Коши в Matlab

Задачата на Коши в Matlab

Мнениеот micobg » 02 Сеп 2013, 12:54

Трябва да намеря решението на задачата на Коши:
[tex]y'''+6y''+2y'+3y'=x^{2}[/tex]
[tex]y(0) = 3[/tex]
[tex]y'(0) = -2[/tex]
[tex]y''(0) = 1[/tex]

Това, което съм написал вярно ли е?
Код: Избери целия код
function res=func(x,y)
res=[y(2);
     y(3);
     -6*y(1)-2*y(2)-3*y(3)+x^2];

[x,y]=ode45(@func,[0,5],[3,-2,1]);
plot(x(:,1),y(:,1))
hold on;

Повече ме притеснява @func дали ми е вярно.
А по този начин?
Код: Избери целия код
sol=dsolve('D3y+6*D2y+2*Dy+3*y=0','y(0)=3,Dy(0)=-2,D2y(0)=1');
xx=0:0.1:5;
yy=subs(sol,'t',xx);
plot(xx,yy);
axis([0,5,-1,2]);


И каква е разликата дали ще използвам ode45 или dsolve?
micobg
Нов
 
Мнения: 46
Регистриран на: 12 Яну 2010, 23:16
Рейтинг: 1

Re: Задачата на Коши в Matlab

Мнениеот Anubis » 02 Сеп 2013, 13:15

ode45 решава задачата на Коши приближено, т. е. с числен метод (който в случая е методът на Рунге-Кута). Полученото решение е във вид на вектор стълб от числа.
dsolve() решава задачата на Коши точно, т. е. намира явния вид на функцията y(x).
Далеч не всички диференциални уравнения са решими с dsolve(), затова много често се използват числените методи. Аз те съветвам да прибягваш до dsolve() в редки случаи, когато например уравнението е просто на вид или е от нисък ред.
След малко ще ти напиша решението на задачата на Matlab.
Аватар
Anubis
Напреднал
 
Мнения: 286
Регистриран на: 05 Авг 2010, 17:45
Рейтинг: 166

Re: Задачата на Коши в Matlab

Мнениеот Anubis » 02 Сеп 2013, 16:14

Ето и обещаното решение.

Function file
Код: Избери целия код
function res = func(x, y)
res = [y(2);
    y(3);
    x.^2 - 6 * y(3) - 2 * y(2) - 3 * y(1)];
end


Script file
Код: Избери целия код
[x1, y1] = ode45('func', 0, 5, [3; -2; 1]);
plot(x1(:, 1), y1(:, 1), 'g') % рисува приближеното решение
hold on
grid on
set(gca, 'FontName', 'Times', 'FontSize', 11)
xlabel('$$ Ox, \quad x \in [0; \, 5] $$', 'interpreter', 'latex')
ylabel('$$ Oy, \quad y \in [0; \, 3.5] $$', 'interpreter', 'latex')
title('$$ y''''''+6y''''+2y''+3y=x^2, \quad y(0)=3, \quad y''(0)=-2, \quad y''''(0)=1 $$', ...
    'interpreter', 'latex')
syms x
sol = dsolve('D3y+6*D2y+2*Dy+3*y=x^2, y(0)=3, Dy(0)=-2, D2y(0)=1', 'x');
sol = expand(sol);
sol = simplify(sol)
xx = 0 : 0.001 : 5;
sol1 = subs(sol, x, xx);
plot(xx, sol1, 'cyan') % рисува точното решение
legend('\it{Точно решение u(x)}', '\it{Приближено решение y(x)}')


Както се вижда, приближеното и точното решение съвпадат навсякъде. Това обаче далеч не е така за всяко

диференциално уравнение.
Прикачени файлове
pic.png
pic.png (8.16 KiB) Прегледано 2607 пъти
Аватар
Anubis
Напреднал
 
Мнения: 286
Регистриран на: 05 Авг 2010, 17:45
Рейтинг: 166

Re: Задачата на Коши в Matlab

Мнениеот micobg » 02 Сеп 2013, 21:58

Благодаря много! ;)

Но ми връща следната грешка:
Код: Избери целия код
Error using odearguments (line 81)
The last entry in tspan must be different from the first entry.

Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...\sum_{}^{ }


Къде е грешката?

И между другото да питам още нещо. Какво прави 'g' в plot функцията? Не трябва ли преди това да изрисуваме графиката?
micobg
Нов
 
Мнения: 46
Регистриран на: 12 Яну 2010, 23:16
Рейтинг: 1

Re: Задачата на Коши в Matlab

Мнениеот Anubis » 03 Сеп 2013, 07:41

Не знам защо ти дава грешки, аз съм го тествал на моя Matlab, преди да го сложа тук, и всичко е наред. Може би твоята версия е по-нова или по-стара. А може би трябва да изчистиш всичките си променливи, преди да стартираш кода. Напиши clear all и името на файла, който намира решението, в командния прозорец.
'g' е опция на plot() и не се задава след нея, а вътре в нея.
Аватар
Anubis
Напреднал
 
Мнения: 286
Регистриран на: 05 Авг 2010, 17:45
Рейтинг: 166

Re: Задачата на Коши в Matlab

Мнениеот micobg » 03 Сеп 2013, 11:16

Бях с 2013. Сложих 2010 и е ОК. Още веднъж благодаря! :)

А за g-то, ясно, че е аргумент. Имах предвид какво означава този аргумент. За какво се ползва?
micobg
Нов
 
Мнения: 46
Регистриран на: 12 Яну 2010, 23:16
Рейтинг: 1

Re: Задачата на Коши в Matlab

Мнениеот Anubis » 03 Сеп 2013, 13:24

В plot(x, y, 'color') това color отговаря за цвета на линията, която ще се изобразява. color приема няколко различни стойности: 'g' (green), 'b' (blue), 'r' (red), 'k' (black), 'cyan'. По подразбиране color=b, но винаги можеш да промениш цвета, ако не ти харесва. Просто го слагаш като последен аргумент на plot() и готово.
Аватар
Anubis
Напреднал
 
Мнения: 286
Регистриран на: 05 Авг 2010, 17:45
Рейтинг: 166

Re: Задачата на Коши в Matlab

Мнениеот Гост » 15 Юни 2014, 19:09

IMG_1910.JPG
IMG_1910.JPG (1.05 MiB) Прегледано 2256 пъти
Здравейте! Прочетох много добре всичко, което сте написали но при мен не се получават така нещата и графиката се получава много странно. Дали може да ми дадете някакъв съвет? За първата задача
Гост
 

Re: Задачата на Коши в Matlab

Мнениеот Anubis » 20 Юни 2014, 19:43

Първо създаваме файл-функцията, която свежда ОДУ-то от трети ред до три такива от първи ред.
myFunction.m
Код: Избери целия код
function res = myFunction(x, y)
res = [y(2);
    y(3);
    x + 2 * y(3) - 5 * y(2) + 10 * y(1)];
end

След това създаваме script file, който използва ode45 за решаване на получената система от 3 ОДУ от първи ред.
mySol.m
Код: Избери целия код
[x, y] = ode45(@myFunction, [-2, 0], [0; 1; 1]);
plot(x(:, 1), y(:, 1), 'g', ...
    x(:, 1), y(:, 2), 'b', ...
        x(:, 1), y(:, 3), 'y', 'LineWidth', 3)
hold on
grid on
set(gca, 'FontName', 'Times', 'FontSize', 11)
xlabel('\it{Ox}')
ylabel('\it{Oy}')
legend('\it{y_{1}}', '\it{y_{2}}', '\it{y_{3}}')
s = y(:, 3);
smin = min(y(:, 3));
for i = 1 : length(s)
    if (s(i)==smin)
        plot(x(i), s(i), 'o')
        break;
    end
end
display('Най-малката стойност на y(:, 3) в [-2; 0] е: ')
display(smin)
Прикачени файлове
ode.png
ode.png (8.13 KiB) Прегледано 2228 пъти
Аватар
Anubis
Напреднал
 
Мнения: 286
Регистриран на: 05 Авг 2010, 17:45
Рейтинг: 166

Задача на Коши и Интегрална крива

Мнениеот Гост » 16 Юни 2015, 14:35

Някой може ли да ми даде примерно решение на тази задача... Опитвам се вече няколко дни, но не мисля че имам някакъв напредък! Благодаря...
Гост
 

Re: Задача на Коши и Интегрална крива

Мнениеот Гост » 16 Юни 2015, 14:44

Гост написа:Някой може ли да ми даде примерно решение на тази задача... Опитвам се вече няколко дни, но не мисля че имам някакъв напредък! Благодаря...

Зад.1 (xy')*2 + 2xy' + y*2=0
а) Да се намерят обикновените точки и точките (X0,Y0) в равнината, за които задачата на Коши за това уравнение с начално условие y(X0)=y0 няма нито едно реално решение
б) Да се реши аналитично задачата на Коши за това уравнение с начално условие у(1)=0
в) Да се начертае в червено интегрална крива през точката (1,0), чиято допирателна в тази точка има отрицателен ъглов коефициент. Ако уравнението има особени точки или особени решения, те да се изобразят на същия чертеж с черни звездички.
Гост
 


Назад към Диференциални уравнения



Кой е на линия

Регистрирани потребители: Google Adsense [Bot], Google [Bot]

Форум за математика(архив)