Parece que usted está tratando de crear una matriz de objetos mango (tiradores) y guardarlo dentro de la propiedad de otro objeto mango (un Squardron). He tenido un muy similar problem discussion que podría ayudarte.
En resumen: Lo que estás haciendo podría no ser bonito, pero ya podría ser bastante bueno.
Al crear una matriz en Matlab, generalmente es una buena idea hacer una preasignación para reservar memoria, lo que acelera significativamente el rendimiento.
En un caso algo normal como esto:
a=zeros(1,1000);
for n=1:1000
a(n)=n;
end
(aquí a = 1: 1000; sería aún mejor)
Para los objetos de los trabajos de pre-asignación mediante la asignación de uno de los objetos de el último campo de la matriz. A continuación, Matlab llena los otros campos con objetos (identificadores) que crea llamando al constructor de ese objeto sin argumentos (consulte Matlab help).De ahí que una asignación previa de los objetos podría tener este aspecto:
a(1,1000)=ObjectConstructor();
for n=1:1000
a(n)=ObjectConstructor();
end
o simplemente
for n=1000:-1:1
a(n)=ObjectConstructor();
end
Asegurarse tirador puede ser llamado sin argumentos que debería ser capaz de hacer algo como:
for iShooter = obj.num_shooters:-1:1
obj.ShooterArray(iShooter) = Shooter(num_targets, time_steps);
end
Sin embargo, resulta que por alguna razón este almacenamiento directo de una matriz de objetos en la propiedad de otro objeto crea un rendimiento muy malo. (Probablemente, la preasignación de matriz no funciona bien en este caso). Por lo tanto, usar una variable auxiliar y asignar toda la matriz de una vez a la propiedad es en este caso una buena idea para aumentar el rendimiento.
me gustaría probar:
for iShooter = obj.num_shooters:-1:1
a(iShooter) = Shooter(num_targets, time_steps);
end
obj.ShooterArray = a;
Una vez más - para más detalles ver this discussion
Sorprendentemente también se puede asignar array '' Shooter' directamente en Shooter' constructor: http://www.mathworks.com /help/techdoc/matlab_oop/brd4btr.html – Mikhail
lo estoy asignando al constructor, ¿conoces una manera más limpia de hacerlo que usar una variable temporal? Tal vez me estoy perdiendo algo. – bonhoffer
"Manera más limpia" es subjetivo ... Mi mensaje: funciona no solo en 'Squadron' sino también directamente en' Shooter' constructor. – Mikhail