通过Maple中的for循环定义一组函数

时间:2014-10-16 13:36:18

标签: maple

在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-O)(y轴\ dfrac {2} {3})} {( \ dfrac {3} {4} - \ dfrac {1} {2})(\ dfrac {3} {4} -1)/(\ dfrac {1} {3} -0)(\ dfrac {1} { 3} - \ dfrac {2} {3})} $ enter image description here

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

宏碁的回答:

如果您想要运算符而不是表达式,请使用函数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;