返回信息流最近编写一程序需要用solve()函数求方程。此方程只有实根,一正一负。在使用solve函数时,发现每次只给出一个根,且有时为正有时为负。
请问如何使用solve()函数,使其只显示正根?
这是一条镜像帖。来源:北邮人论坛 / matlab / #9413同步于 2012/11/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
弱问如何只让solve函数显示正根
interml
2012/11/6镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
solve 用的是搜索的办法求根吧.你要限制正负的话可以改动原方程
【 在 interml (inter) 的大作中提到: 】
: 最近编写一程序需要用solve()函数求方程。此方程只有实根,一正一负。在使用solve函数时,发现每次只给出一个根,且有时为正有时为负。
: 请问如何使用solve()函数,使其只显示正根?
你的意思是等价地改变一下原方程的表达方式吗?如果那样的话有什么经验技巧吗?
谢谢?
【 在 dannian 的大作中提到: 】
: solve 用的是搜索的办法求根吧.你要限制正负的话可以改动原方程
iPhone客户端1.2发布
可以加x>0的条件的么?。。我试试看
【 在 cnycny (cnycny) 的大作中提到: 】
: 你好,共同学习。你可以试试这样:
: solve(x^3-5*x^2+6*x==2,x>0)
: 不妨把你的代码贴出来,大家帮你分析一下
: ...................
看了一下,solve主要是用在符号表达式的求解,对于一些方程是可以解出所有的根的。
如果不想显示负根的话可以对计算的结果再做一下处理
A = solve(...);
A(A<0) = []
【 在 dannian (被砖压坏了的桔桔|【虾米团】团长) 的大作中提到: 】
: 可以加x>0的条件的么?。。我试试看
【 在 cnycny 的大作中提到: 】
: 你好,共同学习。你可以试试这样:
: solve(x^3-5*x^2+6*x==2,x>0)
: 不妨把你的代码贴出来,大家帮你分析一下
谢谢你的建议。不过试了一下,好像不行。Matlab好像在设置求解区间上不是很在行。
我是换用fzero函数解决的:floor(fzero(@fx,50)),因为我的方程中的正根都<50,当改变参数时这个值也要调整。
fx.m 代码如下,a,b由主函数赋值
function fx=func(x,a,b)
global a;
global b;
Nt=30; %total users, both active and inactive
Rtot=15; %total wifi bandwidth
Rc=3; %fixed cellular bandwidth for each cellular user
lambda=1.5;
alpha=2;
fx=Rc-((-Rc*lambda/alpha)*(exp(-alpha*(a+b*x/Rtot))-exp(-alpha*a)))/(b*x/Rtot)-Rtot/x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果能用solve()直接求正根,就不用这么麻烦了