matlab求数学表达式分子分母,怎样提取表达式的分子和分母?
MATLAB中所有符号函数(很少特殊例外的情况,讨论于后)作用到符号表达式和符号数组,并返回符号表达式或数组。其结果有时可能看起来象一个数字,但事实上它是一个内部用字符串表示的一个符号表达式。正如我们前面所讨论的,可以运用MATLAB函数isstr来出像似数字的表达式是否真是一个整数或是一个字符串。
提取分子和分母
如果表达式是一个有理分式(两个多项式之比),或是可以展开为有理分式(包括哪些分母为1的分式),可利用numden来提取分子或分母。例如,给定如下的表达式:
在必要时,numden将表达式合并、有理化并返回所得的分子和分母。进行这项运算的MATLAB语句是:
>> m= ' x^2
' % create a
simple expression
m= x^2
>>
[n,d]=numden(m) % extract the
numerator and denominator
n= x^2
d= 1
>> f= '
a*x^2/(b-x) ' % create a rational expression
f= a*x^2/(b-x)
>>
[n,d]=numden(f) % extract the
numerator and denominator
n= a*x^2
d= b-x
前二个表达式得到期望结果。
>> g= '
3/2*x^2+2/3*x-3/5 ' % rationalize and extract the parts
g= 3/2*x^2+2/3*x-3/5
>>
[n,d]=numden(g)
n= 45*x^2+20*x-18
d= 30
>> h= '
(x^2+3)/(2*x-1)+3*x/(x-1) ' % the sum of rational polynomials
h= (x^2+3)/(2*x-1)+3*x/(x-1)
>>
[n,d]=numden(h) % rationalize
and extract
n= x^3+5*x^2-3
d= (2*x-1)*(x-1)
在提取各部分之前,这二个表达式g和h被有理化,并变换成具有分子和分母的一个简单表达式。
>> k=sym( '
[3/2,(2*x+1)/3;4/x^2,3*x+4] ' ) % try a symbolic array
k=
[ 3/2,(2*x+1)/3]
[4/x^2, 3*x+4]
>> [n,d]=numden(k)
n=
[3, 2*x+1]
[4, 3*x+4]
d=
[ 2,3]
[x^2,1]
这个表达式k是符号数组,numden返回两个新数组n和d,其中n是分子数组,d是分母数组。如果采用s=numden(f)形式,numden仅把分子返回到变量s中。
高级运算
MATLAB7.0具有对符号表达式执行更高级运算的功能。函数compose把f(x)和g(x)复合成f(g(x))。函数finverse求表达式的函数逆,而函数symsum求表达式的符号和。
给定表达式
>> f= ' 1/(1+x^2) ' ;
% create the four expression
>> g= ' sin(x) ' ;
>> h= ' 1/(1+u^2) ' ;
>> k=' sin(v) ' ;
>> compose(f,g) % find an expression for f(g(x))
ans=
1/(1+sin(x)^2)
>> compose(g,f) % find an expression for g(f(x))
ans=
sin(1/(1+x^2))
compose也可用于含有不同独立变量的函数表达式。
>>
compose(h,k,'u','v') % given
h(u),k(v),find(k(v))
ans=
1/(1+sin(v)^2)
表达式譬如f(x)的函数逆g(x),满足g(f(x))=x。例如, 的函数逆是ln(x),因为ln(
)=x。sin(x)的函数逆是arcsin(x),函数 的函数逆是arcsin
。函数fincerse返回表达式的函数逆。如果解不是唯一就给出警告。
>> finverse( '
1/x) % the inverse of 1/x is
1/x since ' 1/(1/x)=x '
ans=
1/x
>> finverse( ' x^2 '
) % g(x^2)=x has more than one
solution
Warning: finverse(x^2) is not unique
ans=
x^(1/2)
字符串函数怎么获取>> finverse( ' a*x+b '
) % find the solution
to ' g(f(x))=x '
ans=
-(b-x)/a
>> finverse( ' a*b+c*d-a*z ' ), '
a ' ) % find the solution
to ' g(f(a))=a '
ans=
-(c*d-a)/(b-z)
symsun函数求表达式的符号和有四种形式:symsun(f)返回;symsum(f, ' s '
)返回,symsun(f,a,b)返回;最普通的形式symsun(f, ' s ' ,a,b)返回。
让我们试一试,它应返回: 。
>> symsum('x^2')
ans=
1/3*x^3-1/2* x^2+1/6*x
又怎么样呢?它应返回 。
>> sym('(2*n-1)^2',1,'n')
ans=
11/3*n+8/3-4*(n+1)^2+4/3*(n+1)^3
>> factor(ans) % change the form ( we will revisit 'factor'
later on)
ans=
1/3*n*(2*n-1)*(2*n+1)
最后让我们试一试 ,其返回应是 。
>> symsum( ' 1/(2*n-1)^2 '
,1,inf)
ans=
1/8*pi^2
标准代数运算
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论