Консультация № 180177
06.10.2010, 10:19
0.00 руб.
0 5 1
Здраствуйте. Помогите пожалуйста разобраться. В общем есть пример и мне нужно его разобрать, т.е. например: "Выбираем базисные функции и определяем аппроксимирующую функцию" мне нужно понять для чего выбираем эти функции и т.д. Т.е. подробно расписать решение задания. Решение задания написано на Maple(в приложение).
Условие: Методом Ритца найти экстремаль функционала ... где область интегрирования и граничная функция имеют вид: ...

Приложение:
> restart;
Выбираем базисные функции и определяем аппроксимирующую функцию:
> phi0:=(x,y)->x/10+y^2/50;
> phi:=(x,y,i,j)->sin(i*Pi*(x-x1)/(x2-x1))*sin(j*Pi*(y-y1)/(y2-y1));
> u:=proc(x,y,M,N)option operator,arrow; local n,m;
phi0(x,y)+sum(sum(a[m,n]*phi(x,y,m,n),`m`=1..M),`n`=1..N);
end proc;

Разработаем процедуру для автоматического составления и решения уравнений метода Ритца для нашего функционала:
> Ritz1:=proc(F,M,N,a)local Fu,eqns,var,eq,i,j,res;
Fu:=simplify(int(int(F,x=0..1),y=0..2));
eqns:={}:var:={}:
for i from 1 to M do
for j from 1 to N do
var:=var union {a[i,j]};
eq[i,j]:=diff(Fu,a[i,j])=0;
eqns:=eqns union {eq[i,j]};
od:od:
res:=solve(eqns,var);
assign(res);
end proc:

Вводим граничные точки:
> x1:=0;y1:=0;x2:=1;y2:=2;

Задаем шаг сечений и строим по три секущих плоскости по х и по у:
> hx:=(x2-x1)/4; xs1:=x1+hx; xs2:=x1+2*hx ;xs3:=x1+3*hx;
hy:=(y2-y1)/4; ys1:=y1+hy; ys2:=y1+2*hy; ys3:=y1+3*hy;


Задаем подынтегральную функцию:
> F:=diff(z(x,y),x)^2-2*diff(z(x,y),y)^2+2*y*z(x,y)*(sin(Pi*x)+x/5);

Задаем количество базисных функций для аппроксимации решения. Решаем задачу в первом приближении, строим трехмерный график функции u(x,y) – решения задачи:
> M:=1;N:=1;
a:=array(1..M,1..N):
F2:=subs(z(x,y)=u(x,y,M,N),F):Ritz1(F2,M,N,a):
z1:=u(x,y,M,N);z1short:=evalf[5](z1);
p3d_1:=plot3d([0,z1],x=0..1,y=0..2,style=wireframe,color=[GREY,GREEN],view=-0.3..0.2,orientation=[130,70],title=cat(`approximation M = N = `,convert(M,string)),axes=BOXED):
plots[display](p3d_1);

Вычисляем сечения поверхности решения:
> px1_1:=plot(u(x,ys1,M,N),x=0..1,color=GREEN, view=[0..1,-0.3..0.2],
legend=cat(`ys1 = `,convert(ys1,string),` M=1, N=1`)):
> py1_1:=plot(u(xs1,y,M,N),y=0..2,color=GREEN, view=[0..2,-0.3..0.2],
legend=cat(`xs1 = `,convert(xs1,string),` M=1, N=1`)):
> px2_1:=plot(u(x,ys2,M,N),x=0..1,color=GREEN, view=[0..1,-0.3..0.2],
legend=cat(`ys2 = `,convert(ys2,string),` M=1, N=1`)):
> py2_1:=plot(u(xs2,y,M,N),y=0..2,color=GREEN, view=[0..2,-0.3..0.2],
legend=cat(`xs2 = `,convert(xs2,string),` M=1, N=1`)):
> px3_1:=plot(u(x,ys3,M,N),x=0..1,color=GREEN, view=[0..1,-0.3..0.2],
legend=cat(`ys3 = `,convert(ys3,string),` M=1, N=1`)):
> py3_1:=plot(u(xs3,y,M,N),y=0..2,color=GREEN, view=[0..2,-0.3..0.2],
legend=cat(`xs3 = `,convert(xs3,string),` M=1, N=1`)):

Строим двумерные графики в сечениях:
> plots[display](px1_1); plots[display](px2_1); plots[display](px3_1);
plots[display](py1_1); plots[display](py2_1); plots[display](py3_1);

Второе приближение:
> M:=2;N:=2;
a:=array(1..M,1..N):
F2:=subs(z(x,y)=u(x,y,M,N),F):Ritz1(F2,M,N,a):
z1:=u(x,y,M,N);z1short:=evalf[5](z1);
p3d_2:=plot3d([0,z1],x=0..1,y=0..2,style=wireframe,color=[GREY,BLUE],view=-0.3..0.2,orientation=[130,70],title=cat(`approximation M = N = `,convert(M,string)),axes=BOXED):
plots[display](p3d_2);

