将多个数组输出从函数返回到参数

时间:2018-05-02 17:22:24

标签: modelica

我有一个函数返回两个不等大小的数组(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} })变量,这可能会导致问题。

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

2 个答案:

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