Matlab - Solucion de sistemas de ecuaciones diferenciales con GUI (metodo Runge kutta)

 
Vista:

Solucion de sistemas de ecuaciones diferenciales con GUI (metodo Runge kutta)

Publicado por Alan Martinez Segrera (4 intervenciones) el 02/11/2011 11:05:00
He estado tratando de evaluar la funcion f en el desarrollo del programa de rungekutta para resolver un sistema de ecuaciones que introduzco por la interfaz grafica, mostrandome el error: ??? Subscript indices must either be real positive integers or logicals.

El codigo es el siguiente:

function calcular_Callback(hObject, eventdata, handles)
clc
f=get(handles.f,'string');

a=str2double(get(handles.a,'string'));
b=str2double(get(handles.b,'string'));
N=str2num(get(handles.N,'string'));
alpha=str2double(get(handles.V1,'string'));


h = (b-a)/N; %the step size
t(1) = a;
w(:,1) = alpha; %initial conditions

for i = 1:N
k1 = h*f(t(i), w(:,i)); %AQUI ME APARECE EL PRIMER ERROR
k2 = h*f(t(i)+h/2, w(:,i)+0.5*k1);
k3 = h*f(t(i)+h/2, w(:,i)+0.5*k2);
k4 = h*f(t(i)+h, w(:,i)+k3);
w(:,i+1) = w(:,i) + (k1 + 2*k2 + 2*k3 + k4)/6;
t(i+1) = a + i*h;
end


[t' w']


De antemano gracias.
Nota: No es una tarea es algo personal ya que estoy aprendiendo solo.
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Solucion de sistemas de ecuaciones diferenciales con GUI (metodo Runge kutta)

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 03/11/2011 00:09:54
Hola Alan.
Te sugiera que hagas algo mas simple pero con matlab guide.
trata de hacer:
1) Primer programa.Leer dos numeros y luego imprimir la suma de ellos
2) segundo Programa: Leer una funcion y un punto, y luego que imprima la funcion evaluado en ese punto.



saludos
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR 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

Solucion de sistemas de ecuaciones diferenciales con GUI (metodo Runge kutta)

Publicado por Alan Martinez S (4 intervenciones) el 03/11/2011 02:40:14
Cordial Saludo
Gracias por responder tan rapido sabiendo lo ocupado que debe estar.
Lo que ocurre es que ya yo hice cierta cantidad de ejercicios básicos relacionados con los procedimientos de analisis numerico, de hecho este ejercicio lo descargué de internet y me funcionó en modo texto, pero el problema se me ha presentado al tratar de evaluar la función en modo gráfico.
Agradeciendo la atencion prestada.
Lic Alan Martinez S.
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

Solucion de sistemas de ecuaciones diferenciales con GUI (metodo Runge kutta)

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 03/11/2011 05:07:31
Hola Alan.

Bueno enviame los dos problemas que te propuese en matlab y podré deducir tu nivel de conocimientos de matlab.

saludos
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR 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

Solucion de sistemas de ecuaciones diferenciales con GUI (metodo Runge kutta)

Publicado por Alan Martinez Segrera (4 intervenciones) el 03/11/2011 17:04:50
Cordial Saludo

A pedido de usted envio los 2 problemas propuestos

%CODIGO QUE PERMITE SUMAR 2 NUMEROS Y MOSTRAR EL RESULTADO

function suma2_Callback(hObject, eventdata, handles)

a=str2double(get(handles.num1,'string'));
b=str2double(get(handles.num2,'string'));

sum=a+b;
set(handles.suma,'string',sum);


% CODIGO QUE PERMITE EVALUAR UNA FUNCION E IMPRIMIRLO

function f_Callback(hObject, eventdata, handles)

Newf=get(hObject,'string');
handles.f=Newf;
guidata(hObject,handles);

function pushbutton1_Callback(hObject, eventdata, handles)

fx=handles.f;
a=str2double(get(handles.varx,'string'));
x=a;
resultado=eval(fx);

set(handles.res,'string',resultado);
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

Solucion de sistemas de ecuaciones diferenciales con GUI (metodo Runge kutta)

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/11/2011 21:08:12
HOla Alan.
%=====================
function varargout = rungekutta4orden1(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @rungekutta4orden1_OpeningFcn, ...
'gui_OutputFcn', @rungekutta4orden1_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 rungekutta4orden1_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

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

function Leer_funcion1_Callback(hObject, eventdata, handles)
fun1=get(hObject,'String');
handles.fun1=fun1;
guidata(hObject,handles);
function Leer_funcion1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function leer_funcion2_Callback(hObject, eventdata, handles)
fun2=get(hObject,'String');
handles.fun2=fun2;
guidata(hObject,handles);
function leer_funcion2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),....
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end



