含自由变量cj的线性不等式解的符号质心求解方法问询
问题描述
给定包含n+m个变量{v₁,…,vₙ,c₁,…,cₘ}的m个线性方程,要求解由vᵢ≥0与这些方程定义的n维超空间有限区域的质心(CoM),且质心表达式需保留自由变量cⱼ。
当前痛点:若固定cⱼ的值,可通过迭代求解不等式、枚举多面体组合计算质心,但自由变量cⱼ会使目标子空间拓扑产生大量分支,手动处理过于繁琐,怀疑存在可用的高阶工具。
简单示例
from sympy import symbols, linsolve, solve v = symbols("v:2") c = symbols("c:1") eqs = [v[0] + v[1] - c[0]] # constrain the sum subs, = linsolve(eqs, v) ineqs = [b >= 0 for b in subs] # all v nonnegative solve(ineqs, v[1]) #.as_set() not implemented for multivariate # Essentially, v1 is in [0, c0]. # Using subs, v0 is in [0, c0] as well; so CoM = (c0/2, c0/2).
复杂示例
from sympy import symbols, linsolve, solve v = symbols("v:3") c = symbols("c:2") eqs = [v[0] + v[1] + v[2] - c[0], v[1] + 2 * v[2] - c[1]] subs, = linsolve(eqs, v) ineqs = [b >= 0 for b in subs] # all v nonnegative print(ineqs) solve(ineqs, v[2]) # Essentially, v2 is in [max(0, c1 - c0), c1/2]. # Using subs, v1 is in [0, c1 - 2 * max(0, c1 - c0)] # v0 is quite complicated, as is CoM.
潜在高阶解法思路
若能对线性不等式解区域积分线性表达式,则质心各坐标可表示为:integrate(s[i], solve(ineqs, v)) / integrate(1, solve(ineqs, v))
其中s[i]是通过方程导出的v[i]替换式。
内容的提问来源于stack exchange,提问作者Andris Birkmanis
相关产品推荐
相关产品推荐

