Matlab - obtener datos de otra funcion

 
Vista:

obtener datos de otra funcion

Publicado por hore69 (5 intervenciones) el 09/09/2005 18:28:38
Hola amigos estoy comenzando en MATLAB, y tengo un pequeño problemilla con las funciones, que intentare explicar:
1º- tengo un archivo .m con una funcion llamada numero_onda, que es:

function [l,k]=numero_onda(f)
c=343;
l=c/f;
k=2*pi/l;

2º tengo otro archivo .m desde el que obtengo un valor para f, con un elemento de una gui

Mi pregunta es: ¿Como puedo obtener desde el segundo archivo .m el valor de l y k de la funcion numero_onda con la frecuencia f del segundo archivo?

POR FAVOR INTENTEN AYUDARME, YA SE QUE SERA MUY SENCILLO PERO ES QUE NO CONSIGO HACERLO.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:obtener datos de otra funcion

Publicado por Raúl Santiago (211 intervenciones) el 09/09/2005 22:07:54
No veo cual es tu problema, es solo llamar la función porque ella te pide el dato y devuelve los qeu necesitas, tu le estás diciendo la función numero_onda, me pide f y me retorna l y k, eso supongamos qeu lo vas a guardar en a y b, y qeu en tu programa original la frecuencia es frec, como para que veas que no importa el nombre de las variables. Para llamar y obtener los datos, sería simplemente:

[a,b]=numero_onda(frec)

Lo otro es que el archivo que estés guardadando, tenga el mismo nombre que la función. Lo otro, es qeu no se si el underscore te lo está aceptando, podría ser el problema, así pon la función con un nombre seguido, osea, numeroonda

Ojalá te sirva, Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:obtener datos de otra funcion

Publicado por Asensio (5 intervenciones) el 12/09/2005 08:13:21
Amigo Raul, me sigue sin funcionar, el problema es que el segundo archivo que yo te dije en el post anterior es un archivo.m de una GUI, la frecuencia la selecciono con un popupmenu y una vez que selecciono esa freq quiero que se vaya a la otra funcion me calcule los 2 valores y los presente en 2 textEdit. Aqui te dejo el comando que he hecho para el Callback del popupmenu.

function popupmenu1_Callback(hObject, eventdata, handles)

freq={'62.5';'125';'250';'500';'1000';'2000';'4000';'8000';'16000'};
value=freq(get(hObject,'value'))
freq=value;
[num1,num2]=numeroOndas(freq)
set(handles.edit1,'string',num);

y el error que me aparece es:

value =

'2000'

??? Error using ==> /
Function '/' is not defined for values of class 'cell'.

Error in ==> C:\MATLAB6p5\work\numeroOndas.m
On line 9 ==> l=c/f;

Error in ==> C:\MATLAB6p5\work\NumeroOnda.m (popupmenu1_Callback)
On line 106 ==> [num1,num2]=numeroOndas(freq)

Error in ==> C:\MATLAB6p5\toolbox\matlab\uitools\gui_mainfcn.m
On line 66 ==> feval(varargin{:});

Error in ==> C:\MATLAB6p5\work\NumeroOnda.m
On line 42 ==> gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback.

SABE ALGUIEN QUE ESTOY HACIENDO MAL, SI PARECE NA COSA MUY SENCILLA.
POR FAVOR AYUDENME. UN SALUDO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:obtener datos de otra funcion

Publicado por Magaly (41 intervenciones) el 23/09/2005 19:29:28
El problema que tu tienes es que el cell array freq está compuesto por cadenas de caracteres, cuando en realidad tenía que ser de NÚMEROS. Por eso al hacer la división no entiende el tipo de dato:
Function '/' is not defined for values of class 'cell'.

Lo que tienes que escribir es:
freq={62.5; 125; 250 ; 500; 1000; 2000; 4000; 8000; 16000};
para que al seleccionar un elemento del popup te asegures de que sea un número.

Si necesariamente freq tiene que ser un array de caracteres, tienes la función str2double o str2num que te convierten un string en un número, así:
freq=str2num(value);

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:obtener datos de otra funcion

Publicado por fismat (391 intervenciones) el 30/09/2005 16:22:55
revisen este forum, encontraran varias cosas de interes para todos lo matlaceros

http://www.universas.com/matlab/phpBB2/index.php

por el pueno hacer un aporte de un scripts dond se calcula la fuerza electrica de n cargas puntuales

% programa creado por David Correa


clear all
close all
ncargas=0;

while (ncargas<2)

ncargas=input('Numero de Cargas : ');

if (ncargas>1)

fprintf('\nCargas y Posiciones de las %d Cargas\n',ncargas)

for n=1:ncargas
fprintf('\n');
Q(n)=input(['Carga --> Q[',num2str(n),'] : ']);
X(n)=input(['Posición --> X[',num2str(n),'] : ']);
Y(n)=input(['Posición --> Y[',num2str(n),'] : ']);
Z(n)=input(['Posición --> Z[',num2str(n),'] : ']);
end

id=input('Calcular la fuerza Electrica sobre la carga : ');

fx=0;
fy=0;
fz=0;
epsi=8.854e-12;
const=1/(4*pi*epsi);
for i=1:ncargas

if (i~=id)
x=X(id)-X(i);
y=Y(id)-Y(i);
z=Z(id)-Z(i);
r=sqrt(x^2+y^2+z^2);
fx=fx+const*Q(id)*Q(i)*x/r^3;
fy=fy+const*Q(id)*Q(i)*y/r^3;
fz=fz+const*Q(id)*Q(i)*z/r^3;
end

end
fx,fy,fz
Fe=sqrt(fx^2+fy^2+fz^2)
if (Fe~=0)
ui=fx/Fe;
uj=fy/Fe;
uk=fz/Fe;
else
disp('Posible equilibrio de fuerzas')
disp('verificar los valores de posiciones y cargas')
ui=0;
uj=0;
uk=0;
end

for i=1:ncargas
if (Q(i)>0)
plot3(X(i),Y(i),Z(i),'or','markersize',7,'LineWidth',4)
hold on
plot3(X(i),Y(i),Z(i),'+b','markersize',7,'LineWidth',3)
hold on
plot3([X(id),X(i)],[Y(id),Y(i)],[Z(id),Z(i)],'--r','markersize',8)
hold on
text(X(i)+0.2,Y(i)+0.2,Z(i)+0.2,num2str(i),'fontsize',15)

else
plot3(X(i),Y(i),Z(i),'.k','markersize',22)
hold on
plot3([X(id),X(i)],[Y(id),Y(i)],[Z(id),Z(i)],'--r','markersize',8)
hold on
text(X(i)+0.2,Y(i)+0.2,Z(i)+0.2,num2str(i),'fontsize',15)
end
end

quiver3(X(id),Y(id),Z(id),ui,uj,uk,0.5)
axis([min(X)-2 max(X)+2 min(Y)-2 max(Y)+2 min(Z)-2 max(Z)+2])
title({'CREDITOS: DAVID CORREA','LA FUERZA RESULTANTE ES : ',[num2str(Fe,3),' Newton ' ]})
xlabel('Eje X');
ylabel('Eje Y');
zlabel('Eje Z');
grid on


else
disp('Considere el numero de cargas mayor o igual a 2')
salir=input('Desea continuar si[s]/no[n] ','s');

if or(salir=='n',salir=='N')
disp('**** Ha terminado ****')
break
end


end

end


hasta pronto y escribeme
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar