miércoles, 2 de diciembre de 2020

Aplicativos con Conexión a Bases de Datos

 

Aplicativos con Conexión a Bases de Datos

A la hora de conectar un sistema gestor de base de datos (SGBD) a una aplicación en C#,
es importante tener en cuenta que para que esta conexión se dé, debemos de tener los programas
adecuados, pues aunque parezca una obviedad, para mi no lo fue; tuve múltiples problemas a la
hora de realizar la conexión, esto ocurre porque si los programas no están, el Visual Studio (VS),
no reconoce el código que escribimos, y es que no todos los SGBD son de Microsoft, por lo tanto
debemos de tener todos los programas adecuados (conectores) para no ir a tener problemas con las
conexiones.

Para la conexión a SGBD, se ha creado el ADO .NET:
Componente de la plataforma .NET que permite acceder a datos desde un programa. Es un conjunto
de clases, interfaces, estructuras y enumeraciones que permiten trabajar de manera conectada o
desconectada con los datos.
ADO.NET es un conjunto de clases pertenecientes al espacio de nombres System.Data: System.Data
System.Data.Common  
System.Data.OleDB  
System.Data.SqlClient

Proveedores de acceso a datos:
Conjunto de clases que implementan una serie de interfaces comunes  ADO.NET
- OLE DB  Acceso vía protocolo OLE DB a cualquier fuente de datos que lo soporte
System.Data.OleDb.
- ODBC  Acceso vía protocolo ODBC a cualquier fuente de datos que lo soporte  
System.Data.Odbc.
- SQL Server  Acceso nativo a MS SQL Server 7.0 ó superior y MS Access  
System.Data.SqlClient.
- Oracle  Acceso nativo a Oracle Server  System.Data.OracleClient
Otros provistos por terceros  MySQL, PostgreeSQL, DB2, etc.

Componentes de ADO.NET , estas son las clases que se usan para la conexión a SGBD, trabaja
sobre el espacio de nombres System.Data.
Connection (conexión) Conecta a la base de datos.
Command (órdenes) Adapta los datos para poderlos visualizar.
DataReader (lector de datos) Permite ejecutar comandos sobre las BD SQL Server.
DataAdapter (adaptador de datos)
Data Set. Maneja un repositorio donde contenemos la información de forma local.

El lenguaje de programación ha ido evolucionando y cada vez más está diseñado para que su
entendimiento sea fácil; es por ello que se han recomendado estándares de escritura de código,
para que su mantenimiento, complementación y entendimiento sean universales, de tal manera que
así en el proyecto hayan participado múltiples personas de cualquier lugar del mundo, pareciere que
fue escrito por una sola persona.
En los siguientes enlaces podemos encontrar recomendaciones para buenas practicas de escritura
de código:




PARADIGMA DE LA PROGRAMACIÓN A OBJETOS

 PARADIGMA DE LA PROGRAMACIÓN A OBJETOS


El paradigma de la programación Orientada a Objetos es la posibilidad que un usuario tiene de interactuar con un equipo. Cuando se habla de "Orientada a Objetos" se pretende que el usuario interactue con una máquina tal como lo hace en la vida real. Una persona que, por ejemplo, va al mercado, hace por escrito una lista de las cosas que necesita, es decir, una lista de objetos. En el caso de que lo hiciera desde un equipo (computador, smartphone, otros), no lo podría hacer, salvo que tuviera la capacidad de leer esa lista en un complejo código previamente elaborado o si el equipo cuenta con un software desarrollado con base a esa necesidad y que interactue con el usuario de la misma forma (tal como existen hoy aplicaciones para tal fin).

Ciertamente la parte dificil le toca al programador, aunque los actuales estándares y modelos de codificación son más amigables que lo que hace mucho tiempo fueron. Ciertamente el programador ha de conocer una serie de conceptos que le son útiles para poder desarrollar su programa y elaborar un software que se adecue a la necesidad que pretende solucionar. 

""El paradigma orientado a objetos (OO) define los programas en términos de comunidades de objetos. Los objetos con características comunes se agrupan en clases (un concepto similar al de tipo abstracto de dato (TAD)). Los objetos son entidades que combinan un estado (es decir, datos) y un comportamiento (esto es, procedimientos o métodos). Estos objetos se comunican entre ellos para realizar tareas. Es en este modo de ver un programa donde este paradigma difiere del paradigma imperativo o estructurado, en los que los datos y los métodos están separados y sin relación. El paradigma OO surge para solventar los problemas que planteaban otros paradigmas, como el imperativo, con el objeto de elaborar programas y módulos más fáciles de escribir, mantener y reutilizar" Tomado de la Plataforma Educativa U de A



TIA 2: Implementación y manipulación de bases de datos.

Es muy importante saber el uso del lenguaje SQL, pues es con el que todos los Sistemas Gestores de Bases de Datos funcionan. Y es que la creación y manipulacionde las bases de datos se hacen desde el lenguaje SQL.


Diseño de la base de datos.

CLIENTES (Cod_Clientes, Nombre, Apellidos, Carta Laboral, Cod_Propiedades1, Cod_Contrato1)
SEDES (Cod_Sedes, Nombre, Dirección, Cod_Admin, Cod_Propiedades 1, Cod_Clientes1)
ADMINISTRADOR (Cod_Admin, Nombre, Apellido)
PROPIEDADES (Cod_Propiedades, num_habitaciones, Tipo: casa/apartamento Area, Dirección, Cod_Dueños)
FIADORES (Cod_Fiadores, Nombre, Apellidos, Cod_Prop_R1)
DUEÑOS (Cod_Dueños, Nombre, Apellidos)
CONTRATOS (Cod_Contrato, Fecha_Inicio, Fecha caducidad, Valor, Cod_Fiadores1)
PROPIEDAD DE RESPALDO (Cod_Pro_Res, Dirección)

SCRIPT DE LA BASE DE DATOS
USE [master]
GO
/****** Object:  Database [Arrendamientos_Muriel]    Script Date: 08/11/2018 03:18:23 p.m. ******/
CREATE DATABASE [Arrendamientos_Muriel]
 CONTAINMENT = NONE
 ON  PRIMARY
( NAME = N'Arrendamientos_Muriel', FILENAME = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\Arrendamientos_Muriel.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON
( NAME = N'Arrendamientos_Muriel_log', FILENAME = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\Arrendamientos_Muriel_log.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [Arrendamientos_Muriel] SET COMPATIBILITY_LEVEL = 120
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [Arrendamientos_Muriel].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [Arrendamientos_Muriel] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET ANSI_NULLS OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET ANSI_PADDING OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET ARITHABORT OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [Arrendamientos_Muriel] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET CURSOR_DEFAULT  GLOBAL
GO
ALTER DATABASE [Arrendamientos_Muriel] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET  DISABLE_BROKER
GO
ALTER DATABASE [Arrendamientos_Muriel] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [Arrendamientos_Muriel] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET RECOVERY SIMPLE
GO
ALTER DATABASE [Arrendamientos_Muriel] SET  MULTI_USER
GO
ALTER DATABASE [Arrendamientos_Muriel] SET PAGE_VERIFY CHECKSUM 
GO
ALTER DATABASE [Arrendamientos_Muriel] SET DB_CHAINING OFF
GO
ALTER DATABASE [Arrendamientos_Muriel] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )
GO
ALTER DATABASE [Arrendamientos_Muriel] SET TARGET_RECOVERY_TIME = 0 SECONDS
GO
ALTER DATABASE [Arrendamientos_Muriel] SET DELAYED_DURABILITY = DISABLED
GO
USE [Arrendamientos_Muriel]
GO
/****** Object:  Table [dbo].[Administradores]    Script Date: 08/11/2018 03:18:24 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Administradores](
            [Cod_Admin] [smallint] NOT NULL,
            [Nombre] [varchar](50) NOT NULL,
            [Apellido] [varchar](50) NOT NULL,
 CONSTRAINT [PK_Administradores] PRIMARY KEY CLUSTERED
(
            [Cod_Admin] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Clientes]    Script Date: 08/11/2018 03:18:24 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GOSET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Clientes](
            [Cod_Clientes] [smallint] NOT NULL,
            [Nombre] [varchar](50) NOT NULL,
            [Apellidos] [varchar](50) NOT NULL,
            [Carta_laboral] [varchar](50) NOT NULL,
            [Cod_Propiedades1] [smallint] NOT NULL,
            [Cod_Contrato1] [smallint] NOT NULL,
 CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED
(
            [Cod_Clientes] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Contratos]    Script Date: 08/11/2018 03:18:24 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Contratos](
            [Cod_Contrato] [smallint] NOT NULL,
            [Fecha_Caducidad] [smalldatetime] NOT NULL,
            [Valor] [money] NOT NULL,
            [Cod_Fiadores1] [smallint] NOT NULL,
 CONSTRAINT [PK_Contratos] PRIMARY KEY CLUSTERED
(
            [Cod_Contrato] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[Dueño]    Script Date: 08/11/2018 03:18:24 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Dueño](
            [Cod_Dueños] [smallint] NOT NULL,
            [Nombre] [varchar](50) NOT NULL,
            [Apellido] [varchar](50) NOT NULL,
 CONSTRAINT [PK_Dueño] PRIMARY KEY CLUSTERED
(
            [Cod_Dueños] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Fiadores]    Script Date: 08/11/2018 03:18:24 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Fiadores](
            [Cod_Fiadores] [smallint] NOT NULL,
            [Nombre] [varchar](50) NOT NULL,
            [Apellidos] [varchar](50) NOT NULL,
            [Cod_Prop_Res1] [smallint] NOT NULL,
 CONSTRAINT [PK_Fiadores] PRIMARY KEY CLUSTERED
(
            [Cod_Fiadores] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Propiedades]    Script Date: 08/11/2018 03:18:24 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Propiedades](
            [Cod_Propiedades] [smallint] NOT NULL,
            [Direccion] [varchar](50) NOT NULL,
            [Cod_Dueños1] [smallint] NOT NULL,
            [Casa] [bit] NOT NULL,
            [Area_M2] [smallint] NOT NULL,
            [Num_Habitaciones] [smallint] NOT NULL,
 CONSTRAINT [PK_Propiedades] PRIMARY KEY CLUSTERED
(
            [Cod_Propiedades] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Propiedades de Respaldo]    Script Date: 08/11/2018 03:18:24 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Propiedades de Respaldo](
            [Cod_Pro_Res] [smallint] NOT NULL,
            [Direccion] [varchar](50) NOT NULL,
 CONSTRAINT [PK_Propiedades de Respaldo] PRIMARY KEY CLUSTERED
(
            [Cod_Pro_Res] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Sedes]    Script Date: 08/11/2018 03:18:24 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Sedes](
            [Cod_Sedes] [smallint] NOT NULL,
            [Nombre] [varchar](50) NOT NULL,
            [Direccion] [varchar](50) NOT NULL,
            [Cod_Admin1] [smallint] NOT NULL,
            [Cod_Propiedades1] [smallint] NOT NULL,
            [Cod_Clientes1] [smallint] NOT NULL,
 CONSTRAINT [PK_Sedes] PRIMARY KEY CLUSTERED
(
            [Cod_Sedes] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Clientes]  WITH CHECK ADD  CONSTRAINT [FK_Clientes_Contratos] FOREIGN KEY([Cod_Contrato1])
REFERENCES [dbo].[Contratos] ([Cod_Contrato])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Clientes] CHECK CONSTRAINT [FK_Clientes_Contratos]
GO
ALTER TABLE [dbo].[Clientes]  WITH CHECK ADD  CONSTRAINT [FK_Clientes_Propiedades] FOREIGN KEY([Cod_Propiedades1])
REFERENCES [dbo].[Propiedades] ([Cod_Propiedades])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Clientes] CHECK CONSTRAINT [FK_Clientes_Propiedades]
GO
ALTER TABLE [dbo].[Contratos]  WITH CHECK ADD  CONSTRAINT [FK_Contratos_Fiadores] FOREIGN KEY([Cod_Fiadores1])
REFERENCES [dbo].[Fiadores] ([Cod_Fiadores])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Contratos] CHECK CONSTRAINT [FK_Contratos_Fiadores]
GO
ALTER TABLE [dbo].[Fiadores]  WITH CHECK ADD  CONSTRAINT [FK_Fiadores_Propiedades de Respaldo] FOREIGN KEY([Cod_Prop_Res1])
REFERENCES [dbo].[Propiedades de Respaldo] ([Cod_Pro_Res])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Fiadores] CHECK CONSTRAINT [FK_Fiadores_Propiedades de Respaldo]
GO
ALTER TABLE [dbo].[Propiedades]  WITH CHECK ADD  CONSTRAINT [FK_Propiedades_Dueño] FOREIGN KEY([Cod_Dueños1])
REFERENCES [dbo].[Dueño] ([Cod_Dueños])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Propiedades] CHECK CONSTRAINT [FK_Propiedades_Dueño]
GO
USE [master]
GO
ALTER DATABASE [Arrendamientos_Muriel] SET  READ_WRITE

GO




domingo, 29 de noviembre de 2020

Transformación Lineal

Transformación Lineal
1.¿Qué es una transformación lineal?

Las transformaciones lineales intervienen en muchas situaciones en Matemáticas y son algunas de las funciones más importantes. En Geometría modelan las simetrías de un objeto, en Álgebra se pueden usar para representar ecuaciones, en Análisis sirven para aproximar localmente funciones, por ejemplo. • Sean espacios vectoriales sobre un mismo cuerpo Una función transforma vectores de en vectores de Impondremos condiciones para que preserve las operaciones de suma de vectores y multiplicación por escalar, esto es, que sea equivalente sumar y multiplicar por escalar las preimágenes en cómo las imágenes en V ,W K T V W.

Una transformación lineal es una función. Por ser función, tiene su dominio y su dominio, con la particularidad de que éstos son espacios vectoriales. Tenemos dos espacios vectoriales VV y WW, y una función que va de VV a WW. O sea una regla de asignación que transforma vectores de VV en vectores de WW. Pero no toda función que transforme vectores de VV en vectores de WW es una transformación lineal. Debe cumplir ciertas condiciones:

2. Cuáles son las condiciones para que exista una transformación lineal.

Una transformación lineal debe cumplir las siguiente condiciones:

Teorema Sea T : V → W una transformación lineal.

Entonces :

a) T(0V ) = 0W . Es decir, el neutro se envía al neutro.

b) T(−v) = − T(v). Es decir, envía inversos aditivos en inversos aditivos.

c) T(u − v) = T(u) − T(v). Es decir, envía restas en restas.

3. Al menos cinco propiedades o teoremas de las transformaciones lineales

Teorema 1

Sean T : V −→ W una transformación lineal, v1, v2, . . . , vn vectores de V y λ1, λ2, . . . , λn escalares de R.

Entonces:

T(λ1v1 + λ2v2 + . . . + λnvn) = λ1T(v1) + λ2T(v2) + . . . + λnT(vn). De este resultado, se tiene trivialmente que una transformación lineal asigna el vector cero del dominio en el vector cero del codominio y, por su importancia, lo enunciamos en el siguiente corolario.

Corolario 1.1 Sea T : V −→ W una transformación lineal, entonces T(0) = 0.

El Teorema 1 también establece que, para el caso de las transformaciones lineales de Rn a Rm, las rectas son enviadas en rectas o en el vector 0 y los planos son enviados en planos, en rectas o en el vector 0. En general, el Teorema 1 permite demostrar que una transformación lineal asigna a un subespacio del dominio un subespacio del codominio (Ver ejercicios). Recordemos que dos funciones definidas sobre un mismo dominio y codominio son iguales, si y sólo si, tienen las mismas imágenes para todos y cada uno de los elementos del dominio. Aunque una transformación lineal es una función, sus características especiales simplifican enormemente la propiedad de igualdad entre transformaciones, como lo expresamos en el siguiente teorema.

Teorema 2

Sean B = {v1, v2, . . . , vn} una base del espacio vectorial V y T : V −→ W y S : V −→ W dos transformaciones lineales. T = S, si y sólo si, S(v1) = T(v1), S(v2) = T(v2), . . . , S(vn) = T(vn). Demostración: Por la igualdad entre funciones, es claro que si T = S, las imágenes de los elementos de la base bajo las dos transformaciones son iguales. Para demostrar la otra implicación, recordemos que como B es una base de V , para cada vector v de V , existen escalares λ1, λ2, . . . , λn tales que v = λ1v1+λ2v2+. . .+λnvn. CAPÍTULO 5. TRANSFORMACIONES LINEALES 132 Por el Teorema 1 y la igualdad de las imágenes de los elementos de la base bajo las dos transformaciones, tenemos T(v) = λ1T(v1) + λ2T(v2) + . . . + λnT(vn) = λ1S(v1) + λ2S(v2) + . . . + λnS(vn) = S(v) ¤

Por los teoremas anteriores, es fácil ver que si conocemos la imagen de cada uno de los elementos de una base del dominio de una transformación, podemos conocer la imagen de cualquier otro vector del dominio. En otras palabras, que una transformación lineal queda completamente determinada por las imágenes de cada uno de los elementos de una base del dominio, como lo enunciamos en el siguiente teorema.

Teorema 3

Si B = {v1, v2, . . . , vn} es una base del espacio vectorial V , existe una única transformación T : V −→ W, tal que w1 = T(v1), w2 = T(v2), . . . , wn = T(vn) con w1, w2, . . . , wn ∈ W. Demostración: Tenemos que B es una base de V , así que B es un conjunto generador de V y por tanto, para cualquier vector v de V existen escalares λ1, λ2, . . . , λn tales que v = λ1v1 + λ2v2 + . . . + λnvn. Así, que si sabemos que w1 = T(v1), w2 = T(v2), . . . , wn = T(vn), podemos encontrar la imagen de cualquier vector v de V . En efecto, por el Teorema 1, T(v) = λ1w1 + λ2w2 + . . . + λnwn.

Nos queda por demostrar la unicidad de esta transformación. Supongamos que existen dos transformaciones lineales T1 y T2 tales que T1(vi) = wi = T2(vi) para i = 1, 2, . . . , n. Por el Teorema 2, T1 y T2 son la misma transformación.

Teorema 4

Sean V y W espacios vectoriales y T : V −→ W una transformación lineal. Entonces 1. Nu(T) es subespacio vectorial de V . 2. Im(T) es subespacio vectorial de W. Demostración: Por el Teorema 1 del Capítulo 4, un subconjunto H no vacío de un espacio vectorial es un subespacio vectorial, si y sólo si, los elementos de H satisfacen las propiedades clausurativas para la suma y el producto por escalar (Axiomas 1 y 6 de la definición de espacio vectorial). 1. Por el Corolario 1.1, 0 es un elemento de Nu(T), asi que Nu(T) es no vacío. De otro lado, si tomamos dos vectores u y v de Nu(T) y un escalar λ, tenemos que T(u) = 0 y T(v) = 0, de modo que T(u + v) = T(u) + T(v) = 0 + 0 = 0 T(λu) = λT(u) = λ0 = 0, de donde concluimos que u + v y λu están en Nu(T). 2.

De nuevo por el Corolario 1.1, 0 es un elemento de Im(T), asi que Im(T) es no vacío y si tomamos dos vectores w1 y w2 de Im(T) y un escalar λ, tenemos que existen v1 y v2, vectores de V tales que T(v1) = w1 y T(v2) = w2, de modo que w1 + w2 = T(v1) + T(v2) = T(v1 + v2) λw1 = λT(v1) = T(λv1) de donde concluimos que w1 + w2 y λw1 están en Im(T).

Teorema 5

Dadas la transformación lineal T : V −→ W, con V y W espacios vectoriales de dimensión finita y las bases B = {v1, v2, . . . , vn} y B ′ de V y W, respectivamente, la matriz asociada a la transformación T respecto de estas bases, [AT ], es la única matriz tal que, para todo v ∈ V [T(v)]B′ = AT [v]B. Demostración: Si v = λ1v1+λ2v2+. . .+λnvn, por el Teorema 1, T(v) = λ1T(v1)+λ2T(v2)+. . .+λnT(vn).

De donde, por el Teorema 14 del Capítulo 4, la combinación se conserva para los vectores de coordenadas respectivos respecto a una misma base; es decir, [T(v)]B′ = λ1[T(v1)]B′ + λ2[T(v2)]B′ + . . . + λn[T(vn)]B′ . Así que, por definición de Ax, tenemos que [T(v)]B′ = AT [v]B.

4. Un ejemplo de una transformación lineal.

Hay que demostrar que es una aplicación y es lineal.

Y para ser lineal debe cumplir dos condiciones:

1) T(p+q) = T(p)+T(q) para todo p,q € P2

2) T(Kp) = k·T(p) para todo p € P2 y todo k€R

Demostración:

Sea p=ax^2+bx+c

q=a'x^2+b'x+c'

T(p+q) = T(ax^2+bx+c + a'x^2 +b'x +c') =

T((a+a')x^2+(b+b')x +(c+c') =

( a+a'-b-b' b+b' )

(c+c'+a+a' 2a+2a')·

T(p)+T(q) =T(ax^2+bx+c) + T(a'x^2+b'x+c') =

( a-b b ) (a'-b' b') (a+a'-b-b' b+b')

(c+a 2a ) + (c'+a' 2a') = (c+c'+a+a' 2a+2a')

Como vemos los dos resultados son iguales, luego

T(p+q)=T(p)+T(q)

Y la segunda condición será

T(kp) = T(kax^2+kbx+kc) =

(ka-kb kb)

(kc+ka 2ka)

k·T(p) =

(a-b b) (ka-kb kb)

k (c+a 2a) = (kc+ka 2ka)

Los resultados son iguales, luego:

T(kp) = k·T(p)

Y siendo una aplicación y cumpliendo esas dos condiciones se cumple que T es una transformación

lineal.
5. Cómo probar esa transformación lineal.

Hay que demostrar que es una aplicación y es lineal.

Para ser lineal debe cumplir dos condiciones:

1) T(p+q) = T(p)+T(q) para todo p,1)q € P2

2) T(Kp) = k·T(p) para todo p € P2 y todo k€R

En cada condición los dos resultados deben ser iguales como lo podemos comprobar en el ejemplo anterior.

Y siendo una aplicación y cumpliendo esas dos condiciones se cumple que T es una transformación lineal.

Enlace de archivo