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

Modelica 将多个数组输出从函数返回到参数,modelica,Modelica,我有一个函数,它返回两个大小不等的数组a,B。它们用于确定模型的初始条件,因此我希望将它们分别定义为模型中的参数数组。这是否可能,如果可能,如何实现 下面是问题的一些伪代码: 作用 模型 我尝试过几件失败的事情。一种成功的方法是使用初始方程部分。但是,它要求我定义一个变量,并在一个等式部分中添加derA_start=0,并阻止我为变量提供一个非固定的猜测值,即Astart=A_start,这可能会导致问题 谢谢你的帮助,即使这证实了我运气不佳。像往常一样,你发布东西的那一刻,你就会顿悟 通过在参

我有一个函数,它返回两个大小不等的数组a,B。它们用于确定模型的初始条件,因此我希望将它们分别定义为模型中的参数数组。这是否可能,如果可能,如何实现

下面是问题的一些伪代码:

作用

模型

我尝试过几件失败的事情。一种成功的方法是使用初始方程部分。但是,它要求我定义一个变量,并在一个等式部分中添加derA_start=0,并阻止我为变量提供一个非固定的猜测值,即Astart=A_start,这可能会导致问题


谢谢你的帮助,即使这证实了我运气不佳。

像往常一样,你发布东西的那一刻,你就会顿悟

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

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;

像往常一样,当你发布一些东西时,你会顿悟

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

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

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

我认为有办法打破这个问题的记录。真希望我能记下两个答案,就像你说的,我不知道哪一个更好。你的回答更直接地符合我最初的想法,所以我将它标记为答案。谢谢你,汉斯。我想有办法打破这个问题。真希望我能记下两个答案,就像你说的,我不知道哪一个更好。你的回答更直接地符合我最初的想法,所以我将它标记为答案。谢谢你,汉斯。