Drexel dragonThe Math ForumDonate to the Math Forum



Search All of the Math Forum:

Views expressed in these public forums are not endorsed by Drexel University or The Math Forum.


Math Forum » Discussions » Software » comp.soft-sys.matlab

Topic: Error using ===> horzcat exception when invoking Matlab COM objects
Replies: 1   Last Post: Mar 2, 2008 5:29 AM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]
mon

Posts: 46
Registered: 12/6/04
Error using ===> horzcat exception when invoking Matlab COM objects
Posted: Mar 1, 2008 1:23 PM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

Hi!
I'm developing a .NET application where I use some Matlab
COM Objects wich execute Neuronal Analysis algorithms over a
group of data.
Each COM object represent a different algorithm.
When I invoke this objects from my application successively,
there is a time that I get this exception:

System.Runtime.InteropServices.COMException (0x80004005):
Error using ===> horzcat
The following error ocurred converting from double to opaque:
Error using ===> horzcat
Undefined function or method 'opaque' for input arguments of
type 'double'. Error in => PCANeuronal.m at 83
at PCANeuronal.PCANeuronalclassClass.PCANeuronal(Object m,
Object lrate, Object iters, Object datos, Object clases,
Object nombreFichero)


The algorithm work perfectly when executed directly from Matlab.

