jueves, 19 de diciembre de 2024

Elementos de Matemáticas - NICOLAS BOURBAKI - Elements de Mathematique

Elementos de Matemáticas - NICOLAS BOURBAKI - Elements de Mathematique


https://blogs.mat.ucm.es/bombal/wp-content/uploads/sites/40/2018/11/HIS-BOURBAKI.pdf


NICOLAS BOURBAKI 

Introducci´on

Pocos nombres han tenido una mayor influencia en el desarrollo de la Matem´atica del siglo XX que el de Nicolas Bourbaki. No cabe duda de que su obra El´ements de Math´ematique que, junto a fervientes partidarios, tiene tambi´en ac´errimos detractores, ha influ´ıdo decisivamente en el desarrollo y la evoluci´on de la matem´atica contempor´anea. Lo curioso es que Nicolas Bourbaki no existe. En efecto, como es bien conocido, Nicolas Bourbaki es el seud´onimo colectivo de un grupo de matem´aticos, la mayor´ıa franceses, que naci´o en la d´ecada de los 30 y se ha ido renovando con el tiempo, responsable de la publicaci´on de un monumental y a´un inconcluso tratado que tiene como objetivo la exposici´on, de forma sistem´atica y rigurosa, de las herramientas b´asicas para el desarrollo de toda la Matem´atica. El t´ıtulo mismo de la obra muestra claramente el intento de emular el papel que tuvieron los Elementos de Euclides en la Geometr´ıa griega Como hemos dicho, el grupo fue fundado a mediados de los a˜nos 30 por algunos j´ovenes y brillantes matem´aticos (de edades comprendidas entre los 24 y 30 a˜nos), todos ellos antiguos alumnos de L’Ecole Normale Superieur de Paris y ´ pertenecientes a promociones cercanas. Aunque, como veremos, el objetivo original de los fundadores del grupo era muy modesto, no hay duda de que su actitud respond´ıa a un sentimiento de frustraci´on y protesta por la situaci´on de las Matem´aticas en Francia. En efecto, despu´es de la sangr´ıa que supuso la I Guerra Mundial, la Matem´atica francesa, otrora l´ıder de la Matem´atica universal, hab´ıa ido cayendo en el adocenamiento y el provincialismo. As´ı, Jean Dieudonn´e (uno de los fundadores) narra que en esa ´epoca no hab´ıa nadie en Francia que supiera algo de temas como la teor´ıa espectral de Hilbert-Riesz, o la representaci´on de grupos o la teor´ıa de Lie (con la excepci´on de Elie Cartan, que por entonces se encontraba totalmente aislado). La vida cient´ıfica francesa estaba dominada por dos o tres camarillas de acad´emicos, m´as preocupados por conservar sus parcelas de poder que por el desarrollo de la investigaci´on. Los j´ovenes fundadores del grupo Bourbaki quer´ıan acabar con esta situaci´on y recuperar el nivel y calidad de la investigaci´on matem´atica francesa.

El origen de Bourbaki

Seg´un cuenta Andr´e Weil en su autobiograf´ıa ([We]), al regreso de sus vacaciones de verano de 1934 coincidi´o en Estrasburgo con su colega y amigo Henri Cartan, ambos encargados conjuntamente del curso sobre C´alculo Diferencial e Integral. Tradicionalmente se usaba como texto en las Universidades francesas el libro de Goursat, que ninguno de los dos j´ovenes amigos encontraba especialmente satisfactorio, lo que motivaba continuas consultas mutuas sobre c´omo desarrollar tal o cual tema. A fines de 1934, Weil crey´o tener una idea luminosa: “Somos cinco o seis amigos, encargados del mismo curso en distintas Universidades.” -le dijo a Cartan- “Reun´amonos y arreglemos esto de una vez por todas.” En este momento, aunque ninguno de los dos lo sab´ıa, naci´o Bourbaki. Dicho y hecho. Cartan y Weil se pusieron en contacto con algunos de sus compa˜neros normalianos (Jean Dieudonn´e, Jean Delsarte y Claude Chevalley, entre otros) y se reunieron varias veces en un restaurante del bulevar Saint Michel de Paris. El objetivo era redactar un curso o tratado de an´alisis que reemplazara al de Goursat y sirviera de base para la ense˜nanza del an´alisis a nivel de Licenciatura. En las reuniones parisinas se fijaron los t´ıtulos de los Cap´ıtulos y se distribuy´o el trabajo entre los asistentes. Se encargaron informes sobre gran n´umero de temas, desde la teor´ıa de conjuntos a las funciones anal´ıticas y las ecuaciones en derivadas parciales. Pronto se hizo evidente que estas reuniones no eran suficiente para discutir los informes previos con la amplitud que conven´ıa, por lo que acordaron dedicar dos semanas de las vacaciones de verano para reunirse en un lugar apropiado. As´ı, en Julio de 1935, Bourbaki tuvo su primer Congreso en unos confortables locales que la Universidad de Clermont pose´ıa en Besse-en-Chandesse. Estos fueron, seg´un cita Chevalley en una entrevista ([Gu]), los asistentes: Henri Cartan, Claude Chevalley,

