我正在尝试求解非线性方程组。
为此,我成功地使用sympy在线求解了一个由三个方程组成的系统。但这对7个方程式不再起作用,并向我返回“操作超时”消息。 因此,我正在尝试使用标准的fsolve来解决问题。但是,尽管我仅用三个简单的方程组就可以得到很好的sympy效果,但fsolve给我带来不好的结果。
这是我编写的代码(由于在此论坛上发现的内容):
def equations(p):
w1, w2, m = p
f0 = w1+w2-1
f1 = w1*m+w2*(1-2*m)-1/3
f2 = w1*m**2+w2*(1-2*m)**2-1/5
return (f0,f1,f2)
w1, w2, m = fsolve(equations, (0,0,0))
print equations((w1,w2,m))
作为回报,它给了我这些(负面...)结果:
(0.0, -1.2378986724570495e-13, 5.1419979385514125e-13)
作为比较,sympy给了我预期的结果。它给出了大约:
(0.333333, 0.666667, 0,122515)
您知道为什么在我的情况下fsolve无法正常工作吗?
谢谢。
答案 0 :(得分:4)
使用mobile_no
,将在点(w1,w2,m)上打印(f0,f1,f2)的值。而是,sympy返回(w1,w2,m)的值。
因此,如果我将打印语句替换为db.collection('users_nippon').aggregate([
{
$lookup: {
from: "orders",
localField: "mobile_no",
foreignField: "user_mob",
as: "orders_data"
}
},
{
$unwind: "$orders_data"
},
{
$lookup: {
from: "items",
localField: "orders_data.item",
foreignField: "item",
as: "items_data"
}
},
{
$unwind: "$items_data"
}
]).toArray(function(err, list) {
if (err) throw err;
console.log(JSON.stringify(list));
res.send(JSON.stringify(list));
});
,则会得到(0.6666666666319606、0.33333333336803944、0.12251482264361727)。
答案是不同的,因为方程是非线性的并且可以有多个零。