321forever 发表于 2011-4-17 19:10

求函数一段区间的反函数

本帖最后由 321forever 于 2011-4-17 19:11 编辑

函数方程是

syms u1 x
y=u1*sqrt(sin(2*x)/(2*pi)+(pi-x)/pi);

我想求x在【0 pi】区间y=f(x)的反函数,谢谢大家帮忙

meiyongyuandeze 发表于 2011-4-17 19:36

本帖最后由 meiyongyuandeze 于 2011-4-17 19:37 编辑

如果函数y是单调的话,可以试下命令finverse finverse(f,x)你自己看下吧,具体可以help下!

321forever 发表于 2011-4-17 23:40

本帖最后由 321forever 于 2011-4-18 00:58 编辑

回复 2 # meiyongyuandeze 的帖子

finverse(y,x)
Warning: finverse(u1*(sin(2*x)/(2*pi) + (pi - x)/pi)^(1/2)) cannot be found.
> In sym.finverse at 43

ans =

[ empty sym ]但这个函数在x=区间,是单调递减的,但我不知道为什么这个反函数求不出来呢。
或是能不能求下在x=区间,将表达式改成x=f(y)的形式。

meiyongyuandeze 发表于 2011-4-18 08:18

回复 3 # 321forever 的帖子

>> syms u1 x
>> y=u1*sqrt(sin(2*x)/(2*pi)+(pi-x)/pi)
y =
1/2*u1*(2*sin(2*x)/pi+4*(pi-x)/pi)^(1/2)
>> finverse(y,x)
ans =
1/2*RootOf(_Z*u1^2-2*pi*u1^2+2*x^2*pi-sin(_Z)*u1^2)

321forever 发表于 2011-4-18 16:21

回复 4 # meiyongyuandeze 的帖子

谢谢了,我按着给出的程序运行了下,没有出来你给的结果,还有程序段第7行的结果也没有看懂,能不能再帮我讲下,看看matlab能不能作出一个区间内的反函数

meiyongyuandeze 发表于 2011-4-18 16:30

本帖最后由 meiyongyuandeze 于 2011-4-18 17:51 编辑

回复 5 # 321forever 的帖子

第七行:要求的反函数是函数(_Z*u1^2-2*pi*u1^2+2*x^2*pi-sin(_Z)*u1^2)等于零的解!,至于你为何没有结果,是不是matlab版本的问题,我的是2007a,估计你的Matlab版本又是2009!
matlab求解出来的类似Rootof,_Z,等等这些函数,RootOf是matlab无法给出函数的具体解析式时的替代品,用数值反代进去求解时matlab也不认识的!

321forever 发表于 2011-4-18 17:18

回复 6 # meiyongyuandeze 的帖子

我的是2009a,估计就不可以了,我把这个式子精简了下,能不能帮我解下,
y=sin(x)-x,在x=时,求x=f(y)

meiyongyuandeze 发表于 2011-4-18 18:12

首先我在我的matlab中运行了下,也是没有得到解析的结果:y=sym('sin(x)-x')
y =
sin(x)-x
>> finverse(y,x)
ans =
RootOf(_Z-sin(_Z)+x)
不知道你为什要求反函数,如果是为了求得给定函数值对应的变量值的话,建议你用数值求解吧!
这里只是自己做的一个例子,不知道对你有帮助没有,求当y=2时的函数值。
首先用ezplot画图,估计出y=2时的x值,大约在-2左右。再用fzero求解对应的x值,应该是可以的吧!
f=@(x)2-sin(x)+x
f =
@(x)2-sin(x)+x
>> z1=fzero(f,-2)
z1 =
-2.5542


ChaChing 发表于 2011-4-18 22:25

finverse函数没使用过, 同样关注下讨论!!

321forever 发表于 2011-4-19 03:17

本帖最后由 321forever 于 2011-4-19 03:33 编辑

回复 8 # meiyongyuandeze 的帖子

fzero这个方法我学习了,对于已知y,求x很有帮助,
但是既然y=sin(x)-x在x=【0 pi】区间,单调递减,应该会有反函数吧,还是即使有反函数也不一定有解析式呢

meiyongyuandeze 发表于 2011-4-19 08:09

回复 10 # 321forever 的帖子

应该是没有解析的结果!只要是单调的函数都应该存在反函数!

ChaChing 发表于 2011-4-19 13:50

meiyongyuandeze 发表于 2011-4-19 08:09 static/image/common/back.gif
回复 10 # 321forever 的帖子

应该是没有解析的结果!只要是单调的函数都应该存在反函数!

Compare !!
>> finverse('sin(x)',x)
Warning: finverse(sin(x)) is not unique.
> In sym.finverse at 46

ans =

asin(x)

>> finverse('sin(x)-x',x)
Warning: finverse(sin(x)-x) cannot be found.
> In sym.finverse at 43

ans =

[ empty sym ]

321forever 发表于 2011-4-19 15:24

本帖最后由 321forever 于 2011-4-19 15:29 编辑

回复 11 # meiyongyuandeze 的帖子
网上搜了下别人说的,
1.定义域和值域分别为D,B,若函数是单调的,无论是增还是减,都能保证x1,x2∈D,x1≠x2,推出f(x1)≠f(x2),f(x1),f(x2)∈B,   因此单调函数存在反函数。
2.并且f(x)是函数,也不一定有解析式,目前所见的函数都有解析式,是因为这样的函数有研究的可能生活中就会有许多函数,比如身体温度与时间的关系,只有统计意义,没有解析式.
所以你说的是没有错误的

3还想问下函数的定义区别。
syms x;y= sin(x). 与 y=@ (x) sin(x)有什么区别

hancy 发表于 2011-4-19 15:55

本帖最后由 hancy 于 2011-4-19 16:01 编辑

321forever 发表于 2011-4-19 15:24 http://www.chinavib.com/static/image/common/back.gif
回复 11 # meiyongyuandeze 的帖子
网上搜了下别人说的,
1.定义域和值域分别为D,B,若函数是单调的,无论 ...

参考
help syms
help function_handle
不过我还看不出来他们的区别,没有中文帮助真的很费力~
sym :构建具有象征意义的数字,变量和对象。可能是用来确定变量的精度,类型的吧
@:是用于创建一个function_handle。

meiyongyuandeze 发表于 2011-4-19 16:39

补充楼上:
@是用来生成匿名函数。
匿名函数提供了一种创建简单程序的方法,使用它用户可以不必每次都编写M文件。匿名函数的格式为:fhandle=@(arglist)expr
其中fhandle是为该函数创建的函数句柄:@符号用於创建函数句柄;arglist为用逗号分隔的参数列表;expr为函数主体,为Matlab表达式。
页: [1] 2
查看完整版本: 求函数一段区间的反函数