Matlab - Acceder a variables externas

 
Vista:

Acceder a variables externas

Publicado por Jausk (1 intervención) el 18/05/2011 19:19:24
Buenas tardes

Mi duda trata sobre si es posible acceder a variables fuera del ambito de un script que se este ejecutando... Por ejemplo, si hago

>> A=[1 2 3 4];
>> script;

Que el script pueda acceder a A sin necesidad de pasarle la variable.

El problema es que necesito acceder a unas variables externas a traves de una GUI creada mediante GUIDE

Un saludo, muchas gracias
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
Imágen de perfil de Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Acceder a variables externas

Publicado por Dave (1094 intervenciones) el 24/05/2011 19:28:52
Hola!!!

En pocas palabras, necesitas declarar variables globales.

Saludos
Dave
[email protected]
http://fismatlab.blogspot.com/
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Acceder a variables externas

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/05/2011 14:51:12
Hola Jausk.
Un dos tipos para hacer un programa en Matlab. Uno es scripts y el otro funciones.
1. SCRIPTS
Un script se define mediante un m-fichero, el cual está formado por un conjunto de sentencias pero no tiene la cualidad de ser una función como y=sin(x) que posee argumentos de entrada y salida. Además se puede guardar con cualquier nombre que deseamos, claro que debe ser un nombre referente a que hace el m.fichero.

1. FUNCIONES
Una función se define mediante un m-fichero, cuyo nombre coincide con el nombre de la función. La primera línea ejecutable debe tener la palabra function. Su sintaxis es
function argumentos_salida=nombre_función(argumentos_entrada)
seguida de las instrucciones necesarias. Cuando hay más de un argumento de salida, éstos deben ir entre corchetes y separados por comas.
Las variables definidas en la función (salvo los argumentos) son locales. Para que el valor de una variable sea compartido por varias funciones se emplea la instrucción global , cuya sintaxis es global variable y debe aparecer en todas las funciones que la compartan.

Los GUIDE dentro de FUNCIONES. Por lo tanto todo los varialbes son locales, eso quiere decir, cuando uno ejecuta un programa GUIDE, y luego escribe en la ventana de comandos los nombres de la variables para ver sus valores, nos va a salir este mensaje por ejemplo para el programa que voy a pegar mas adelante " ??? Undefined function or variable 'sumavector'.".

Ahora para poder acceder a un VARIABLE EXTERNA DESDE UN GUIDE. tenemos que escribir dentro de la funcion de GUIDE: Por ejempo: Si mi variables externa es A, entonces escibiremos: global A.
y en la ventana comandos tambien de de esa manera.
>> A=global A , A=[1 2 3 4];
luego ejecutamos nuestro archivo GUIDE.

aca copio el archivo GUIDE, que suma todo los elemntos del vector A, donde A es una VARIABLE EXTERNA.

%==================================================
function varargout = sumaexterna(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @sumaexterna_OpeningFcn, ...
'gui_OutputFcn', @sumaexterna_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end

function sumaexterna_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

function varargout = sumaexterna_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
global A
sumavector=sum(A);
set(handles.pushbutton1,'String', sumavector)
%====================================================

En mi caso yo he guardado mi GUIDE con el nombre de sumaexterna.m

para ejecutarlo. lo primero que hago es:

>> A=global A , A=[1 2 3 4];

luego ejecuto el GUIDE sumaexterna.
y como respuesta me va dar el GUIDE el valor de 10.

Bueno el valor de 10, sale en la ventana de figura de GUIDE sumaexterna.

Del programa GUIDE ANTERIOR Observa esta seccion:
%================================================
function pushbutton1_Callback(hObject, eventdata, handles)
global A
sumavector=sum(A);
set(handles.pushbutton1,'String', sumavector)
%==================================================
como veras, el comando global, justo esta aqui, eso es asi, porque dentro de esta funcion pushbutton1_Callback es en donde voy a llamar el valor de A.

OBSERVACION: Como estas el programando en GUIDE, supongo que conoces como funcionan los GUIDE. No vayas a pegar este archivo en matlab y ejecutarlo.Si haces eso, te va a salir un error.Las funciones no funcionan como scripts, un scripts uno puede copiar y ejecutar y todo sale muy bien, pero con los GUIDE no es asi.

Como no haz dejado tu correo, entonces no puede enviarte el archivo GUIDE, si deseas escribeme a mi correo y te envio el archivo para que veas como esta hecho.

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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