AJo*_*iri 3 arrays vector modelica
我有一个大小为“5”的“重心”向量:
parameter Length barycenters[5] = {1, 2, 3, 4, 5};
Run Code Online (Sandbox Code Playgroud)
我想将这个向量的参数添加到另一个大小为“7”的向量(b_prime)中,这意味着打算让 b_prime = {0, 1, 2, 3, 4, 5, 10}。如何在 Modelica 中编写代码行来做到这一点?我尝试了以下操作,但收到错误消息:
parameter Length b_prime[7] = {0, barycenters[1:5], 10};
Run Code Online (Sandbox Code Playgroud)
或者
parameter Length b_prime[7] = {0, barycenters, 10};
Run Code Online (Sandbox Code Playgroud)
我会很感激你的帮助。
下面的代码应该做你想做的:
model CombineVectors
import Modelica.SIunits.Length;
parameter Length barycenters[5] = {1, 2, 3, 4, 5};
parameter Length b_prime[7] = cat(1, {0}, barycenters, {10});
end CombineVectors;
Run Code Online (Sandbox Code Playgroud)
需要注意的两个重要事项:
cat()是数组应连接的维度cat()除了第一个的每个参数都有一个维度。来自Modelica Language Specification,第 10.4.2 节数组连接:
该函数根据以下规则沿维度cat(k,A,B,C,...)连接数组:A,B,C,...k
A, B, C, ...必须具有相同的维数,即ndims(A) = ndims(B) = ...A, B, C, ...必须是类型兼容的表达式(第 6.6 节),给出结果元素的类型。最大扩展类型应该是等效的。实数和整数子类型可以混合生成实数结果数组,其中整数已转换为实数。1 <= k <= ndims(A) = ndims(B) = ndims(C); k应该是一个整数。A, B, C, ...必须具有相同的数组大小,维度的大小除外k,即size(A,j) = size(B,j),对于1 <= j <= ndims(A) and j <> k。