lunes, 16 de diciembre de 2024

Display 7 segmentos


Display 7-segmentos


https://angelmicelti.github.io/4ESO/EDI/cdigo_7segmentos.html



Display 7-segmentos

Display de 7 segmentos con indicación de la numeración

Mediante este código se pretende representar la representación de dígitos decimales (del 0 al 9) en un display de 7 segmentos. Para ello, se asimila que un 0 indica un segmento apagado y un 1 indicará un segmento encendido.

Entonces, para representar un número, digamos, por ejemplo, el 7, bastará con indicar el estado de las los sietes segmentos para que se muestre dicho número.

En este caso, tendrían que estar encendidos los segmentos ab y c, y el resto apagados. Esto lo representaríamos con la secuencia binaria "1110000".

Si repetimos un ejercicio de imaginación para el resto de dígitos, algo parecido a lo que vemos en la siguiente imagen:

Dígitos del 0 al 9 en display de 7 segmentos

podríamos componer una tabla como la siguiente, que contiene los dígitos, del 0 al 9.


DECIMALCÓDIGO 7-SEGMENTOSHEXADECIMAL
0111 11107E
1011 000030 
2110 11016D 
3111 100179
4011 001133 
5101 10115B 
6101 11115F
7111 000070
8111 11117F
9111 10117B 

Igualmente podríamos representar letras en un display de 7 segmentos utilizando este código. Aquí te dejo una imagen con el resultado:

Letras en código 7-segmentos

Desde este punto de vista, podemos entender que el 7-segmentos es también un código alfanumérico.

software para obtener funciones logicas a partir de una tabla de verdad Boole-sp Deusto Boole-Deusto

software para obtener funciones logicas a partir de una tabla de verdad Boole-sp Deusto


https://weblab.deusto.es/website/boole_deusto.html

martes, 3 de diciembre de 2024

Transformación de funciones: desplazamientos verticales y horizontales, reflexiones, función es par, impar o ninguna de las dos, compresión y estiramiento, Combinar transformaciones

Transformación de funciones

https://openstax.org/books/prec%C3%A1lculo-2ed/pages/1-5-transformacion-de-funciones

Objetivos de aprendizaje

En esta sección, podrá:

  • Graficar funciones utilizando desplazamientos verticales y horizontales.
  • Graficar funciones con reflexiones en torno al eje de la x y el eje de la y.
  • Determinar si una función es par, impar o ninguna de las dos, a partir de su gráfico.
  • Graficar funciones con compresión y estiramiento.
  • Combinar transformaciones.

Coordenadas polares - https://openstax.org/books/c%C3%A1lculo-volumen-2/pages/7-3-coordenadas-polares

Coordenadas polares 

https://openstax.org/books/c%C3%A1lculo-volumen-2/pages/7-3-coordenadas-polares

Secciones Cónicas - https://openstax.org/books/c%C3%A1lculo-volumen-2/pages/7-5-secciones-conicas

Secciones Cónicas 

https://openstax.org/books/c%C3%A1lculo-volumen-2/pages/7-5-secciones-conicas

lunes, 18 de noviembre de 2024

Pantalla TFT ILI9341 con Raspberry Pi Pico y ESP32 código en MicroPython


https://www.youtube.com/watch?v=vo3RY-H3mpU

CONVERTIR DE IMAGEN A TEXTO OCR EN LÍNEA

CONVERTIR DE IMAGEN A TEXTO OCR EN LÍNEA

EL ATmega328P | Grabar y Programar | 2021

 EL ATmega328P | Grabar y Programar | 2021

https://www.youtube.com/watch?v=UAqdFtcaNCs

PROGRAMAR EL ATMEGA328P ATMEL CON EL PROGRAMADOR USBASP AVR Y EL SOFWARE AVRDUDESS

 

Raspberry Pi Pico Sin cos Graphics



https://www.instructables.com/WaveShare-Pico-LCD-18-Display-Workout/

https://content.instructables.com/FHY/8Q9G/KQKX2HY6/FHY8Q9GKQKX2HY6.py

https://www.waveshare.com/wiki/Pico-LCD-1.8


Step 10: Part 5

# === Sin & Cos graphs ====
factor = 361 /159    
LCD.show()
cr = colour(255,0,0)
LCD.hline(1,60,159,0xFFFF)
LCD.text("Sine", 70, 20, cr)
for x in range(1,159):
    y = int ((math.sin(math.radians(x * factor)))* -50) + 60
    LCD.pixel(x,y,cr)
    LCD.show()
LCD.show()

cg = colour(0,255,0)
LCD.text("Cosine", 5, 90, cg)
for x in range(0,240):
    y = int((math.cos(math.radians(x * factor)))* -50) + 60
    LCD.pixel(x,y,cg)
LCD.show()
utime.sleep(3)
LCD.fill(0)
LCD.show()

Part 5
Part 5
Part 5

Graph plotting and text on a curve.




Código Completo

# WaveShare Pico LCD 1.8 inch Display

# TFT Display Workout

# Tony Goodhew - 1 July 2021

#======== START OF DRIVER AND SETUP ===========

# https://www.waveshare.com/wiki/Pico-LCD-1.8

from machine import Pin,SPI,PWM

import framebuf

import machine

import utime

import random

import math


BL = 13

DC = 8

RST = 12

MOSI = 11

SCK = 10

CS = 9


class LCD_1inch8(framebuf.FrameBuffer):

    def __init__(self):

        self.width = 161 # This number was not expected?

        self.height = 130

        

        self.cs = Pin(CS,Pin.OUT)

        self.rst = Pin(RST,Pin.OUT)

        

        self.cs(1)

        self.spi = SPI(1)

        self.spi = SPI(1,1000_000)

        self.spi = SPI(1,10000_000,polarity=0, phase=0,sck=Pin(SCK),mosi=Pin(MOSI),miso=None)

        self.dc = Pin(DC,Pin.OUT)

        self.dc(1)

        self.buffer = bytearray(self.height * self.width * 2)

        super().__init__(self.buffer, self.width, self.height, framebuf.RGB565)

        self.init_display()

        

    def write_cmd(self, cmd):

        self.cs(1)

        self.dc(0)

        self.cs(0)

        self.spi.write(bytearray([cmd]))

        self.cs(1)


    def write_data(self, buf):

        self.cs(1)

        self.dc(1)

        self.cs(0)

        self.spi.write(bytearray([buf]))

        self.cs(1)


    def init_display(self):

        """Initialize display"""  

        self.rst(1)

        self.rst(0)

        self.rst(1)

        

        self.write_cmd(0x36);

        self.write_data(0x70);

        

        self.write_cmd(0x3A);

        self.write_data(0x05);


         #ST7735R Frame Rate

        self.write_cmd(0xB1);

        self.write_data(0x01);

        self.write_data(0x2C);

        self.write_data(0x2D);


        self.write_cmd(0xB2);

        self.write_data(0x01);

        self.write_data(0x2C);

        self.write_data(0x2D);


        self.write_cmd(0xB3);

        self.write_data(0x01);

        self.write_data(0x2C);

        self.write_data(0x2D);

        self.write_data(0x01);

        self.write_data(0x2C);

        self.write_data(0x2D);


        self.write_cmd(0xB4); #Column inversion

        self.write_data(0x07);


        #ST7735R Power Sequence

        self.write_cmd(0xC0);

        self.write_data(0xA2);

        self.write_data(0x02);

        self.write_data(0x84);

        self.write_cmd(0xC1);

        self.write_data(0xC5);


        self.write_cmd(0xC2);

        self.write_data(0x0A);

        self.write_data(0x00);


        self.write_cmd(0xC3);

        self.write_data(0x8A);

        self.write_data(0x2A);

        self.write_cmd(0xC4);

        self.write_data(0x8A);

        self.write_data(0xEE);


        self.write_cmd(0xC5); #VCOM

        self.write_data(0x0E);


        #ST7735R Gamma Sequence

        self.write_cmd(0xe0);

        self.write_data(0x0f);

        self.write_data(0x1a);

        self.write_data(0x0f);

        self.write_data(0x18);

        self.write_data(0x2f);

        self.write_data(0x28);

        self.write_data(0x20);

        self.write_data(0x22);

        self.write_data(0x1f);

        self.write_data(0x1b);

        self.write_data(0x23);

        self.write_data(0x37);

        self.write_data(0x00);

        self.write_data(0x07);

        self.write_data(0x02);

        self.write_data(0x10);


        self.write_cmd(0xe1);

        self.write_data(0x0f);

        self.write_data(0x1b);

        self.write_data(0x0f);

        self.write_data(0x17);

        self.write_data(0x33);

        self.write_data(0x2c);

        self.write_data(0x29);

        self.write_data(0x2e);

        self.write_data(0x30);

        self.write_data(0x30);

        self.write_data(0x39);

        self.write_data(0x3f);

        self.write_data(0x00);

        self.write_data(0x07);

        self.write_data(0x03);

        self.write_data(0x10);


        self.write_cmd(0xF0); #Enable test command

        self.write_data(0x01);


        self.write_cmd(0xF6); #Disable ram power save mode

        self.write_data(0x00);


            #sleep out

        self.write_cmd(0x11);

        #DEV_Delay_ms(120);


        #Turn on the LCD display

        self.write_cmd(0x29);


    def show(self):

        self.write_cmd(0x2A)

        self.write_data(0x00)

        self.write_data(0x01)

        self.write_data(0x00)

        self.write_data(0xf1)        

        self.write_cmd(0x2B)

        self.write_data(0x00)

        self.write_data(0x01)

        self.write_data(0x00)

        self.write_data(0xf1)        

        self.write_cmd(0x2C)       

        self.cs(1)

        self.dc(1)

        self.cs(0)

        self.spi.write(self.buffer)

        self.cs(1)

  

