не видит переменную внутри процедуры

Форум пользователей пакета Maple

Модератор: Admin

kastasya
Сообщения: 14
Зарегистрирован: Чт июл 14, 2016 12:01 am

не видит переменную внутри процедуры

Сообщение kastasya » Ср май 09, 2018 2:43 pm

Добрый день,

помогите пжл разобраться, почему процедура не видит переменную.

Если сделать так, то все работает:

Код: Выделить всё

>restart;
F := 8*y^2*(3*R^2+2*y^2)/r^4;
G := 24*R^2*y^4/r^6;
sigma := simplify(subs(r = sqrt(x^2+y^2), (1-k[1]+k[2])*R^2*(3-(3*R^2+18*y^2)/r^2+F-G)/(2*r^2)+k[2]*R^2*(1-2*y^2/r^2)/r^2)):
k[1] := E[2]*((3-nu[2])*E[1]+(5+nu[1])*E[2])/((E[1]+2*E[2])^2-(nu[2]*E[1]+(1-nu[1])*E[2])^2);
k[2] := E[2]*((3*nu[2]-1)*E[1]+(1-3*nu[1])*E[2])/((E[1]+2*E[2])^2-(nu[2]*E[1]+(1-nu[1])*E[2])^2);
nu[1] := 1/3; nu[2] := 1/3;
s := simplify(sigma);
>si := proc (x, y) if R <= x^2+y^2 then -(3/2)*R^2*(-(1/3)*y^6+(R^2+(11/3)*x^2)*y^4+(-6*R^2*x^2+3*x^4)*y^2+R^2*x^4-x^6)*(E[1]-E[2])/((x^2+y^2)^4*(E[1]+2*E[2])) else E[2]*((3*nu[2]-1)*E[1]+(1-3*nu[1])*E[2])/((E[1]+2*E[2])^2-(nu[2]*E[1]+(1-nu[1])*E[2])^2) end if end proc:
>R := 1; M := 5;
E[2] := (1/10)*E[1];
plot3d(si, -M .. M, -M .. M, axes = frame);


и получается красивая картинка как надо:
img1.jpg
img1.jpg (18.13 КБ) 257 просмотров


Если же в процедуре после then попытаться ввести переменную s, то процедура ее не видит.... global, local, return(s), внутри процедуры снаружи, все перепробовала.... помогите пжл!

Код: Выделить всё

>restart;
F := 8*y^2*(3*R^2+2*y^2)/r^4;
G := 24*R^2*y^4/r^6;
sigma := simplify(subs(r = sqrt(x^2+y^2), (1-k[1]+k[2])*R^2*(3-(3*R^2+18*y^2)/r^2+F-G)/(2*r^2)+k[2]*R^2*(1-2*y^2/r^2)/r^2)):
k[1] := E[2]*((3-nu[2])*E[1]+(5+nu[1])*E[2])/((E[1]+2*E[2])^2-(nu[2]*E[1]+(1-nu[1])*E[2])^2);
k[2] := E[2]*((3*nu[2]-1)*E[1]+(1-3*nu[1])*E[2])/((E[1]+2*E[2])^2-(nu[2]*E[1]+(1-nu[1])*E[2])^2);
nu[1] := 1/3; nu[2] := 1/3;
s := simplify(sigma);
>si := proc (x, y) if R <= x^2+y^2 then s else E[2]*((3*nu[2]-1)*E[1]+(1-3*nu[1])*E[2])/((E[1]+2*E[2])^2-(nu[2]*E[1]+(1-nu[1])*E[2])^2) end if end proc:
>R := 1; M := 5
E[2] := (1/10)*E[1];
plot3d(si, -M .. M, -M .. M, axes = frame);


Спасибо, с уважением.

kastasya
Сообщения: 14
Зарегистрирован: Чт июл 14, 2016 12:01 am

Re: не видит переменную внутри процедуры

Сообщение kastasya » Ср май 09, 2018 3:04 pm

извините, забыла добавить k[1], k[2], исправила. Вопрос остается открытым

Kitonum
Сообщения: 2050
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: не видит переменную внутри процедуры

Сообщение Kitonum » Ср май 09, 2018 8:55 pm

Интересная проблема! Вероятно это связано с некоторыми специфическими вычислительными правилами в процедурах. Задайте свой вопрос на mapleprimes.com .
Вот способ обойти проблему, используя команду unapply для задания процедуры и команду piecewise вместо if .. end if .

Код: Выделить всё

restart;
F := 8*y^2*(3*R^2+2*y^2)/r^4;
G := 24*R^2*y^4/r^6;
sigma := simplify(subs(r = sqrt(x^2+y^2), (1-k[1]+k[2])*R^2*(3-(3*R^2+18*y^2)/r^2+F-G)/(2*r^2)+k[2]*R^2*(1-2*y^2/r^2)/r^2)):
k[1] := E[2]*((3-nu[2])*E[1]+(5+nu[1])*E[2])/((E[1]+2*E[2])^2-(nu[2]*E[1]+(1-nu[1])*E[2])^2);
k[2] := E[2]*((3*nu[2]-1)*E[1]+(1-3*nu[1])*E[2])/((E[1]+2*E[2])^2-(nu[2]*E[1]+(1-nu[1])*E[2])^2);
nu[1] := 1/3; nu[2] := 1/3;
s := simplify(sigma);
si := unapply(piecewise(R <= x^2+y^2, s, R > x^2+y^2,E[2]*((3*nu[2]-1)*E[1]+(1-3*nu[1])*E[2])/((E[1]+2*E[2])^2-(nu[2]*E[1]+(1-nu[1])*E[2])^2)), x,y);
R := 1; M := 5;
E[2] := (1/10)*E[1];
plot3d(si, -M .. M, -M .. M, axes = frame);

kastasya
Сообщения: 14
Зарегистрирован: Чт июл 14, 2016 12:01 am

Re: не видит переменную внутри процедуры

Сообщение kastasya » Ср май 09, 2018 10:59 pm

спасибо!!!
их тоже озадачила:
https://www.mapleprimes.com/questions/224644-Maple-Doesnt-See-Variable-Inside-Procedure?sq=224644

О результатах отпишусь