function leer_a_Callback(hObject, eventdata, handles)
a=str2double(get(hObject,'String'));
handles.a=a;
guidata(hObject,handles);
function leer_a_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function leer_b_Callback(hObject, eventdata, handles)
b=str2double(get(hObject,'String'));
handles.b=b;
guidata(hObject, handles);
function leer_b_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function iteraciones_Callback(hObject, eventdata, handles)
N=str2double(get(hObject,'String'));
handles.N=N;
guidata(hObject, handles);
function iteraciones_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function valor_inicial_Callback(hObject, eventdata, handles)
alpha=str2num(get(hObject,'String'));
handles.alpha=alpha;
guidata(hObject, handles);
function valor_inicial_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function Cad_Iter_Callback(hObject, eventdata, handles)
function Cad_Iter_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end



function Cad_t_Callback(hObject, eventdata, handles)
function Cad_t_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function cad_w_Callback(hObject, eventdata, handles)
function cad_w_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function cad_u_Callback(hObject, eventdata, handles)
function cad_u_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end



function calcular_Callback(hObject, eventdata, handles)
fun1=handles.fun1;
fun2=handles.fun2;
a=handles.a;
b=handles.b;
N=handles.N;
alpha=handles.alpha;
h=(b-a)/N; %the step size
t(1)=a;
w(1)=alpha(1); %initial conditions
u(1)=alpha(2);
f1=inline(fun1,'t','x','y');
f2=inline(fun2,'t','x','y');
CadIter='Iter.|===';
Cadt='t |===';
Cadw='w |===';
Cadu='u | ===';
for i=1:N
k1 = h*f1(t(i),w(i),u(i)); %AQUI ME APARECE EL PRIMER ERROR
c1 = h*f2(t(i),w(i),u(i)); %AQUI ME APARECE EL PRIMER ERROR

k2 = h*f1(t(i)+h/2, w(i)+0.5*k1,u(i)+0.5*c1);
c2 = h*f2(t(i)+h/2, w(i)+0.5*k1,u(i)+0.5*c1);

k3 = h*f1(t(i)+h/2, w(i)+0.5*k2,u(i)+0.5*c2);
c3 = h*f2(t(i)+h/2, w(i)+0.5*k2,u(i)+0.5*c2);

k4 = h*f1(t(i)+h, w(i)+k3,u(i)+c3);
c4 = h*f2(t(i)+h, w(i)+k3,u(i)+c3);
w(i+1)=w(i)+(k1 + 2*k2 + 2*k3 + k4)/6;
u(i+1)=u(i)+(c1 + 2*c2 + 2*c3 + c4)/6;
t(i+1)=a+i*h;

CadIter=strcat(CadIter,'|',num2str(i));
Cadt=strcat(Cadt,'|',num2str(t(i)));
Cadw=strcat(Cadw,'|',num2str(w(i)));
Cadu=strcat(Cadu,'|',num2str(u(i)));
end
axes(handles.axes1)
plot(t,w,t,u)
guidata(hObject,handles);
set(handles.Cad_Iter,'String',CadIter);
set(handles.Cad_t,'String',Cadt);
set(handles.cad_w,'String',Cadw);
set(handles.cad_u,'String',Cadu);
%========================================


saludos
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR 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

Solucion de sistemas de ecuaciones diferenciales con GUI (metodo Runge kutta)

Publicado por Alan Martinez S (4 intervenciones) el 06/11/2011 17:58:56
Cordial saludo

Gracias por el envío del código del programa de RungeKutta.
Al respecto tengo 2 dudas: (Disculpe la ignorancia)

1. Que objetos representa la lineas
function Cad_t_Callback(hObject, eventdata, handles)
function Cad_t_Callback(hObject, eventdata, handles)
function cad_w_Callback(hObject, eventdata, handles)
function cad_u_Callback(hObject, eventdata, handles)
y
set(handles.Cad_Iter,'String',CadIter);
set(handles.Cad_t,'String',Cadt);
set(handles.cad_w,'String',Cadw);
set(handles.cad_u,'String',Cadu);


2. Si deseo mostrar los resultados en el formulario en el cual se insertan los datos, utilizando un uitable, cuales son las lineas de código, para hacerlo partiendo del hecho de tener un vector t, con los tiempos, y una matriz w en la cual se encuentran almacenados los valores de las funciones

O acaso pudo utilizar la expresión [t' w'] con la cual se generó la gráfica par mostrar los valores obtenidos ?

Agradeciendo la atención prestada.

Alan Martinez S.
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

Solucion de sistemas de ecuaciones diferenciales con GUI (metodo Runge kutta)

Publicado por Angel (1 intervención) el 02/07/2014 18:26:28
saludos
JOSE JEREMIAS CABALLERO

queria saber si es posible usar el metodo de runge kutha para "n" edos (4+) ?
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