声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5657|回复: 18

[编程技巧] 求函数一段区间的反函数

  [复制链接]
发表于 2011-4-17 19:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

函数方程是

  1. syms u1 x
  2. y=u1*sqrt(sin(2*x)/(2*pi)+(pi-x)/pi);
复制代码

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

使用道具 举报

发表于 2011-4-17 19:36 | 显示全部楼层
本帖最后由 meiyongyuandeze 于 2011-4-17 19:37 编辑

如果函数y是单调的话,可以试下命令finverse
  1. finverse(f,x)
复制代码
你自己看下吧,具体可以help下!
 楼主| 发表于 2011-4-17 23:40 | 显示全部楼层
本帖最后由 321forever 于 2011-4-18 00:58 编辑

回复 2 # meiyongyuandeze 的帖子

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

  4. ans =

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

点评

赞成: 5.0
赞成: 5
赞同!没必要什么都要计算机来做,对于简单的函数自己可以求解的!  发表于 2011-4-18 09:03
计算机只是机械性的计算,你先自己求下反函数,如果你求不出来的话,那计算机应该也没有办法  发表于 2011-4-18 08:54
发表于 2011-4-18 08:18 | 显示全部楼层
回复 3 # 321forever 的帖子
  1. >> syms u1 x
  2. >> y=u1*sqrt(sin(2*x)/(2*pi)+(pi-x)/pi)
  3. y =
  4. 1/2*u1*(2*sin(2*x)/pi+4*(pi-x)/pi)^(1/2)
  5. >> finverse(y,x)
  6. ans =
  7. 1/2*RootOf(_Z*u1^2-2*pi*u1^2+2*x^2*pi-sin(_Z)*u1^2)
复制代码

评分

1

查看全部评分

 楼主| 发表于 2011-4-18 16:21 | 显示全部楼层
回复 4 # meiyongyuandeze 的帖子

谢谢了,我按着给出的程序运行了下,没有出来你给的结果,还有程序段第7行的结果也没有看懂,能不能再帮我讲下,看看matlab能不能作出一个区间内的反函数
发表于 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也不认识的!
 楼主| 发表于 2011-4-18 17:18 | 显示全部楼层
回复 6 # meiyongyuandeze 的帖子

我的是2009a,估计就不可以了,我把这个式子精简了下,能不能帮我解下,
y=sin(x)-x,在x=[0 2pi]时,求x=f(y)
发表于 2011-4-18 18:12 | 显示全部楼层
首先我在我的matlab中运行了下,也是没有得到解析的结果:
  1. y=sym('sin(x)-x')
  2. y =
  3. sin(x)-x
  4. >> finverse(y,x)
  5. ans =
  6. RootOf(_Z-sin(_Z)+x)
复制代码

不知道你为什要求反函数,如果是为了求得给定函数值对应的变量值的话,建议你用数值求解吧!
这里只是自己做的一个例子,不知道对你有帮助没有,求当y=2时的函数值。
首先用ezplot画图,估计出y=2时的x值,大约在-2左右。再用fzero求解对应的x值,应该是可以的吧!
  1. f=@(x)2-sin(x)+x
  2. f =
  3. @(x)2-sin(x)+x
  4. >> z1=fzero(f,-2)
  5. z1 =
  6. -2.5542
复制代码



发表于 2011-4-18 22:25 | 显示全部楼层
finverse函数没使用过, 同样关注下讨论!!
 楼主| 发表于 2011-4-19 03:17 | 显示全部楼层
本帖最后由 321forever 于 2011-4-19 03:33 编辑

回复 8 # meiyongyuandeze 的帖子

fzero这个方法我学习了,对于已知y,求x很有帮助,
但是既然y=sin(x)-x在x=【0 pi】区间,单调递减,应该会有反函数吧,还是即使有反函数也不一定有解析式呢
发表于 2011-4-19 08:09 | 显示全部楼层
回复 10 # 321forever 的帖子

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

评分

1

查看全部评分

发表于 2011-4-19 13:50 | 显示全部楼层

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 ]

点评

个人愚钝,不明白。。。。。。是这句“应该是没有解析的结果!只要是单调的函数都应该存在反函数”哪里有不合适吧!  发表于 2011-4-19 14:48
 楼主| 发表于 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)  有什么区别

评分

1

查看全部评分

发表于 2011-4-19 15:55 | 显示全部楼层
本帖最后由 hancy 于 2011-4-19 16:01 编辑
321forever 发表于 2011-4-19 15:24
回复 11 # meiyongyuandeze 的帖子
网上搜了下别人说的,
1.定义域和值域分别为D,B,若函数是单调的,无论 ...


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

点评

理解了谢谢啊  发表于 2011-4-19 17:07

评分

1

查看全部评分

发表于 2011-4-19 16:39 | 显示全部楼层
补充楼上:
@是用来生成匿名函数。
匿名函数提供了一种创建简单程序的方法,使用它用户可以不必每次都编写M文件。匿名函数的格式为:fhandle=@(arglist)expr
其中fhandle是为该函数创建的函数句柄:@符号用於创建函数句柄;arglist为用逗号分隔的参数列表;expr为函数主体,为Matlab表达式。

点评

理解了谢谢啊  发表于 2011-4-19 17:07

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 11:16 , Processed in 0.078421 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表