我有一个函数返回两个不等大小的数组(A,B)。这些用于确定模型的初始条件,因此我希望它们在模型中定义为parameter
数组。这是可能的,如果是的话,怎么样?
以下是该问题的一些伪代码:
功能
function myfunc
input Real[:] alpha;
input Real[:] beta;
output Real[size(alpha,1)] A;
output Real[size(beta,1)] B;
algorithm
//equations, etc.
end myfunc;
模型
model mymodel
parameter Real[2] alpha = {1,2};
parameter Real[3] beta = {3,4,5};
parameter Real (A_start,Bstart) = myfunc(alpha,beta)
Real[size(alpha ,1)] A(start=A_start);
Real[size(beta,1)] B(start=B_start);
equation
//equations, etc.
end mymodel;
我尝试了几件失败的事情。一种成功的方法使用了初始方程部分。但是,例如,它要求我将A_start
定义为变量并在等式部分中添加der(A_start) = 0
,并阻止我提供非固定的猜测值(即{{1} })变量,这可能会导致问题。
感谢您的帮助,即使它确认我没有运气。
答案 0 :(得分:2)
像往常一样,当你发布一些东西时,你会得到一个顿悟。
通过添加一些额外的信息以及参数定义,我可以做我需要的事情。
model mymodel
parameter Real[2] alpha = {1,2};
parameter Real[3] beta = {3,4,5};
// Adding fixed=false was the missing key
parameter Real A_start(fixed=false);
parameter Real B_start(fixed=false);
Real[size(alpha ,1)] A(start=A_start);
Real[size(beta,1)] B(start=B_start);
initial equation
(A_start,Bstart) = myfunc(alpha,beta)
equation
//equations, etc.
end mymodel;
答案 1 :(得分:2)
Scott G的解决方案有效,但也有可能以其他方式解决 - 可能会或可能不会更好。一个常见的想法如下:
record R
Real A[:],B[:];
end R;
function bar
input Real[:] alpha;
input Real[:] beta;
output R r(redeclare Real A[size(alpha,1)],redeclare Real B[size(beta,1)]);
algorithm
(r.A,r.B):=myfunc(alpha,beta);
end bar;
parameter R r=bar(alpha,beta);
Real[size(alpha, 1)] A(start=r.A);
Real[size(beta,1)] B(start=r.B);