24小时热门版块排行榜    

查看: 562  |  回复: 4

儒雅圣士

新虫 (正式写手)

[求助] 各位大神来凑凑热闹吧,帮小弟解个方程组,不胜感激 已有2人参与

求助各位大神,如何用Mathematica编程求解下面的方程组,未知量有四个,为v ,c ,n ,x
   Log[10,v*c/x] == 2.72 - 6080/833,
   Log[10,v*n/(1 - x)] == 2.45 - 7830/833 ,
   (0.2 - v)/(0.0218 - c) == 50.9414/(x*12.011) ,
   (0.2 - v)/(0.0024 - n) == 50.9414/((1 - x)*14.0067),
此外,要求未知量的取值范围为:0<v<0.15  ,0<c<0.015 ,0<n<0.003 ,0<x<1
回复此楼
一起努力
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
fegg7502: 金币+1, 鼓励交流 2015-06-18 08:56:17
儒雅圣士: 金币+10, 有帮助, 您好,谢谢您的帮助,不过我更想寻找用Mathematica编程求解,谢谢您 2015-06-18 11:50:46
v: 0.0998354993550781
c: 0.000241101484773351
n: 9.79873089377952E-8
x: 0.912860567123227
2楼2015-06-17 22:01:08
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
对于这个问题,直接一骨脑扔进Mathematica似乎是不好弄的,但是加上适当的人工分析问题就会很好解决。

把方程形式改改(主要就是把可能引发奇点讨论的部分手动化掉就可以直接Solve啦:
CODE:
Solve[{v*c == x 10^(2.72 - 6080/833),
   v*n == 10^(2.45 - 7830/833) (1 - x), (x*12.011) (0.2 - v) == (0.0218 -
       c) 50.9414, (0.2 - v) ((1 - x)*14.0067) == (0.0024 - n) 50.9414, 0 < v < 0.15,
   0 < c < 0.015, 0 < n < 0.003, 0 < x < 1}, {v, c, x, n}] // Chop
(*{{v -> 0.0998355, c -> 0.000241101, x -> 0.912861, n -> 9.79873*10^-8}}*)

Chop是用来去除数值求解时产生的小虚部的。
小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
3楼2015-06-19 11:11:43
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

引用回帖:
3楼: Originally posted by xzczd at 2015-06-19 11:11:43
对于这个问题,直接一骨脑扔进Mathematica似乎是不好弄的,但是加上适当的人工分析问题就会很好解决。

把方程形式改改(主要就是把可能引发奇点讨论的部分手动化掉就可以直接Solve啦:

Solve // Chop
(*{{v  ...

……修正一下。刚才我似乎犯了什么低级错误。总之,方程形式不变也是可以直接解的:
CODE:
eqn = {Log[10, v*c/x] == 2.72 - 6080/833,
   Log[10, v*n/(1 - x)] == 2.45 - 7830/833, (0.2 - v)/(0.0218 - c) ==
    50.9414/(x*12.011), (0.2 - v)/(0.0024 - n) == 50.9414/((1 - x)*14.0067)};

Solve[eqn, {v, n, x, c}]

(*{{v -> -0.00107112, n -> -4.55851*10^-6, x -> 0.956507,
  c -> -0.0235467}, {v -> 0.0998355, n -> 9.79873*10^-8, x -> 0.912861,
  c -> 0.000241101}, {v -> -2.13445*10^-6, n -> -0.0526894, x -> -0.00177142,
  c -> 0.0218835}, {v -> 0.20005, n -> -0.000101436, x -> 181.756, c -> 0.0239569}}*)

小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
4楼2015-06-19 11:28:28
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
儒雅圣士: 金币+20, ★★★很有帮助, 虽然我还是不明白 ,还要谢谢您的耐心解答 ,好人一生平安,祝福您 2015-06-20 11:13:34
引用回帖:
4楼: Originally posted by xzczd at 2015-06-19 11:28:28
……修正一下。刚才我似乎犯了什么低级错误。总之,方程形式不变也是可以直接解的:


eqn = {Log == 2.72 - 6080/833,
   Log == 2.45 - 7830/833, (0.2 - v)/(0.0218 - c) ==
    50.9414/(x*12.011), (0 ...

……再次修正。(看样子临近午饭时间大脑缺糖所以运转不灵了。)上面的解法没有自动筛掉不合要求的解。(对于这个方程Solve在加了限制条件的情况下求解变的更慢了——话说这种现象我好像还是第一次观察到,以往我一直以为——并且很多时候也确实是——Solve加了限制条件后求解会更快),那么,就先求再筛呗:
CODE:
eqn = {Log[10, v*c/x] == 2.72 - 6080/T,
   Log[10, v*n/(1 - x)] == 2.45 - 7830/T, (m - v)/(0.0218 - c) ==
    50.9414/(x*12.011), (m - v)/(0.0024 - n) == 50.9414/((1 - x)*14.0067)};

Pick[#, And @@ {0 < v < 0.15, 0 < c < 0.015, 0 < n < 0.003, 0 < x < 1} /. #] & /@ Solve[eqn, {v, n, x, c}]

(* {{v -> 0.0998355, n -> 9.79873*10^-8, x -> 0.912861, c -> 0.000241101}} *)

目测这种情况下Solve调用的算法和上面的并不相同,所以这里不需要扣虚部。
小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
5楼2015-06-19 11:37:16
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 儒雅圣士 的主题更新
信息提示
请填处理意见