我试图在四个变量中解决四个方程的系统 . 我已经阅读了类似问题的一些主题,并尝试遵循这些建议 . 但是我觉得这里的日志和交叉产品有点乱 . 这是确切的系统:
7 * w =(7 * w 5 * x 2 * yz)(0.76 0.12 * Log [w] -0.08 * Log [x] -0.03 * Log [y] -0.07 * Log [7 * w 5 * x 2 * YZ]),
5 * x =(7 * w 5 * x 2 * yz)(0.84 - 0.08 * Log [w] 0.11 * Log [x] -0.02 * Log [y] -0.08 * Log [7 * w 5 * x 2 * YZ]),
2 * y =(7 * w 5 * x 2 * yz)(-0.45 - 0.03 * Log [w] -0.02 * Log [x] 0.05 * Log [y] 0.12 * Log [7 * w 5 * x 2 * YZ]),
1 * z =(7 * w 5 * x 2 * yz)( - 0.16 0 * Log [w] - 0 * Log [x] - 0 * Log [y] 0.03 * Log [7 * w 5 * x 2 * YZ])
(仅供参考 - 我是一名年轻的经济学家,这是消费者需求系统的延伸 . )从理论上讲,我们知道这个系统存在一个独特的解决方案,即积极的 .
Trys
-
Solve&NSolve:因为应该有一个解决方案,我试过这些,但都不起作用 . 我猜这个系统有太多的日志需要处理 .
-
FindRoot:我从初始值(14,15,10,100)开始,从数据中得到 . FindRoot返回最后一个值(不满足我的系统)和以下消息 .
FindRoot :: lstol:行搜索将步长减小到AccuracyGoal和PrecisionGoal指定的容差范围内,但无法.....
我尝试了不同的初始值,包括FindRoot返回的值 . 我试图分析每一步的解决方案 Value 模式 . 我没有看到任何模式,但注意到z值在此过程的早期变为负值 . 所以我对 Value 观进行了限制 . 这只是将代码停在最小值0.1 . 我也试过一个指数系统而不是log,同样的问题 .
Reap[FindRoot[{
7*w==(7*w+5*x + 2*y + z)*(0.76 + 0.12*Log[w] -0.08*Log[x] -0.03*Log[y] -0.07*Log[7*w+5*x + 2*y + z]),
5*x==(7*w+5*x + 2*y + z)*(0.84 -0.08*Log[w] +0.11*Log[x] -0.02*Log[y] -0.08*Log[7*w+5*x + 2*y + z]),
2*y==(7*w+5*x + 2*y + z)*(-0.45 - 0.03*Log[w] -0.02*Log[x] +0.05*Log[y] +0.12*Log[7*w+5*x + 2*y + z]),
z==(7*w+5*x + 2*y + z)*(-0.16 + 0*Log[w] -0*Log[x] -0*Log[y] +0.03*Log[7*w+5*x + 2*y + z])},
{{w,14,0.1,500},{x,15,0.1,500},{y,10,0.1,500},
{z,100,0.1,500}},EvaluationMonitor:>Sow[{w,x,y,z}] ]]
- FindMinimum:我们可以将此问题写成最小化问题,我尝试了这个(遵循此处的建议) . 返回的值不会使系统或方程收敛为零 . 我只尝试了前两个方程,那种方法收敛到零 .
希望这对于这里的专家来说足够吸引人!任何想法我应该如何找到解决方案或为什么我不能?这是我第一次使用Mathematica,不幸的是我第一次凭经验解决系统/优化问题!非常感谢 .
{g1,g2,g3, g4}={7*w - (7*w+5*x+2*y+z)* (0.76+0.12*Log[w]-0.08*Log[x]-0.03*Log[y] -0.07*Log[7*w+5*x+2*y+z]),5*x - (7*w+5*x+2*y+z)*(0.84-0.08*Log[w]+0.11*Log[x]-0.02*Log[y] -0.08*Log[7*w+5*x+2*y+z]),2*y - (7*w+5*x+2*y+z)*(-0.45-0.03*Log[w]-0.02*Log[x]+0.05*Log[y]+0.12*Log[7*w+5*x+2*y+z]), 1*z - (7*w+5*x+2*y+z)*(-0.16+0*Log[w]-0*Log[x]-0*Log[y]+0.03*Log[7*w+5*x+2*y+z])};subdomain=0<w<100 &&0<x<100 && 0<y<100 && 0<z<100;res=FindMinimum[{Total[{g1,g2,g3, g4}^2],subdomain},{w,x,y,z},AccuracyGoal->5]{g1,g2,g3,g4}/.res[[2]]
2 回答
我没有访问Mathematica,我将你的方程式放入AMPL,这对学生是免费的 . 这是我做的:
例如,如果我只要求变量是非负的,我会得到垃圾
要么
Numerically, these are indeed solutions ,他们满足相当高精度的方程,虽然我很确定它不是你想要的 . 这表明您的模型存在问题 .
如果我稍微增加变量的下限:
我得到了,即使是多头,
Ipopt 3.11.6: Converged to a locally infeasible point. Problem may be infeasible.
这再次表明你的模型方程存在问题 .恐怕你必须修改你的模型 .
这不会解决你的模型方程的问题,但我会引入新的变量:
a=log(w), b=log(x), c=log(y), d=log(z)
. 然后是w=exp(a)
等等 . 它的优点是,由于对数函数的负参数,函数评估不会失败 .我可能还会为
(7*w+5*x+2*y+z)
引入一个新变量,以使方程更紧凑 .这些新变量都不能解决模型方程的上述问题 .
如果它真的是你第一次使用Mathematica,你可能会更好地使用AMPL和IPOPT;这些工具是为定制和优化问题而量身定制的 . 如果您有疑问而不是Stackoverflow,我建议您使用AMPL mailing list;你会在邮件列表上得到更好的答案 .
这种方法通常会快速找到近似解,最小化具有约束的平方和 .