这个 Matlab 代码的 Maple 翻译是什么?

what is the Maple translation for this Matlab code?

uu = polyval(polyfit(x,u,N),xx); % interpolate grid data

上面的代码是用Matlab写的。如何在 Maple 中编写此语句?

您没有显示 xuxx 使用您的示例数据。那我补上吧。

以下生成 P3,可以按元素应用于向量 xx。它在 xx.

的每个点插入 N-1 次多项式
restart;
Digits:=15:
N:=20:
(a,b):=0,2*Pi:
x:=Vector([seq(evalf(a)..evalf(b), evalf((b-a)/(N-1)))],
          datatype=float[8]):
u:=map(sin, x):
xx:=Vector([seq(evalf(a)..evalf(b), 0.5)],
           datatype=float[8]):

P3:=Interpolation:-SplineInterpolation(x,u,degree=N-1,
      endpoints=notaknot):

P3~(xx);

调用 P3~(xx) 逐个元素地执行。但是 Interpolate 命令返回的插值函数也知道如何自动(按元素)对整个 Vector xx 执行操作,因此下面应该更有效,

P3(xx);

那个例子是一维数据。还有其他方法可以获得类似的结果,显式生成多项式插值。但在对 xx 数据进行评估时,它们的效率较低。

restart;
Digits:=15:
N:=20:  (a,b):=0,2*Pi:
x:=Vector([seq(evalf(a)..evalf(b), evalf((b-a)/(N-1)))],
          datatype=float[8]):
u:=map(sin, x):
xx:=Vector([seq(evalf(a)..evalf(b), 0.5)],
           datatype=float[8]):
P1:=unapply(CurveFitting:-PolynomialInterpolation(x,u,'t'),'t'):
P2:=unapply(CurveFitting:-Spline(x,u,'t',degree=N-1,endpoints=notaknot),'t'):
P3:=Interpolation:-SplineInterpolation(x,u,degree=N-1,endpoints=notaknot):
sin~(xx);
P1~(xx);
P2~(xx);
P3~(xx);
plots:-display(
 plot(sin, a..b, color=gray),
 plots:-pointplot(<xx|P1~(xx)>, color=blue, symbol=circle, symbolsize=25),
 plots:-pointplot(<xx|P2~(xx)>, color=red, symbol=circle, symbolsize=16),
 plots:-pointplot(<xx|P3~(xx)>, color=black, symbol=solidcircle, symbolsize=5)
);

如果您有更大维度(例如二维)的数据 xuxx,请提供更详细的明确示例。

[edit] 这里的数据可能更符合您在评论中(稍后)提供的示例。四种方法(生成 16 次多项式)的结果彼此吻合得很好。他们似乎也与 Matlab 计算的 uu 非常吻合。

对您来说重要的是当 在所需范围内(即 xx)评估 时插值多项式提供的精度。 对您来说重要的是一种方法的特定系数是否与另一种方法的系数紧密匹配。

使用插值的方法:-SplineInterpolation 是这四种方法中最有效的。

restart;
Digits := 15:
x := <1.0000e+00,9.8079e-01,9.2388e-01,8.3147e-01,7.0711e-01,5.5557e-01,
  3.8268e-01,1.9509e-01,6.1232e-17,-1.9509e-01,-3.8268e-01,-5.5557e-01,
  -7.0711e-01,-8.3147e-01,-9.2388e-01,-9.8079e-01,-1.0000e+00>:
u := <0,-0.2197,-0.7659,-1.3860,-1.8554,-2.0776,-2.0706,-1.9031,
  -1.6443,-1.3454,-1.0405,-0.7524,-0.4970,-0.2863,-0.1294,-0.0327,0>:
xx := <seq(-1..1,0.01)>:
exact := map(t->evalhf((exp(4*t)-sinh(4)*t-cosh(4))/16), xx):

P3:=Interpolation:-SplineInterpolation(x,u,degree=16,endpoints=notaknot):
uu3 := P3(xx):
plots:-display(
  plot([ <xx|(uu3)> ], style=point, color=black),
  plot(t->(exp(4*t)-sinh(4)*t-cosh(4))/16, -1..1, color=red)
);
plot([ <xx|(uu3-exact)> ]):

P4 := unapply(Statistics:-PolynomialFit(16, x, u, 't'), 't'):
uu4 := map[evalhf](P4,xx):
plot([ <xx|(uu4-exact)> ]);
plots:-display(
  plot([ <xx|(uu4)> ], style=point, color=black),
  plot(t->(exp(4*t)-sinh(4)*t-cosh(4))/16, -1..1, color=red)
);

P1:=unapply(CurveFitting:-PolynomialInterpolation(x,u,'t'),'t'):
uu1 := map[evalhf](P1,xx):
plot([ <xx|(uu1-exact)> ]);
plots:-display(
  plot([ <xx|(uu1)> ], style=point, color=black),
  plot(t->(exp(4*t)-sinh(4)*t-cosh(4))/16, -1..1, color=red)
);

P2:=unapply(CurveFitting:-Spline(x,u,'t',degree=16,endpoints=notaknot),'t'):
uu2 := map[evalhf](P2,xx):
plot([ <xx|(uu2-exact)> ]);
plots:-display(
  plot([ <xx|(uu2)> ], style=point, color=black),
  plot(t->(exp(4*t)-sinh(4)*t-cosh(4))/16, -1..1, color=red)
);