如何用渐近法求解退化方程组

How to solve a degenerate system of equations in sympy(如何用渐近法求解退化方程组)
本文介绍了如何用渐近法求解退化方程组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有很多方程组,有些没有详细说明,我想找一个非零解,如果它存在,或者报告说没有。然而,试图找到所有解决方案的症状似乎悬而未决。这里有一个极端的例子。

from sympy import *
A = Matrix([
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
])
syms = symbols("x:12")
s = Matrix(syms)
constraints = [xi**3 - xi for xi in syms]
solve(list(A*s) + constraints, syms)
在这样的示例中,我如何才能快速报告一个非零解?事实上,如果它只报告有解决方案,我会很高兴。

推荐答案

为SymPy提供越来越难的系统(指定的0较少),并在得到解决方案时退出:

>>> def nonzsol(eqs, syms):
...     from sympy import subsets
...     for i in range(len(syms)-1,-1,-1):
...         for z in subsets(syms, i):
...             s, nontriv = solve(eqs + list(z), set=True)
...             for v in nontriv:
...                 if any(v):
...                     return dict(zip(s, v))
... 
>>> 
>>> nonzsol(eqs, syms)
{x0: 0, x1: 0, x10: 0, x11: -1, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0}

这篇关于如何用渐近法求解退化方程组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)