> px1_2:=plot(u(x,ys1,M,N),x=0..1,color=BLUE, view=[0..1,-0.3..0.2],
legend=cat(`ys1 = `,convert(ys1,string),` M=2, N=2`)):
> py1_2:=plot(u(xs1,y,M,N),y=0..2,color=BLUE, view=[0..2,-0.3..0.2],
legend=cat(`xs1 = `,convert(xs1,string),` M=2, N=2`)):
> px2_2:=plot(u(x,ys2,M,N),x=0..1,color=BLUE, view=[0..1,-0.3..0.2],
legend=cat(`ys2 = `,convert(ys2,string),` M=2, N=2`)):
> py2_2:=plot(u(xs2,y,M,N),y=0..2,color=BLUE, view=[0..2,-0.3..0.2],
legend=cat(`xs2 = `,convert(xs2,string),` M=2, N=2`)):
> px3_2:=plot(u(x,ys3,M,N),x=0..1,color=BLUE, view=[0..1,-0.3..0.2],
legend=cat(`ys3 = `,convert(ys3,string),` M=2, N=2`)):
> py3_2:=plot(u(xs3,y,M,N),y=0..2,color=BLUE, view=[0..2,-0.3..0.2],
legend=cat(`xs3 = `,convert(xs3,string),` M=2, N=2`)):

> plots[display](px1_2); plots[display](px2_2); plots[display](px3_2);
plots[display](py1_2); plots[display](py2_2); plots[display](py3_2);

Третье приближение:
> M:=3;N:=3;
a:=array(1..M,1..N):
F2:=subs(z(x,y)=u(x,y,M,N),F):Ritz1(F2,M,N,a):
z1:=u(x,y,M,N);z1short:=evalf[5](z1);
p3d_3:=plot3d([0,z1],x=0..1,y=0..2,style=wireframe,color=[GREY,RED],view=-0.3..0.2,orientation=[130,70],title=cat(`approximation M = N = `,convert(M,string)),axes=BOXED):
plots[display](p3d_3);

> px1_3:=plot(u(x,ys1,M,N),x=0..1,color=RED, view=[0..1,-0.3..0.2],
legend=cat(`ys1 = `,convert(ys1,string),` M=3, N=3`)):
> py1_3:=plot(u(xs1,y,M,N),y=0..2,color=RED, view=[0..2,-0.3..0.2],
legend=cat(`xs1 = `,convert(xs1,string),` M=3, N=3`)):
> px2_3:=plot(u(x,ys2,M,N),x=0..1,color=RED, view=[0..1,-0.3..0.2],
legend=cat(`ys2 = `,convert(ys2,string),` M=3, N=3`)):
> py2_3:=plot(u(xs2,y,M,N),y=0..2,color=RED, view=[0..2,-0.3..0.2],
legend=cat(`xs2 = `,convert(xs2,string),` M=3, N=3`)):
> px3_3:=plot(u(x,ys3,M,N),x=0..1,color=RED, view=[0..1,-0.3..0.2],
legend=cat(`ys3 = `,convert(ys3,string),` M=3, N=3`)):
> py3_3:=plot(u(xs3,y,M,N),y=0..2,color=RED, view=[0..2,-0.3..0.2],
legend=cat(`xs3 = `,convert(xs3,string),` M=3, N=3`)):
> plots[display](px1_3); plots[display](px2_3); plots[display](px3_3);
plots[display](py1_3); plots[display](py2_3); plots[display](py3_3);

Совмещаем три поверхности приближения:
plots[display](p3d_1,p3d_2,p3d_3);

Совмещаем приближения в плоскостях сечений:
> plots[display](px1_1,px1_2,px1_3);
plots[display](px2_1,px2_2,px2_3);
plots[display](px3_1,px3_2,px3_3);
> plots[display](py1_1,py1_2,py1_3);
plots[display](py2_1,py2_2,py2_3);
plots[display](py3_1,py3_2,py3_3);


Обсуждение

давно
Мастер-Эксперт
325460
1469
06.10.2010, 10:55
общий
это ответ
Здравствуйте, Azarov88.
вот две ссылки где расписан метод Ридца
http://cultinfo.ru/fulltext/1/001/008/097/114.htm
http://www.intuit.ru/department/calculate/nmdiffeq/7/2.html
там все доскональна расписано и приведены примеры, нужно только переложить на свою задачу, Maple не знаю поэтому пояснения по коду могут быть не верными не буду их писать, да и лучше бы вы дописали полное условие задачи, что за функция и наверняка в условии базис предлагается.
Об авторе:
to live is to die
давно
Мастер-Эксперт
17387
18353
06.10.2010, 14:16
общий
cradlea:
Здравствуйте!

Вы явно торопитесь набрать баллы. То что Вы написали, ответом по существу не является. Вам следовало или узнать у автора вопроса, что ему непонятно: или язык, используемый в Maple, или метод Ритца, а также попросить его привести полное условие задания.

С уважением.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
17387
18353
06.10.2010, 14:19
общий
Azarov88:
Здравствуйте!

Если не трудно, уточните, пожалуйста, что является для Вас непонятным: метод Ритца или решение, записанное на языке, ипользуемом в Maple? И каково полное условие задания?

С уважением.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
17387
18353
06.10.2010, 14:33
общий
cradlea:
Поэтому я и написал Вам, что ответ по существу не дан. В любом случае эта ситуация будет оценена при Вашем экзамене на повышение статуса.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
325460
1469
06.10.2010, 14:43
общий
да тут к сожалению немного не разобрался в сущности ответа на вопрос, мини форумом не пользовался моя вина - согласен.
уточнять нужно здесь, буду иметь ввиду.
Об авторе:
to live is to die
Форма ответа