domingo, 11 de mayo de 2008

El programa se compone de 4 M-file y se ejecuta escribiendo prog desde la ventana de comandos de matlab.


-------------------------------------------------------------------------------------------
Nombre: prog
código:


clear all;
f='x+k';
pantallita=figure;
set(pantallita,'position',[40 40 860 820])

...muestra en pantalla el funcionamiento del programa
uicontrol(gcf,'Style','text','Units','cent','Position',[5 0 12 0.8],'string','Dados ciertos valores de xi i=1,...,n, este programa calcula el error que hay entre los yi=f(xi,k) y un número natural para los distintos valores del parámetro k');

... para introducir el valor máximo y mínimo de k
gege2=uicontrol(gcf,'Style','edit','Units','cent','Position',[0.2 3.6 1.6 0.6],'string','k máximo');
gege3=uicontrol(gcf,'Style','edit','Units','cent','Position',[0.2 2.6 1.6 0.6],'string','k mínimo');


... para introducir f(x,k)
gege11=uicontrol(gcf,'Style','text','Units','cent','Position',[0.2 6.2 1.6 0.6],'string','f(x,k)');
gege1=uicontrol(gcf,'Style','edit','Units','cent','Position',[0.2 5.6 1.6 0.6],'string',f);


...para introducir los valores de x
clear x;
equis1=uicontrol(gcf,'Style','text','Units','cent','Position',[0 8 2.6 0.6],'string','Valores de x');
equis=uicontrol(gcf,'Style','edit','Units','cent','Position',[0 7.4 1.6 0.6]);
n=1;
gege=uicontrol(gcf,'Style','pushbutton','Position',[60 280 40 25],'backgroundcolor',[0.7 0.5 0.8],'string','Añadir','callback','equiss;n=n+1;');
...---
gege=uicontrol(gcf,'Style','pushbutton','Position',[0 0 50 70],'backgroundcolor',[0.8 0.2 0.4],'string','Calcular','callback','exame');



-------------------------------------------------------------------------------------------
Nombre: equiss
código:



...Se van añadiendo los nuevos valores al vector x, y hacemos que aparezcan por pantalla en una columna.
x(n)=sscanf(get(equis,'string'),'%e');
uicontrol(gcf,'Style','text','Units','cent','Position',[0 20.8 2.6 0.6],'string','Valores de x');
uicontrol(gcf,'Style','text','Units','cent','Position',[0 11 1.6 9.8],'string',x);

-------------------------------------------------------------------------------------------Nombre: aplica
código:


function [k,err]=aplica(f,x,k)
... Esta función toma una función y=f(x,k) y halla los valores de y para un k fijo y distintos x.
% A continuación, compara los valores de y con los enteros más cercanos, y devuelve la mayor de las diferencias.

f=inline(f,'x','k');
a=k(length(k));

for b=1:length(x)
yy(b)=f(x(b),a);
end

y=round(yy);
err=max((abs(y-yy)));

-------------------------------------------------------------------------------------------Nombre:exame
código:



v(2)=sscanf(get(gege2,'string'),'%e');v(1)=sscanf(get(gege3,'String'),'%e');
f=sscanf(get(gege1,'string'),'%s');
h=(max(v)-min(v))/500;
%h es el paso entre un punto y el siguiente, se toma siempre de tal forma
%que el número total de pasos sea 500

clear k;
clear error;

for b=1:500
k(b)=v(1)+b*h;
[k,err]=aplica(f,x,k);
error(b)=err;
end

plot(k,error);xlabel('Valores de K');ylabel('Error')

No hay comentarios: