我正在测试Extreme Optimization C#库,具体是非线性系统求解器。
例如,我发现我必须将非线性系统以以下形式传递给求解器:
问题在于我试图解决的系统无法在设计时指定。它是由负荷流方程组成的非线性系统,用于解决交流电路的电路。这些方程由许多变量组成,这些变量取决于网格中节点的数量,该数量由用户指定。这些方程如下: 基本上每个节点有两个方程式,这是2*n个方程式,无法在单行中组成,因为它们依赖于i、j索引,因此我必须有2个嵌套的for循环来创建P和Q方程式。
有没有一种方法可以创建
我看到了帖子Creating a function dynamically at run-time,但它没有回答我的问题(我认为)
//************************EDIT**************************************
方程式的创建类似于以下内容:
当然,A和B包含变量,而这个循环公式本身并没有太大意义。
提前感谢。
Func<Vector, double>[] f = {
x => Math.Exp(x[0])*Math.Cos(x[1]) - x[0]*x[0] + x[1]*x[1],
x => Math.Exp(x[0])*Math.Sin(x[1]) - 2*x[0]*x[1]
};
问题在于我试图解决的系统无法在设计时指定。它是由负荷流方程组成的非线性系统,用于解决交流电路的电路。这些方程由许多变量组成,这些变量取决于网格中节点的数量,该数量由用户指定。这些方程如下: 基本上每个节点有两个方程式,这是2*n个方程式,无法在单行中组成,因为它们依赖于i、j索引,因此我必须有2个嵌套的for循环来创建P和Q方程式。
有没有一种方法可以创建
Func<Vector, double>[] f = {可变长度的方程系统};
?我看到了帖子Creating a function dynamically at run-time,但它没有回答我的问题(我认为)
//************************EDIT**************************************
方程式的创建类似于以下内容:
For (int i=0; i< n; i++){
double A=0.0;
double B=0.0;
For (int j=0; j< n; j++){
A+= G[i,j]*Math.Cos(Theta[i,j]) + B[i,j]*Math.Sin(Theta[i,j])
B+= G[i,j]*Math.Sin(Theta[i,j]) + B[i,j]*Math.Cos(Theta[i,j])
}
P[i]=V[i]*A;
Q[i]=V[i]*B;
}
当然,A和B包含变量,而这个循环公式本身并没有太大意义。
提前感谢。