pwm = PWM(Pin(BL))

pwm.freq(1000)


pwm.duty_u16(32768) # max 65535

LCD = LCD_1inch8()

# Background colour is BLACK

LCD.fill(0x0) # BLACK

LCD.show()

# ============= END OF SCREEN DRIVER & SETUP ==================



def colour(R,G,B):

# Get RED value

    rp = int(R*31/255) # range 0 to 31

    if rp < 0: rp = 0

    r = rp *8

# Get Green value - more complicated!

    gp = int(G*63/255) # range 0 - 63

    if gp < 0: gp = 0

    g = 0

    if gp & 1:  g = g + 8192

    if gp & 2:  g = g + 16384

    if gp & 4:  g = g + 32768

    if gp & 8:  g = g + 1

    if gp & 16: g = g + 2

    if gp & 32: g = g + 4

# Get BLUE value       

    bp =int(B*31/255) # range 0 - 31

    if bp < 0: bp = 0

    b = bp *256

    colour = r+g+b

    return colour

    

def ring(cx,cy,r,cc):   # Centre (x,y), radius

    for angle in range(0, 90, 2):  # 0 to 90 degrees in 2s

        y3=int(r*math.sin(math.radians(angle)))

        x3=int(r*math.cos(math.radians(angle)))

        LCD.pixel(cx-x3,cy+y3,cc)  # 4 quadrants

        LCD.pixel(cx-x3,cy-y3,cc)

        LCD.pixel(cx+x3,cy+y3,cc)

        LCD.pixel(cx+x3,cy-y3,cc)

#=============== MAIN ============


LCD.rect(1,1,159,128,colour(0,0,255)) # Blue Frame

LCD.text("WaveShare", 38,20,colour(255,0,0))

LCD.text('Pico Display 1.8"', 10,40,colour(255,255,0))

LCD.text("159x128 SPI", 30,60,colour(0,255,0))

LCD.text("WORKOUT", 50,80,colour(255,128,0))

LCD.text("Tony Goodhew", 30,110,colour(100,100,100))

LCD.show()

utime.sleep(6)

LCD.fill(0)

LCD.show()


LCD.rect(1,1,159,128,colour(0,0,255)) # Blue Frame

# White Corners

LCD.pixel(1,1,0xFFFF)     # LT

LCD.pixel(1,128,0xFFFF)   # LB

LCD.pixel(159,1,0xFFFF)   # RT

LCD.pixel(159,128,0xFFFF) # RB

LCD.text("200 Pixels", 40,20,0xFFFF)

LCD.rect(29,49,103,53,colour(0,255,0))

LCD.show()

for i in range (200):

    x = random.randint(30, 130)

    y = random.randint(50, 100)

    LCD.pixel(x,y,0xFFFF)

    LCD.show()

utime.sleep(1.5)

LCD.fill(0)

LCD.show()


# Lines

LCD.text("Lines",10,10,colour(200,200,200))

LCD.show()

c = colour(255,0,0)

b = colour(0,0,255)

LCD.vline(1,1,128,c)

LCD.hline(1,128,128,c)

LCD.vline(159,1,128,b)

LCD.hline(159-127,1,128,b)

for i in range(0,127,5):

    ii = i +1

    LCD.line(1,ii,ii,128,c)

    LCD.line(159,128-ii,159-ii,1,b)

    utime.sleep(0.03)

    LCD.show()


