Return 从函数到参数的多个数组输出

Return multiple array outputs from function to parameter

我有一个函数 returns 两个大小不等的数组 (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,并阻止我提供非固定的猜测值(即 A(start=A_start)) 到变量,这可能会导致问题。

感谢您的帮助,即使它确认我运气不好。

像往常一样,当你 post 某事时,你会顿悟。

通过添加一些额外的信息以及参数定义,我可以做我需要的事情。

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;

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);