- 作者:xiaoxiao
- 发表时间:2020-12-23 10:59
- 来源:未知
MATLAB与Maple的符号运算 Chinamaker http://www.dytrol.com 动力学与控制技术论坛 一 访问Maple函数 Maple命令非常之多,有几千个,使用都非常灵活多变。考虑到本书的特点,就不详细赘述,只介绍两种最常用的调用格式:maple(statement)和maple('function',arg1,arg2,…)。函数maple用于调用Maple中的符号计算“引擎”和它庞大的函数库,其中的输入参数即可以是符号变量,也可以是数值变量,其输出结构和输入参数的类型相同。 1.maple(statement) 该命令的功能是把对变量、表达式以及函数等的描述(statement)传递到MATLAB的符号运算引擎——Maple V中去,由这个引擎来完成计算任务,返回字符型结果。此函数功能非常强,它可以调用出图像处理函数外的所有函数。例如: dsolve函数是Maple中解微分方程的函数,可以是单个微分方程,也可以是微分方程组。 【实例1】 >> maple(dsolve('(Dy)^2+y^2=1','y(0)=0.5')) ans = [ sin(t+1/6*pi)] [ cos(t+1/3*pi)] 2. maple('function',arg1,arg2,…) 该命令是MATLAB调用Maple函数库的标准形式。输入参数function是函数的名,arg1,arg2,…是function函数的参数,参数个数根据function函数具体确定。 【实例2】 >>maple('mtaylor(exp(x),[x=0],5)') ans = mtaylor(exp(x),[x = 0],5) 注意:Maple有些函数在MATLAB启动时,并没有自动调入内存当中。上面的例子中并没有进行分解,所以在调用这些函数时候必须先读取Maple函数库。 【实例3】 >> maple('readlib(mtaylor)') ans = proc () local f, k, v, m, n, s, t, w; option `Copyright (c) 1991 by……………… 然后我们就重新调用maple('mtaylor(exp(x),[x=0],5)')如下: >> maple('mtaylor(exp(x),[x=0],5)') ans = 1+x+1/2*x^2+1/6*x^3+1/24*x^4 二 运行MAPLE程序 在实际的计算中,也许一般情况下,我们运行单个maple命令即可满足要求,在更复杂的情况下,我们就不得不采用Maple编写的程序。前一种情况,上一节我们已经见过了,而后一种情况就必须有procread和maple配合才能完成。 下面采用配合实例的方法对其用法进行讲解。 【实例4】设计求取一般隐含数f(x,y)=0的导数y'解析解的程序,并要求该程序能像Maple原有函数一样被调用。 读者可参照以下步骤进行: (1)SRC源代码文件的编写; 编写文件DYTROL.src,把它存放在MATLAB的工作目录下(可以放在MATLAB任意可以搜索到的目录下),文件内容为: DYTROL:=proc(f) local Eq,deq,imderiv; Eq:='Eq'; Eq:=f; deq:=diff(Eq,x); readlib(isolate); imderiv:=isolate(deq,diff(y(x),x)); end; (2)将源代码装入Maple工作空间; 运行以下命令把DYTROL.src安装到Maple工作空间: procread('DYTROL.src') %转换SRC代码,装入Maple工作空间 运行后得到: ans = dytrol := proc (f) local Eq, deq, imderiv; Eq := 'Eq'; Eq := f; deq := diff(Eq,x); readlib(isolate); imderiv := isolate(deq,diff(y(x),x)) end (3)借助maple命令调用驻留在内存中的新函数文件; 在MATLAB命令窗口输入命令会立即得到结果,如下: >> s1=maple('DYTROL(x=sin(x+y(x)));') s2=maple('DYTROL(x^2*y(x)-log(2*x)=sin(y(x)))') s3=maple('DYTROL','sin(x+log(y(x)))=cos(y(x))') s1 = diff(y(x),x) = 1/cos(x+y(x))-1 s2 = diff(y(x),x) = (-2*x*y(x)+1/x)/(x^2-cos(y(x))) s3 = diff(y(x),x) = -cos(x+log(y(x)))*y(x)/(cos(x+log(y(x)))+sin(y(x))*y(x)) (4)将DYTROL.src进行预编辑,就成为Maple的内码文件,保存在bin目录中。 上面的程序有个缺点,每次启动MATLAB后都要执行: procread('DYTROL.src') 为了避免这种情况,可遵循以下步骤: 1)清理Maple的工作空间; 2)向该空间中装入源代码; 3)将SRC文件转换成Maple的内码M文件,并保存在mallab/bin目录中; 以DYTROL.src为例,指令集如下: clear maplemex procread('DYTROL.src'); maple('save('DYTROL.m')'); (5)调用Maple自建的内码文件。 maple('read','DYTROL.m'); ss3=maple('DYTROL','sin(x+log(y(x)))=cos(y(x))') s3 = diff(y(x),x) = -cos(x+log(y(x)))*y(x)/(cos(x+log(y(x)))+sin(y(x))*y(x)) 说明:当Maple源文件被procread处理之后,或者M文件被Maple读入工作空间之后,就可以随时使用了,而不必每次都再次读入。 12.3 小 结 版权所有:动力学与控制技术论坛 http://www.dytrol.com (转载说明出处)