lunes, 7 de julio de 2008

Fractal 0.5

He abandonado la versión 0.4 y he pasado directamente a la 0.5. La nueva versión es la 0.3, pero con un límite a la resolución para que no de problemas de falta de memoria. Además he mejorado la presentación como puede verse. En versiones siguientes me gustaría introducir parámetros en la función y que puedan variarse de forma sencilla, sin tener que escribir la formula cada vez.
Además estoy intentado que en el gráfico del fractal aparezca escrita la función y el número de iteraciones (datos que ahora hay que introducir por teclado).
Todavía no he añadido la opción de guardar los datos, porque no sé como variar el nombre. Necesito aprender un par de cosas sobre como introducir texto por teclado y luego trabajar con él.
Si alguien quiere el código, no tiene más que avisarme. Voy a añadir unas notas para que resulte sencillo ver los pasos que he programado.

sábado, 5 de julio de 2008

Fractal 0.3

He resuelto algunos problemas de la versión 0.2, como por ejemplo que el eje i estaba invertido. El siguiente paso es añadir la posibilidad de guardar los resultados para no tener que volver a calcularlo todo cada vez.
Hay un límite a la resolución máxima impuesto por el tamaño de matriz y el número máximo de variables que puede almacenar matlab. Una posible solución podría consistir en guardar en disco los resultados intermedios en vez de tenerlos almacenados en matlab durante el cálculo. Sin embargo, a la hora de representarlo, hay que ponerlo todo en una sola matriz, por lo que no serviría para evitar el límite máximo de resolución. Estoy buscando una forma de poder representarlo por partes.
También estoy tratando de poner un texto que avise cuando el programa está ejecutándose y cuando ha terminado de calcular.



jueves, 3 de julio de 2008

Fractal 0.2




La versión 0.2 ya está lista. Como puede verse en la imagen, he probado con el conjunto se Julia con c=-0,745429+0,11308i. El nuevo programa funciona de la siguiente manera. Toma una función de C en C y aplica el plano complejo en sí mismo n veces. Después de realizar las n iteraciones, asigna un color a cada punto del plano según su alejamiento de la posición inicial.



Aquí puede verse la misma función, con c=-0.7.


Y aquí la función z+z.^cos(z).

miércoles, 2 de julio de 2008

Fractal 0.1

Primeros resultados de una propuesta de programa para crear fractales a partir de transformaciones del plano complejo.


Es solo una primera versión, (ni siquiera se la puede llamar beta). Aquí puede verse una misma transformación con distinto grado de detalle:

jueves, 15 de mayo de 2008

Rompecabezas
















En la última reunión del grupo se planteó la idea de hacer un rompecabezas con fotos. Aquí está mi primera versión.
La foto se divide en cuadrados, y el usuario tiene que desordenarlos con el ratón para luego volver a ordenarlos. Las reglas son las clásicas, solo se puede mover una ficha a la posición del agujero cuando esta es adyacente al agujero.
Funciona completamente, pero de momento solamente trabaja con fotos cuya resolución sea igual a la foto que utilicé para diseñarlo (por cierto que la elección de la foto no fue muy afortunada).

sábado, 10 de mayo de 2008


Dada una función


y un conjunto de valores de x {xi} i=1,2,....,n se pide hallar el valor del parámetro k para el cual los correspondientes yi se aproximan más a números enteros.


El programa de la imagen calcula el error que se comete al aproximar los yi por enteros en función del k elegido. Para cada k, se toma como medida del error la mayor de las diferencias en valor absoluto, entre yi y el entero más próximo.

Está programado para que se pueda introducir la función f(x,k), los valores xi así como el intervalo en el que se debe buscar k.

Podeis ver el código en esta dirección:
o mandadme un email y os lo paso.

jueves, 8 de mayo de 2008

martes, 6 de mayo de 2008


El siguiente programa os permite representar los cilindros generados por dos funciones paramétricas, en distintas subventanas. Cada uno de los cilindros será representado con un tipo de superficie diferente. Disfrutarlo



Programa:

--------------------------------------------------------------------


%Este programa genera los cilindros definidos por las funciones 2+cos(t) y 2+sen(t) con

%tres sombreados distintos


t=0:pi/10:2*pi; %Intervalo de representación

subplot(2,3,1); %Primera subventana: por orden (nº filas, nº columnas,nºcuadro)

cylinder(2+cos(t));

title('Cilindro según función (2+cos(x))')

xlabel('Eje x')

ylabel('Eje y')

zlabel('Eje z')

axis square

shading faceted %Cada una de las facetas del dibujo sale bordeada en negro(como si lo cubriera una malla)


t=0:pi/10:2*pi;

subplot(2,3,2);

cylinder(2+cos(t));

title('Cilindro según función (2+cos(x))')

xlabel('Eje x')

ylabel('Eje y')

zlabel('Eje z')

axis square

shading flat %En la superficie se marcan líneas ligeras


t=0:pi/10:2*pi;

subplot(2,3,3);

cylinder(2+cos(t));

title('Cilindro según función (2+cos(x))')

xlabel('Eje x')

ylabel('Eje y')

zlabel('Eje z')

axis square

shading interp %Es una superficie smooth ^^


subplot(2,3,4);

cylinder(2+sin(t));

title('Cilindro según función (2+seno(x))')

xlabel('Eje x')

ylabel('Eje y')

zlabel('Eje z')

axis square

shading faceted


subplot(2,3,5);

cylinder(2+sin(t));

title('Cilindro según función (2+seno(x))')

xlabel('Eje x')

ylabel('Eje y')

zlabel('Eje z')

axis square

shading flat


subplot(2,3,6);

cylinder(2+sin(t));

title('Cilindro según función (2+seno(x))')

xlabel('Eje x')

ylabel('Eje y')

zlabel('Eje z')

axis square

shading interp


El siguiente programa es un tipo function, que toma un vector fila b con números enteros y devuelve una matriz c donde la primera fila son los distintos elementos de b y la segunda fila son las veces que se repiten.

Ejemplo:

>> b=[0 0 0 1 0 2 2 9 9 9 9 1 1]
>> [c]=recontar(b)
c =
0 1 2 9
4 3 2 4

>>

Programa:
------------------------------------------------

function c=recontar(b)

%Este programa toma una matriz fila de números enteros b y devuelve una
%matriz c donde la primera fila son los elementos distintos de b ordenados
%de menor a mayor y la segunda fila son las veces que se repiten dichos
%elementos en b.


m=1;
reco=0;
b=sort(b);

%El siguiente bucle for analiza uno por uno los elementos de b, y lo anota en una matriz a junto con el número de veces que se repite.

for j=1:length(b)
for k=1:length(b)
if b(j)==b(k);
a(1,m)=b(j);
reco=reco+1;
end
end
a(2,m)=reco;
m=m+1;
reco=0;
end

...ahora tenemos una matriz a, pero aparecen datos repetidos, el siguiente bucle while va examinando la matriz a y copia a la matriz c cada dato una sola vez

j=1;
m=1;

while j$<$length(a(1,:))
if j+1==length(a(1,:))
c(1,m)=a(1,j);
c(2,m)=a(2,j);
m=m+1;

elseif a(1,j)~=a(1,j+1)
c(1,m)=a(1,j);
c(2,m)=a(2,j);
m=m+1;
end
j=j+1;
end



for t=1:inf
disp('Matlabers');
end