本例用MATLAB M文件实现Lagrange插值算法,将它编译成Python包,然后在Python中导入并调用计算方法进行插值。[大谦MATLAB,dqmatlab点com]
1 用MATLAB实现算法
Lagrange插值算法的代码如下所示,保存为Lagrange.m。
code.matlab
function s=Lagrange(x,y,x0)
% Lagrange插值,x和y为已知的插值点及其函数值
% x0为要求的插值点的x值
nx=length(x);
ny=length(y);
if nx~=ny
warning('矢量x与y的长度应该相同')
return
end
m=length(x0);
%按照公式,对要求的插值点矢量x0的每个元素进行计算
for i=1:m
t=0.0;
for j=1:nx
u=1.0;
for k=1:nx
if k~=j
u=u*(x0(i)-x(k))/(x(j)-x(k));
end
end
t=t+u*y(j);
end
s(m)=t;
end
return
在MATLAB命令窗口对程序进行测试,根据x和y的数据求1.4,2.5和3.7三个点上的值。
code.matlab
>> x=[1 2 3 4 5];
>> y=[2 4 6 8 10];
>> Lagrange(x,y,[1.4 2.5 3.7])
ans =
0 0 7.4000
2 创建Python包
在MATLAB命令窗口键入
code.matlab
>> libraryCompiler
打开库编译器。在工具栏中的“TYPE”列表框中选择“Python Package”选项,单击“EXPORTED FUNCTIONS”列表框右边的加号按钮,添加前面创建的M文件Lagrange.m,在“Library Information”部分将Library Name设置为“IP”。如图3-10所示。
图3-10 在库编译器中进行设置
单击工具栏中的“Package”按钮,打包程序集。生成的文件和目录包括:
- for_redistribution目录 – 包含安装应用程序和MATLAB运行时的文件。
- for_testing目录 – 包含mcc创建的所有文件,用于测试安装。
- for_redistribution_files_only目录 – 包含应用程序重新发布所需要的文件。
- PackagingLog.txt – 编译器生成的日志文件。
- 在Python编程环境中使用Python包
按照3.2节的介绍运行Python安装脚本并设置环境变量。
在Python窗口依次输入下面的命令行,调用Python包IP的Lagrange方法进行插值计算。
code.python
>>> import IP
>>> import matlab
>>> myIP=IP.initialize()
>>> m1=matlab.double([1,2,3,4,5])
>>> m2=matlab.double([2,4,6,8,10])
>>> m3=matlab.double([1.4,2.5,3.7])
>>> cs=myIP.Lagrange(m1,m2,m3)
>>> print(cs)
[[0.0,0.0,7.3999999999999995]]
计算结果与MATLAB原函数在MATLAB环境中的测试结果一致。