加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab符号表达式的用法(2)

(2009-12-08 17:22:29)
标签:

杂谈

分类: MatlabStudy

感谢xiaohu0628的整理 http://xiaohu0628.bokee.com/viewdiary.13530825.html

 

符号表达式的化简和替换

化简

数学表达式有各种不同的形式,对于具体问题,他们各具特点:例如对于多项式有普通的降幂排列x的幂的多项式,也可以写成因子乘积,还可以写成嵌套形式。工具箱应用各种代数的和三角法恒等式把一个函数的表达式转换成另外一种等价的表达式。

collect(f)f看成一个变量为x多项式,然后进行计算得到所有关于x幂的系数。也可以指定变量得到指定变量的降幂系数形式。

Expand(f) 将表达式展开成每项最简单函数的表达式,合并相同项,不限于多项式

Horner(f) 将符号多项式表达式变换成嵌套使得表达式 例如f=x^3-6*x^2+11*x-6

              horner(f)= -6+(11+(-6+x)*x)*x

factor(f) 如果f是一个有理数多项式,返回表达式的低次幂的有理数多项式因子乘积,如果找不到返回f,f可以是符号表达式矩阵

simplify(f) 利用大量的代数恒等式包括求和、整数幂、开方、分数幂以及大量的函数恒等式包括三角函数、指数函数、对数函数、贝塞尔函数、超几何分布函数、伽马函数来对表达式进行化简

simple(f) 也是一种化简的函数,但他是一个非数学目的的化简,仅仅是找到包含最小字符数的表达式,但这种化简也是在其他化简的基础上进行,所以也可以得到比较满意的结果。

 

替换

pretty(s) 用来对符号表达式显示为正常可读性的形式

一般Matlab为了表达形式的简单,通常会用大%n,n为整数型数字来表达一个子表达式,这个子表达式会在结果中多次出现,所以用%n可以简化。

subexpr(s) 将表达式s中的子表达式以符号表达式形式存储在列向量sigma

v = subexpr(v,'S') Matlab会将V表达式中多次出现的长的表达式用S来替换

subs(S,{a,b,c},{10,2,10}) 替换符号表达式中a,b,c为相应的数值

subs还可以用一个列向量数值来替换S中的一个变量得到结果是列向量,如果结果是数值的话,可以用double将其转换

 

变精度算符

Matlab中有三种算符操作

Numeric 浮点数算术

Rational 准确地符号算术

VPA 可变精度算术

例如:

format long 1/2+1/3 返回长整型的数值计算结果

sym(1/2)+1/3 返回一个有理符号计算结果

digits(25) vpa('1/2+1/3') 返回精度为25的数值计算结果

浮点数数值计算是这三个运算中最快的,而且要求的内存也最少,但是结果不是最精确的。

一般他的输出由format 定义。

符号有理运算是最耗时间和内存的,但结果最为精确。

 

符号表达式的线性代数运算

基本的矩阵运算和数值运算中一致

H=hilb(3) 产生一个3*3Hilbert矩阵,H = sym(H) 可以对H进行任意的矩阵运算了

同时如果H是符号表达式

Inv 求逆,det求行列式,nullH的零空间,colspaceH的列空间

Eig求矩阵H的特征值和特征向量

Poly 计算H的特征多项是

[V,J] = jordan(A) 通过相似变换得到AJordan矩阵

[U,S,V] = svd(A); 奇异值分解只能针对可变精度和浮点数据

 

符号表达式求解代数方程

solve(S)S=0的解

s = solve('cos(2*x)+sin(x)=1') 也可以是方程形式

[x,y] = solve(x^2*y^2, x-y/2-alpha) 也可以求代数方程组

dsolve('Dy=1+y^2') 计算普通微分方程的符号解,通过字母D来表示微分D2,D3,Dn表示n阶微分。默认的自变量是t,这个自变量可以改变,同时还可以给出初始条件。因变量紧跟在D的后边。

