从Matlab到Python-求解函数

我做了一个 Matlab 函数,我想将其转换为 Python 与我的 Web 应用程序使用。

我做了一个 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 行,其中xy是符号(带有x = Symbol('x')y = Symbol('y')):

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 代码,我得到False而不是结果(它与 Matlab 代码一起工作)。

我错过了什么吗?

EDIT:

有了这个,我得到[]

# -*- 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)
5

为了使其工作,只需要一个小的更改。您收到False的原因是您在函数定义中使用了== 0。通常,假设您的函数计算为0。举一个从here中获取的例子:

如果你想解决方程x+5y=2, -3x+6y=15那么你会做如下:

from sympy import *
x, y  = symbols('x y')
solve([x + 5*y - 2, -3*x + 6*y - 15], [x, y])

这给你

{x: -3, y: 1}

请注意,这些方程的传递方式是它们计算为0

如果你像你一样运行它

solve([x + 5*y - 2 == 0, -3*x + 6*y - 15 == 0], [x, y])

然后返回False

所以对于你的例子,以下将工作:

from sympy import *
x, y, xa, xb, xc, ya, yb, yc, D12, D13 = symbols('x y xa xb xc ya yb yc D12 D13')
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]
solve(eqs, [x, y])

不幸的是,这不会在我的私人计算机上运行(我的 Python 得到killed;显然这很难解决),所以我只是测试了一个更简单的版本来演示原理:

eqs2 = [sqrt(xa - x) - D12,
       (yc - y) ** (2) - D13]
solve(eqs2, [x, y])

然后给你预期的输出:

[(-D12**2 + xa, -sqrt(D13) + yc), (-D12**2 + xa, sqrt(D13) + yc)]

希望您在机器上有更多的运气来解决这些复杂的功能。但是这篇文章解释了为什么您会收到False

EDIT

使用修改后的代码,如果您降低参数D12D13的精度,则可以获得解决方案。

[sqrt((-x + 3)**2 + (-y + 1)**2) - sqrt((-x + 4)**2 + (-y + 6)**2) - 0.3, sqrt((-x + 3)**2 + (-y + 1)**2) - sqrt((-x + 10)**2 + (-y + 4)**2) - 0.42]
[{x: 6.45543078993649, y: 3.14390310591109}, {x: 6.67962865117349, y: 2.61399193301427}]

这些是相同的你收到的 Matlab 仿真?

这里是修改后的代码;请注意,我强制输出以字典的形式,并打印方程式(我四舍五入到两个小数,但它也适用于 4;你可以玩):

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 =  round(TOA12 * c, 2)
    D13 =  round(TOA13 * c, 2)
    # D14 = TOA14 * c
    # x, y, D12, D13 = symbols('x y D12 D13')
    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 eqs
    print solve(eqs, x, y, dict=True)
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)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(234)
是否通过VisualBasic提取硬件序列号
上一篇
DllNotFoundException:LogitechSteeringWheelEnginesWrapper.dll
下一篇

相关推荐

  • python与matlab比较从性能到可用性的差异

    示例示例Python与Matlab有着很多相似之处,但也有一些显著的差异。语法:Python拥有简单而强大的语法,使其易于学习和使用,而Matlab则拥有更为复杂的语法,让它更适合于数学和科学应用。…

    2023-01-31 11:35:31
    0 56 16
  • Python中mod的用法:numpy或python中的等效matlab函数mod

    关于Python中mod的用法的问题,在mod numpy中经常遇到,我正在将一些代码从 Matlab 转换为 Python。…

    2022-12-15 01:00:41
    0 47 33
  • python浅拷贝和深拷贝区别、原理与实现

    示例示例Python中的浅拷贝和深拷贝是指在复制对象时,复制的结果和原来的对象之间的关系。浅拷贝:浅拷贝只复制一层,也就是说,它只复制最外围的对象,而不复制它包含的对象。如果最外围的对象中包含其他对象,那么这些对象将不会被复制,而是使用原来的对象。…

    2023-05-30 14:25:17
    0 48 34
  • python程序员待遇:Python程序员薪酬最高,收入惊人!

    Python程序员的待遇取决于他们的技能水平和工作经验。一般来说,Python程序员的薪资水平较高,尤其是对于那些有丰富工作经验的Python程序员而言,他们的薪资水平更高。此外,Python程序员还可以获得许多其他福利,包括住房补贴、交通补贴、带薪休假等。…

    2023-06-22 01:21:15
    0 88 52
  • python文本情感分析(含代码示例)

    Python文本情感分析是一种使用自然语言处理技术来分析文本中的情感倾向的过程。它可以帮助我们了解用户对特定主题的看法,从而改善产品和服务。…

    2023-04-23 00:28:07
    0 32 84
  • python字符串拼接数字从零开始

    实例实例Python字符串拼接数字,可以使用format()函数或者%运算符来实现。代码实例:…

    2023-08-20 08:25:28
    0 37 29
  • python中import re:如何使用Python中的re模块进行正则表达式匹配

    import re 是Python中正则表达式模块,可以用来处理字符串。它提供了一系列的函数,可以用来查找、替换和分割字符串,以及检查字符串是否符合特定的格式。…

    2023-05-02 10:25:33
    0 61 10
  • python安装pygame失败:解决python安装pygame失败的方法

    Python安装pygame失败的原因可能有很多,下面是一些常见的原因:安装环境不兼容:pygame只支持python2.7以上版本,而您可能安装的是python3.x或更低版本。…

    2023-04-15 03:55:19
    0 37 32

发表评论

登录 后才能评论

评论列表(6条)