The exception is thrown always at the same sentence in any
of the algorithms (the one that I'm executing):

f=figure;
hold on; <- here it throws the exception

That is when I create the figure and I set hold on for
plotting the points in the figure.

I don't understand what the exception really means so I
would appreciate if anyone could explain me why this could
be happening.

I post you the Matlab algorithms I'm using.

Thank you in advance...


PCAEstadistico.m

function PCAEstadistico(datos,clases,nombreFichero)

%Comprobacion del numero de argumentos
if nargin~=3
error('La llamada a la función debe ser:
PCAEstadistico(ficherodatos,ficheroclases,nombreFichero)');
end

% Lectura del fichero que contiene los datos
data = dlmread(datos,';');

% Numero de filas(muestras) y columnas(variables) que se
tienen en el conjunto de datos
[fil,col]=size(data);

% Centramos los datos restando la media
media = mean(data);
for i=1:fil
data(i,:)=data(i,:)-media;
end

% s valores propios
% u vectores propios
% svd: singular values decomposition

[u,s,v]=svd(cov(data));

% Obtengo las dos primeras componentes principales
w = u(:,1:2)';

% Lectura del fichero de nombres (clases)
nombres = textread(clases,'%s');

clases = unique(nombres);
[numclases]=size(clases);

% Obtengo los colores de las figuras
colores = jet(numclases(1,1));

% Represento los datos
f=figure;
hold on;

%T?tulo de la figura
title('PCA Estad?stico');
%Nombre de la figura
set(f,'Name','PCA Estad?stico');
set(f,'NumberTitle','off');

% Dibujamos las figuras
for i=1:fil
x = data(i,:);
y = w*x';

for j=1:numclases
% Compruebo la clase de la observacion e imprimo
con el color de
% la clase
comp=strcmp(nombres(i,1), clases(j,1));
if (comp)
plot(y(1),y(2),'.','color', colores(j,:));
break;
end
end

hold on
end

xlabel('Primera Componente Principal');
ylabel('Segunda Componente Principal');

%Guardar la imagen en un fichero
saveas(f,strcat(nombreFichero,'PCAEstadistico'),'jpg');

%Guardar la matriz de pesos en un fichero
fnombre=strcat(nombreFichero,'PCAEstadisticoPesos.txt');
fid = fopen(fnombre,'w');
for i=1:2
for j=1:col
fprintf(fid,'%6.4f \t',w(i,j));
end
fprintf(fid ,'\n');
end
fclose(fid);


PCANeuronal.m

function PCANeuronal(m,lrate,iters,datos,clases,nombreFichero)

% Comprobamos el n?mero de argumentos
if nargin~=6
error('La llamada a la funci?n debe ser:
PCANeuronal(m,lrate,iters,ficherodatos,ficheroclases,nombreFichero)');

end

% Calculamos el step (coeficiente de aprendizaje/numero
iteraciones)
step=lrate/iters;

% Lectura del fichero que contiene los datos
data = dlmread(datos,';');

% Numero de filas(muestras) y columnas(variables) que se
tienen en el conjunto de datos
[fil,col]=size(data);

% Inicializamos la matriz de pesos y la de salida a ceros
w=zeros(m,col);
y=zeros(m,1);

% Rellenamos la matriz de pesos con valores aleatorios
w=rand(m,col).*0.01;
x=zeros(1,col);

% Centramos los datos restando la media
media=mean(data);
for i=1:fil
data(i,:)=data(i,:)-media;
end

% Iteraciones
for j=1:iters

% Elegimos un elemento de manera aleatoria
temp=ceil(rand(1)*fil);
x=data(temp,:);

% Paso adelante. Calculo salida multiplicando pesos por
las entradas
y = zeros(m,col);
y=w*x';

% Paso atras. Calculo los residuos.
e = zeros(fil,col);
e=x-y'*w;

% Incremento de los pesos
inc = lrate*y*e;
w=w+inc;

% Decrementamos el coeficiente de aprendizaje
lrate=lrate-step;

end

% Lectura del fichero de nombres (clases)
nombres = textread(clases,'%s');

clases = unique(nombres);
[numclases]=size(clases);

% Mostramos los resultados

% Obtengo los colores de las figuras
colores = jet(numclases(1,1));

% Represento los datos
f=figure;
hold on;

%T?tulo de la figura
title('PCA Neuronal');
%Nombre de la figura
set(f,'Name','PCA Neuronal');
set(f,'NumberTitle','off');

% Dibujamos las figuras
for i=1:fil
x = data(i,:);
y = w*x';

for j=1:numclases
% Compruebo la clase de la observacion e imprimo
con el color de
% la clase
comp=strcmp(nombres(i,1), clases(j,1));
if (comp)
plot(y(1),y(2),'.','color', colores(j,:));
break;
end
end

hold on
end

xlabel('Primera Componente Principal');
ylabel('Segunda Componente Principal');

disp('Producto de la matriz de pesos:');
w*w'

%Guardar la imagen en un fichero
saveas(f,strcat(nombreFichero,'PCANeuronal'),'jpg');

%Guardar la matriz de pesos en un fichero
fnombre=strcat(nombreFichero,'PCANeuronalPesos.txt');
fid = fopen(fnombre,'w');
for i=1:2
for j=1:col
fprintf(fid,'%6.4f \t',w(i,j));
end
fprintf(fid ,'\n');
end
fclose(fid);


MaximumLikelihood.m

function
MaximumLikelihood(m,lrate,p,iters,datos,clases,nombreFichero)

% Comprobamos el n?mero de argumentos
if nargin~=7
error('La llamada a la funci?n debe ser:
MaximumLikelihood(m,lrate,p,iters,ficherodatos,ficheroclases,nombreFichero)');

end

% Calculamos el step (coeficiente de aprendizaje/numero
iteraciones)
step=lrate/iters;

% Lectura del fichero que contiene los datos
data = dlmread(datos,';');

% Numero de filas(muestras) y columnas(variables) que se
tienen en el conjunto de datos
[fil,col]=size(data);

% Inicializamos la matriz de pesos y la de salida a ceros
w=zeros(m,col);
y=zeros(m,1);

% Rellenamos la matriz de pesos con valores aleatorios
w=rand(m,col).*0.01;
x=zeros(1,col);

% Centramos los datos restando la media
media=mean(data);
for i=1:fil
data(i,:)=data(i,:)-media;
end

%blanqueamos
data=data*inv(sqrtm(cov(data)));

% Iteraciones
for j=1:iters

% Elegimos un elemento de manera aleatoria
temp=ceil(rand(1)*fil);
x=data(temp,:);

% Paso adelante. Calculo salida multiplicando pesos por
las entradas
y = zeros(m,col);
y=w*x';

% Paso atras. Calculo los residuos.
e = zeros(fil,col);
e=x-y'*w;

% Incremento de los pesos
inc = lrate.*y*((abs(e).^p).*(sign(e)));
w=w+inc;

% Decrementamos el coeficiente de aprendizaje
lrate=lrate-step;

end

% Lectura del fichero de nombres (clases)
nombres = textread(clases,'%s');

clases = unique(nombres);
[numclases]=size(clases);

% Mostramos los resultados
% Obtengo los colores de las figuras
colores = jet(numclases(1,1));

% Represento los datos
f=figure;
hold on;

%T?tulo de la figura
title('MaximumLikelihood');
%Nombre de la figura
set(f,'Name','MaximumLikelihood');
set(f,'NumberTitle','off');

% Dibujamos las figuras
for i=1:fil
x = data(i,:);
y = w*x';

for j=1:numclases
% Compruebo la clase de la observacion e imprimo
con el color de
% la clase
comp=strcmp(nombres(i,1), clases(j,1));
if (comp)
plot(y(1),y(2),'.','color', colores(j,:));
break;
end
end

hold on
end

xlabel('Primera Componente Principal');
ylabel('Segunda Componente Principal');

disp('Producto de la matriz de pesos:');
w*w'

%Guardar la imagen en un fichero
saveas(f,strcat(nombreFichero,'MaximumLikelihood'),'jpg');

%Guardar la matriz de pesos en un fichero
fnombre=strcat(nombreFichero,'MaximumLikelihoodPesos.txt');
fid = fopen(fnombre,'w');
for i=1:2
for j=1:col
fprintf(fid,'%6.4f \t',w(i,j));
end
fprintf(fid ,'\n');
end
fclose(fid);

ConexionesLaterales.m

function
ConexionesLaterales(m,lrate,p,tau,iters,datos,clases,nombreFichero)
%ejemplo de llamada a la funci?n
if nargin~=8
error('La llamada a la funci?n debe ser:
ConexionesLaterales(m,lrate,p,tau,iters,ficherodatos,ficheroclases,nombreFichero)');

end

%Calculamos el step (coeficiente de aprendizaje/numero
iteraciones)
step=lrate/iters;

%lectura del fichero que contiene los datos
data = dlmread(datos,';');

%numero de filas y columnas que se tienen en el conjunto
de datos
[fil,col]=size(data)

%inicializamos la matriz de pesos y la de salidas a ceros
w=zeros(m,col);
y=zeros(m,1);

%rellenamos la matriz de pesos con valores aleatorios
w=rand(m,col).*0.1;
x=zeros(1,col);

%restamos la media para centrar los datos
media=mean(data);
for i=1:fil
data(i,:)=data(i,:)-media;
end

%blanqueamos
temp=inv(sqrtm(cov(data)));
data=data*temp;

%inicializo a ceros la matrizA
matrizA=zeros(m,m);
%Calculamos la matriz A
for i=1:m
for j=1:m
if i==j
matrizA(i,j)=(1 - cos (2*pi* (i-j) / m));
else
matrizA(i,j)=(0 - cos (2*pi* (i-j) / m));
end
end
end

%iteraciones
for k=1:iters
tem=ceil(rand(1)*fil);
x=data(tem,:);

%paso adelante
y=w*x';

%inicializamos resultado
yahora=zeros(m,1);
resultado=zeros(m,1);

%Activacion Lateral
resultado = y + (tau*(1-matrizA*y));
if resultado < 0
yahora=zeros(m,1);
else
yahora=resultado;
end

%paso atras
e=x-yahora'*w;

%incremento de los pesos
for t=1:col
d=lrate.*yahora*((abs(e).^p).*(sign(e)));
end
w=w+d;

%decrementamos el coeficiente de aprendizaje
lrate=lrate-step;

end

%lectura del fichero de nombres (clases)
nombres = textread(clases,'%s');

clases = unique(nombres);
[numclases]=size(clases);

%Mostramos los resultados

% Obtengo los colores de las figuras
colores = jet(numclases(1,1));

% Dibujamos las figuras
f=figure;
hold on;

%T?tulo de la figura
title('ConexionesLaterales');

%Nombre de la figura
set(f,'Name','ConexionesLaterales');
set(f,'NumberTitle','off');

% Dibujamos las figuras
for i=1:fil
x = data(i,:);
y = w*x';

for j=1:numclases
% Compruebo la clase de la observacion e imprimo
con el color de
% la clase
comp=strcmp(nombres(i,1), clases(j,1));
if (comp)
plot(y(1),y(2),'.','color', colores(j,:));
break;
end
end

hold on
end

xlabel('Primera Componente Principal');
ylabel('Segunda Componente Principal');

disp('Producto de la matriz de pesos:');
w*w'

%Guardar la imagen en un fichero
saveas(f,strcat(nombreFichero,'ConexionesLaterales'),'jpg');

%Guardar la matriz de pesos en un fichero

fnombre=strcat(nombreFichero,'ConexionesLateralesPesos.txt');
fid = fopen(fnombre,'w');
for i=1:2
for j=1:col
fprintf(fid,'%6.4f \t',w(i,j));
end
fprintf(fid ,'\n');
end
fclose(fid);





Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© Drexel University 1994-2014. All Rights Reserved.
The Math Forum is a research and educational enterprise of the Drexel University School of Education.