y = dsolve('Dy=1+y^2','y(0)=1') 给出初始条件

y = dsolve('D2y=cos(2*x)-y','y(0)=1','Dy(0)=0', 'x');给出自变量

S = dsolve('Df = 3*f+4*g', 'Dg = -4*f+3*g') 可以求解微分方程组

 

特殊的数学函数

超过50个常用的数学函数可以在这个工具箱中获得。这些函数通过M文件获得,他们都只能数值计算给定参数的函数值。

help mfunlist 用来查询工具箱中的这些可用的函数,从显示列表中,例如可以找到双曲余弦积分被定义为Chi,带有复参数。

Mhelp Chi 获得更加详细的帮助

z = [2+i 0 4.5];

w = mfun('Chi',z) 其调用过程

mfun中能调用的这些特殊函数有:

Airy Functions

Binomial Coefficients

Riemann Zeta Functions

Bernoulli Numbers and Polynomials

Euler Numbers and Polynomials

Harmonic Function

Exponential Integrals

Logarithmic Integral

Sine and Cosine Integrals

Hyperbolic Sine and Cosine Integrals

Shifted Sine Integral

Fresnel Sine and Cosine Integral

Dawson's Integral Error Function

Complementary Error Function and its Iterated Integrals

Gamma Function Logarithm of the Gamma Function

Incomplete Gamma Function

Digamma Function

Polygamma Function

Generalized Hypergeometric Function

Bessel Functions

Incomplete Elliptic Integrals

Complete Elliptic Integrals

Complete Elliptic Integrals with Complementary

Modulus Beta Function

Dilogarithm Integral

Lambert's W Function

Dirac Delta Function (distribution)

Heaviside Function (distribution)

工具箱扩充的正交多项式

Gegenbauer

Hermite

Laguerre

Generalized Laguerre

Legendre

acobi

Chebyshev of the First and Second Kind

 

如何使用Maple函数

Maple 可以让你直接访问Maple函数。这个函数以符号对象、字符串、double作为输入,输出和输入相应的结果。还可以使用maple函数编译你所编写的符号数学程序。

例如maple('gcd(14, 21)')maple调用maple内核中的gcd来求两个证书的最大公因数

maple('gcd(x^2-y^2,x^3-y^3)') 求最大公因子

如果你想用maple命令在matlab环境下的任何地方使用gcd,你可以编制一个M文件来表示它。例如

function g = gcd(a, b)

g = maple('gcd',a, b);

江这个文件保存到目录toolbox/symbolic/@sym下,就可以随意调用gcd

对于矩阵的处理可以如下

function y = sin1(x)

 

for k = 1: prod(size(x))

   y(k) = maple('sin',x(k));

end

y = reshape(y,size(x));

效率更高的方法,只访问一次maple

function y = sin2(x)

 

if  prod(size(x)) == 1

% scalar case

   y = maple('sin',x);

 

else

% array case

   y = maple('map','sin',x);

end

Maple命令提供了两种编译设备:跟踪方式(trace mode)和状态输出参数(Status Output Argument)

maple traceon

a = sym('a');

exp(2*a)

状态输出参数

[result, status] = maple('discrim', a*x^2+b*x+c)

 

扩展的符号数学工具箱

扩展的符号数学工具箱允许访问所有的非图形化Maple包、Maple编程特性和Maple程序。

Maple编程特性包含了循环和条件表达。

也可以通过扩展符号数学工具箱使用特别的程序库或者程序包。

mhelp index[packages] 同过它来获得Maple包的名字

mhelp orthopoly 获得orthopoly的信息

maple来装载这个函数包,这样就在Maple空间中装载了这些函数,然后就可以正常使用了

Access To Maple

Maple  Access Maple kernel

Mapleinit Initialize Maple

Mfun Numeric uation of Maple functions

Mhelp Maple help

Mfunlist List of functions for mfun

Procread Install a Maple procedure

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有