在Maple中,我想通过两个for循环定义一组函数:
printlevel:=2;
# Node coordinates.
N_x:=5;
N_y:=4;
N_elx:=N_x-1;
N_ely:=N_y-1;
h_x:=(x_e-x_s)/N_elx;
h_y:=(y_e-y_s)/N_ely;
x_n:=[seq(x_s+j*h_x,j=0..N_elx)];
y_n:=[seq(y_s+j*h_y,j=0..N_ely)];
# Partition of unity.
for j from 2 by 1 to N_x-1 do
for k from 2 by 1 to N_y-1 do
phi[j,k]:=(x,y)->(x-x_n[j-1])*(x-x_n[j+1])*(y-y_n[k-1])*(y-y_n[k+1])/((x_n[j]-x_n[j-1])*(x_n[j]-x_n[j+1])*(y_n[k]-y_n[k-1])*(y_n[k]-y_n[k+1]));
od;
od;
然而,这使输出其中[j,k]
不同,但x_n[j-1]
,x_n[j+1]
,y_n[j-1]
和y_n[j+1]
不被评估。因此,功能定义不正确。例如,使用调用j=4,k=2
函数phi[4,2](x,y);
,我得到输出
phi[4, 2] called with arguments: x, y
#(phi[4,2],1): (x-x_n[j-1])*(x-x_n[j+1])*(y-y_n[k-1])*(y-y_n[k+1])/(x_n[j]-x_n[j-1])/(x_n[j]-x_n[j+1])/(y_n[k]-y_n[k-1])/(y_n[k]-y_n[k+1])
Error, (in phi[4, 2]) invalid subscript selector
而不是所需的输出
$ \ phi_ {4,2}:= \ dfrac {(x-x_3)(x-x_5)(y-y_1)(y-y_3)} {(x_4-x_3)(x_4-x_5)(y_2-y_1) (y_2-y_3)} = \ dfrac {(x- \ dfrac {1} {2})(x-1)(y-0)(y- \ dfrac {2} {3})} {(\ dfrac { 3} {4}-\ dfrac {1} {2})(\ dfrac {3} {4} -1)/(\ dfrac {1} {3} -0)(\ dfrac {1} {3}- \ dfrac {2} {3})} $
我该如何解决?
来自宏cer的回答:
如果要使用运算符而不是表达式,请使用函数unapply
:
N_x:=5;
N_y:=4;
N_elx:=N_x-1;
N_ely:=N_y-1;
h_x:=(x_e-x_s)/N_elx;
h_y:=(y_e-y_s)/N_ely;
x_n:=[seq(x_s+j*h_x,j=0..N_elx)];
y_n:=[seq(y_s+j*h_y,j=0..N_ely)];
# Partition of unity.
for j from 2 by 1 to N_x-1 do
for k from 2 by 1 to N_y-1 do
phi[j,k]:=unapply( (x-x_n[j-1])*(x-x_n[j+1])
*(y-y_n[k-1])*(y-y_n[k+1])
/((x_n[j]-x_n[j-1])*(x_n[j]-x_n[j+1])
*(y_n[k]-y_n[k-1])*(y_n[k]-y_n[k+1])),
[x,y]);
od;
od;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句