LCD.text("Circles",95,112,colour(200,200,200))

LCD.show()

ring(80,64,47,colour(70,70,70))

ring(80,64,41,colour(100,100,100))

ring(80,64,35,colour(150,150,150))

LCD.show()

ring(80,64,30,colour(255,255,0))

ring(80,64,25,colour(255,0,255))

ring(80,64,20,colour(0,255,255))

LCD.show()

utime.sleep(1)

for r in range(5):

    ring(80,64,10+r,colour(255,0,0))

LCD.show()

utime.sleep(1)

for r in range(5):

    ring(80,64,5+r,colour(0,255,0))

LCD.show()

utime.sleep(1)

for r in range(5):

    ring(80,64,r,colour(0,0,255))

LCD.show()

utime.sleep(2.5)

LCD.fill(0)

LCD.show()


# === Sin & Cos graphs ====

factor = 361 /159    

LCD.show()

cr = colour(255,0,0)

LCD.hline(1,60,159,0xFFFF)

LCD.text("Sine", 70, 20, cr)

for x in range(1,159):

    y = int ((math.sin(math.radians(x * factor)))* -50) + 60

    LCD.pixel(x,y,cr)

    LCD.show()

LCD.show()


cg = colour(0,255,0)

LCD.text("Cosine", 5, 90, cg)

for x in range(0,240):

    y = int((math.cos(math.radians(x * factor)))* -50) + 60

    LCD.pixel(x,y,cg)

LCD.show()

utime.sleep(3)

LCD.fill(0)

LCD.show()


# Text on a Sin wave

msg ='  WS Pico Display'

LCD.text("Text on a Sine Curve",1,115,0xFFFF)

factor = 361 /159

for i in range(len(msg)):

    y = int ((math.sin(math.radians(i*7 * factor)))* -40) + 40

    ch = msg[i]

    LCD.text(ch, i*8,y +10,colour(255,255,0))

    LCD.show()

utime.sleep(3)

LCD.fill(0)

LCD.show()


# Set up potentiometers

rpot=machine.ADC(28)

gpot=machine.ADC(27)

bpot=machine.ADC(26)

LCD.fill(0)

LCD.show()

LCD.text(" Turn the Pots",20,112,0xFFFF)

LCD.hline(0,127,159,0xFFFF) # Draw edge frame Bottom

LCD.line(0,1,159,1,0xFFFF)                  # Top  

LCD.vline(0,1,127,0xFFFF)                   # Left

LCD.line(159,0,159,127,0xFFFF)              # Right

while True:

# Get RED value

    rp = int(rpot.read_u16() / 2000) # range 0 to 31

    if rp < 0: rp = 0

    if rp > 31: rp = 31

    r = rp *8

# Get Green value - more complicated!

    gp = int(gpot.read_u16() / 1000) # range 0 - 63

    if gp < 0: gp = 0

    if gp > 63: gp = 63

    g = 0

    if gp & 1:  g = g + 8192

    if gp & 2:  g = g + 16384

    if gp & 4:  g = g + 32768

    if gp & 8:  g = g + 1

    if gp & 16: g = g + 2

    if gp & 32: g = g + 4

# Get BLUE value       

    bp =int(bpot.read_u16() / 2090) # range 0 - 31

    if bp < 0: bp = 0

    if bp > 31: gp = 31

    b = bp *256


    colour = r+g+b


    LCD.fill_rect(4,20,152,20,colour)

    LCD.fill_rect(50,5,80,10,0) # Black out old value

    LCD.text(str(hex(colour)),58,7,0xFFFF)

    

    LCD.fill_rect(10,55,140,10,0)

    LCD.text(str(rp),10,55,0xF8) # RED

    LCD.fill_rect(120,55,25,10,r)

    LCD.rect(120,55,25,10,0xAA52) # Grey2 frame

    if rp > 0: LCD.fill_rect(35,55,rp*2,10,0x76AD) # GREY

    

    LCD.fill_rect(10,75,140,10,0)

    LCD.text(str(gp),10,75,0xE007) # GREEN

    LCD.fill_rect(120,75,25,10,g)

    LCD.rect(120,75,25,10,0xAA52)

    if gp > 0: LCD.fill_rect(35,75,gp,10,0x76AD)

    

    LCD.fill_rect(10,95,140,10,0)

    LCD.text(str(bp),10,95,0x1F00) # BLUE   

    LCD.fill_rect(120,95,25,10,b)

    LCD.rect(120,95,25,10,0xAA52)

    if bp > 0: LCD.fill_rect(35,95,bp*2,10,0x76AD)

    

    LCD.show()