24小时热门版块排行榜    

查看: 1493  |  回复: 8

chuzhenhui

金虫 (小有名气)

[交流] 【求助】请教一个关于解方程的问题已有3人参与

问题描述:

在做一个gui程序,需要根据输入的数值,进行相应的计算。比如这样一个方程:

y=(w*c*k*x)/((1-k*x)*(1-k*x+c*k*x))

其中w,c,k,y为常数,x是变量。程序需要根据w,c,k,y的输入,代入方程中计算x的值,后面程序再用x进行其他的运算。

假如输入的常数分别是:w=0.0378;c=9.992;k=0.9247;y=0.026,我这么编:

w=0.0378;c=9.992;k=0.9247;y=0.026;

x=solve('(w*c*k*x)/((1-k*x)*(1-k*x+c*k*x))-y');

-------------------------
matlab出现错误如下:

??? Error using ==> solve>getEqns at 182
' w1*c1*k1*awi)/((1-k1*awi)*(1-k1*awi+c1*k1*awi))=in ' is not a valid expression or equation.

Error in ==> solve at 67
[eqns,vars] = getEqns(varargin{:});

Error in ==> solvetest at 3
solve('w1*c1*k1*awi)/((1-k1*awi)*(1-k1*awi+c1*k1*awi))=in');
-----------------------------------------------------------------------------------
直接用输入的数字代入方程,用solve是可以算出来的,x值有两个解,我要取正解。但是像以上的程序,先对符号赋值,再用符号代入方程中用solve就不能用了。

我想解决的就是如果要算以上方程中的x,我应该用什么方法?这样用solve和fsolve都不行。望大侠赐教!谢谢~~~
回复此楼
找到自己。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

robert2020

银虫 (著名写手)

★ ★
ctgu_zheng(金币+2):辛苦了。。。 2010-10-12 07:52:23
chuzhenhui(金币+6):多谢!! 2010-10-12 15:04:01
求解程序:
引用回帖:
clear all
syms x
w=0.0378;c=9.992;k=0.9247;y=0.026;
f=(w*c*k*x)/((1-k*x)*(1-k*x+c*k*x))-y;
x=vpa(solve(f))

验证程序:
引用回帖:
solve('0.026-(0.0378*9.992*0.9247*x)/((1-0.9247*x)*(1-0.9247*x+9.992*0.9247*x))=0')

结果:
引用回帖:
x =

-.926322075415857
  .140404159021461

Truthfulness,Compassion,Tolerance,Beauty
2楼2010-10-11 22:18:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijinfeng042

木虫 (小有名气)

Matlab


hiqun(金币+1):感谢应助,辛苦了 2010-10-12 13:58:42
chuzhenhui(金币+4):多谢!! 2010-10-12 15:04:13
CODE:
>> [result,status] = evalin(symengine,'w:=0.0378;c:=9.992;k:=0.9247;y:=0.026;solve((w*c*k*x)/((1-k*x)*(1-k*x+c*k*x))-y)')

result =

[ [x = 0.14040415902146110092877008088218], [x = -0.92632207541585789273828437767426]]


status =

     0

方法还有不少 符号计算subs代换也可以 vpa的内部也是调用了计算引擎mupadengine
工作了,偶尔会上来~可以关注新浪微博 @云是风的梦_Matlab
3楼2010-10-12 13:50:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chuzhenhui

金虫 (小有名气)

引用回帖:
Originally posted by robert2020 at 2010-10-11 22:18:04:
求解程序:


验证程序:


结果:

多谢指教,如果我要取x>0 的解,怎么弄?有专门设定方程解范围的函数可以用吗。。直接设定x>0好像不可以,我用y=max(x)也不行,请再指导一下吧,谢谢!
找到自己。
4楼2010-10-12 17:00:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chuzhenhui

金虫 (小有名气)

引用回帖:
Originally posted by lijinfeng042 at 2010-10-12 13:50:45:
[code]

>> [result,status] = evalin(symengine,'w:=0.0378;c:=9.992;k:=0.9247;y:=0.026;solve((w*c*k*x)/((1-k*x)*(1-k*x+c*k*x))-y)')

result =

[ [x = 0.14040415902146110092877008088218] ...

谢谢指导,这个方程解出来的x值是中间值,我后面的程序中还要调用x值,我要的是x的正解,怎么弄啊,想了一些办法,行不通。。。希望大侠再指导下!谢谢

[ Last edited by chuzhenhui on 2010-10-12 at 17:07 ]
找到自己。
5楼2010-10-12 17:04:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chuzhenhui

金虫 (小有名气)


nono2009(金币+1):鼓励分享。 2010-10-13 06:20:34
我暂时解决了,主要是因为x是sym型数据,我整成double型,再用 y=max(x)就可以得到x>0的解了,但这个方法有点投机,如果x有两个以上大于0的解,这样就行不通了,所以还是要请教正统的解决方法。
找到自己。
6楼2010-10-12 17:16:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

robert2020

银虫 (著名写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
x=[-1 -2 -3 4 2 4 0];
m=find(x>0);
x(m)

7楼2010-10-12 17:38:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijinfeng042

木虫 (小有名气)

Matlab

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
hiqun(金币+1):感谢应助 2010-10-13 16:18:48
引用回帖:
Originally posted by chuzhenhui at 2010-10-12 17:16:29:
我暂时解决了,主要是因为x是sym型数据,我整成double型,再用 y=max(x)就可以得到x>0的解了,但这个方法有点投机,如果x有两个以上大于0的解,这样就行不通了,所以还是要请教正统的解决方法。

就是直接加个>0的条件 assuming>0
CODE:
>> result= evalin(symengine,'w:=0.0378;c:=9.992;k:=0.9247;y:=0.026;solve((w*c*k*x)/((1-k*x)*(1-k*x+c*k*x))-y) assuming x>0') result = [x = 0.14040415902146110092877008088218]

工作了,偶尔会上来~可以关注新浪微博 @云是风的梦_Matlab
8楼2010-10-13 14:16:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chuzhenhui

金虫 (小有名气)

就是直接加个>0的条件 assuming>0

[code]>> result= evalin(symengine,'w:=0.0378;c:=9.992;k:=0.9247;y:=0.026;solve((w*c*k*x)/((1-k*x)*(1-k*x+c*k*x))-y) assuming x>0') result = [x  ... [/quote]

非常谢谢,又多了一些知识,关于这块我自己也再去捣鼓捣鼓!
找到自己。
9楼2010-10-18 15:18:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 chuzhenhui 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见