我做了一个Matlab函数,我想把它转换成Python,用在我的web应用程序中。在
我几乎用OMPC将(.m文件转换为.py文件)。
但是,我不能使solve()
函数工作(我正在使用sympy库)。在
这是Matlab行:
SBC = solve(sqrt((xa-x)^(2)+(ya-y)^(2))-sqrt((xb-x)^(2)+(yb-y)^(2))-D12==0,sqrt((xa-x)^(2)+(ya-y)^(2))-sqrt((xc-x)^(2)+(yc-y)^(2))-D13==0,[x,y]);
这是Python行,其中x
和{x = Symbol('x')
和y = Symbol('y')
):
有了这个Python代码,我得到的是False
而不是结果(它与Matlab代码配合得很好)。在
我错过什么了吗?在
编辑:
通过这个,我得到了[]
:
# -*- coding: utf-8 -*-
from sympy import *
def alg(xa=None, ya=None, za=None, Ta=None, xb=None, yb=None, zb=None, Tb=None, xc=None, yc=None, zc=None, Tc=None, xd=None, yd=None, zd=None, Td=None, RSSIA=None, RSSIB=None, RSSIC=None, RSSID=None, txPower=None, n=None):
n = 2
c = 3 * 10 ** 8
TOA12 = Ta - Tb
TOA13 = Ta - Tc
TOA14 = Ta - Td
D12 = TOA12 * c
D13 = TOA13 * c
D14 = TOA14 * c
x, y = symbols('x y')
eqs = [sqrt((xa - x) ** (2) + (ya - y) ** (2)) - sqrt((xb - x) ** (2) + (yb - y) ** (2)) - D12,
sqrt((xa - x) ** (2) + (ya - y) ** (2)) - sqrt((xc - x) ** (2) + (yc - y) ** (2)) - D13]
print solve(eqs, [x, y])
alg(3,1,0,21.8898790015,4,6,0,21.8898790005,10,4,0,21.88987900009,9,0.5,0,21.889879000105,23.9,23.85,23.9,23.95,24,1)
只有一个小的改变,以使它工作。接收
False
的原因是在函数定义中使用了== 0
。在sympy中,通常假设函数的计算结果是0
。举一个取自here的例子:如果你想解方程
x+5y=2, -3x+6y=15
,那么你可以按如下方法进行:这给了你
^{pr2}$请注意,这些方程是以求值
0
的方式传递的。在如果你像以前那样跑的话
然后还返回
False
。在因此,对于您的示例,以下方法可行:
不幸的是,这并不能在我的私有计算机上运行(我的Python得到
killed
;显然这很难解决),所以我只是测试了它的一个简单版本,以演示原理:然后得到预期输出:
希望你的机器有更多的运气来解决这些复杂的功能。但是这篇文章解释了为什么你会收到
False
。在编辑
使用修改后的代码,如果降低参数
D12
和D13
的精度,就可以得到一个解决方案。下面是您得到的解决方案:这些和你在Matlab仿真中得到的结果一样吗?在
这是修改后的代码;请注意,我强制输出为字典形式,并打印方程式(我四舍五入为两位小数,但也适用于4位;您可以使用它):
相关问题 更多 >
编程相关推荐