24小时热门版块排行榜    

查看: 2809  |  回复: 10

trrista

银虫 (小有名气)

[求助] 请教下:如何求一个函数在一定范围内的全部解

类似于超越函数tan(x)=1/x,如果想求在范围[1,10]内的所有解,各位有什么建议吗?我平时主要用matlab,知道fsolve常用来解函数,能处理这方面的问题吗?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dxwbucea

铁虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
trrista(金币+1): ★有帮助 2012-02-14 03:46:10
可以先画出函数y=tan(x)-1/x,在范围[1,10]内的图形,那么,有几个解,就一目了然了,然后,再求每个解的精确值。
2楼2012-02-12 01:37:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

trrista

银虫 (小有名气)

引用回帖:
楼: Originally posted by dxwbucea at 2012-02-12 01:37:05:
可以先画出函数y=tan(x)-1/x,在范围[1,10]内的图形,那么,有几个解,就一目了然了,然后,再求每个解的精确值。

其实我举的只是个例子,我的函数要复杂的多,而且是一系列函数在一定范围的全部解,如果都数,花的时间精力太多了。仍然谢谢!
3楼2012-02-12 10:14:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

孙?�730

至尊木虫 (知名作家)

优秀版主

【答案】应助回帖

感谢参与,应助指数 +1
trrista(金币+1): ★有帮助 2012-02-14 03:46:30
划分单调连续区间 分别计算
应该有4个解 分别在0.9  3.5    6.5    9.6   附近

可画出tan(x)和1/x的图象 找到交点(横坐标)  避免遗漏
sunyu730_emuch@126.com
4楼2012-02-12 10:28:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

trrista

银虫 (小有名气)

???????:
?: Originally posted by ????730 at 2012-02-12 10:28:02:
??????????????? ??????
?????4???? ?????0.9  3.5    6.5    9.6   ????

?????tan(x)??1/x????? ???????(??????)  ???????

?????п???x?????????????????????????????
5楼2012-02-12 17:08:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)

如果没有现成程序的话 是否可以自己扫描下
把FindRoot的初值在范围内隔个1/10之类作为输入 每次输出都是解
把重复的去掉  这样应该能给出绝大部分解
实在不行 自己在取值范围内直接扫描 已经知道范围 比直接求解可能还简单些
6楼2012-02-12 17:20:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)

mathematica的程序 不知道这样成不 速度上
s = {-1000};
For[a = 0.01, a ≤ 10,
    t1 = x /. FindRoot[Tan[x] == 1/x, {x, a, 0, 10}];
    If[Abs[t1 - Last[s]] >= 10^-9, s = Append[s, t1]];;
    a = a + 0.01];
s = Delete[s, 1]

结果
{0.860334, 3.42562, 6.4373, 9.52933}
7楼2012-02-12 17:32:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)

自己扫描的话 速度有点慢
s = {-1000};
For[x = 0.000001, x ≤ 10,
    If[Abs[Tan[x] - 1/x] <= 10^-5, s = Append[s, x]];
    x = x + 0.00001];
s = Delete[s, 1]

结果   重复的没去掉
{0.860331, 3.42561, 3.42562, 6.43729, 6.4373, 9.52933, 9.52934}
8楼2012-02-12 17:39:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

trrista

银虫 (小有名气)

引用回帖:
楼: Originally posted by walk1997 at 2012-02-12 17:39:25:
自己扫描的话 速度有点慢
s = {-1000};
For[x = 0.000001, x ≤ 10,
    If[Abs[Tan[x] - 1/x] <= 10^-5, s = Append[s, x]];
    x = x + 0.00001];
s = Delete[s, 1]

结果   重复的没去掉
{0.8603 ...

谢谢了,不过好像大家都复数解都不感兴趣来着
9楼2012-02-12 21:42:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)

引用回帖:
9楼: Originally posted by trrista at 2012-02-12 21:42:55:
谢谢了,不过好像大家都复数解都不感兴趣来着

复数解的话 没本质的区别吧?
或者是直接在平面上搜索
或者是如果实部虚部能分离开的话 化为2个实数解问题
10楼2012-02-12 21:48:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 trrista 的主题更新
信息提示
请填处理意见