c# - 非线性系统 - 如何跟踪委托(delegate)的未知数?

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

这听起来像是一道数学题,但实际上更像是一道编程设计题。

假设我已经在 C# 中实现了一个多维根求解器来查找以下系统的未知数,该系统由我作为委托(delegate)传递的方程式构成:

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

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

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

委托(delegate) 4) x3*x4 - 2 = 0

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

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

在求解器和每个类提供的委托(delegate)之间似乎存在依赖性。有没有一种方法可以设计我的系统,以便每个函数都知道从哪里获得相应的 x 值,以便求解器可以完成它的工作?我一直在考虑实现哈希表并为每个参数创建标识符,但对我来说这一切似乎都很无趣。

在实践中,我将处理一个包含 1000 多个方程和 1000 个未知数的系统,并存在上述问题。

是否有数据结构或模式可以帮助我解决这个问题?

最佳答案

理解这个问题有点困难,但我怀疑可以通过用一些 0 系数重新定义方程来解决这个问题,例如

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

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

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

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

以上将产生完全相同的结果,而不会产生如何读取向量的歧义。这回避了问题,因为所有委托(delegate)都将有相同的参数。

关于c# - 非线性系统 - 如何跟踪委托(delegate)的未知数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44076967/

相关文章:

c# - VisualStudio VSPackage 自定义命令

javascript - 基于其他数组过滤集合(对象数组)

c - 带指针的 C 数组队列

c++ - 如何改进使用单例模式的消息传递系统?

c# - .NET 2.0 : Sending email to a distribution group

c# - .NET 中的代理身份验证 - 用于外部 API

javascript - javascript递归骰子组合并将结果存储在矩阵中

design-patterns - 更改 haxe 对象的 "this"范围。可能的?

python - 在 Tornado 中使异步调用同步

c# - 对正则表达式的澄清