非线性系统 - 如何跟踪代表的未知数?

时间:2017-05-19 18:42:44

标签: c# arrays design-patterns data-structures delegates

这可能听起来像是一个数学问题,但它更像是一个编程设计问题。

想象一下,我已经在C#中实现了一个多维根求解器,以找到以下系统的未知数,由我作为代理传递的方程组成:

委托1)x4 + f(x4,x2,x3)-2 = 0

委托2)g(x1,x2) - 0.5 = 0

委托3)h(x1,x2)+ x1 * x3 - 5 = 0

委托4)x3 * x4 - 2 = 0

这里,f g和h是一些返回float的函数。求解器的工作方式是尝试输入向量[a,b,c,d]的不同组合,对应于委托提供的所有未知数的并集,遵循一些算法,直到通过迭代找到所有根。

我的问题是上述系统的每个代表都是由不同的类提供的。这实际上是一个问题,因为委托号1是在别处的不同类中定义的函数,现在需要它的参数x2,x3,x4对应于来自输入向量的值b,c,d但是它不知道除非在某处定义某种映射(?)。

似乎每个类提供的解算器和委托之间存在依赖。有没有办法可以设计我的系统,以便每个函数都知道从哪里获取相应的x值,以便求解器能够完成它的工作?我一直在考虑实现哈希表并为每个参数创建标识符,但这对我来说似乎都非常有用。

在实践中,我将使用一个具有1000多个方程和1000个未知数的系统来解决上述问题。

是否有可以帮助我的数据结构或模式?

1 个答案:

答案 0 :(得分:0)

在理解问题时遇到一些麻烦,但我怀疑它可以通过用一些0系数重新定义方程来解决,例如

委托1)x1 * 0 + x4 + f(x4,x2,x3) - 2 = 0

委托2)x2 * 0 + x3 * 0 + g(x1,x2) - 0.5 = 0

委托3)x4 * 0 + h(x1,x2)+ x1 * x3 - 5 = 0

委托4)x1 * 0 + x2 * 0 + x3 * x4 - 2 = 0

以上将产生完全相同的结果,而没有如何读取矢量的模糊性。这避免了问题,因为所有代表都有相同的参数。