实例:将Lagrange算法打包成Python包

本例用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所示。

Document Image

图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环境中的测试结果一致。