-
Notifications
You must be signed in to change notification settings - Fork 0
/
02-AplicacionesLineales.Rmd
903 lines (646 loc) · 33 KB
/
02-AplicacionesLineales.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
# Aplicaciones lineales {#apli}
```{r echo = FALSE}
knitr::opts_chunk$set(echo = FALSE,
results = "asis",
message = FALSE,
warning = FALSE)
set.seed(1234)
```
Consideremos dos [espacios vectoriales](#ev) $V$ y $W$ sobre el mismo cuerpo $\mathbb{K}$, y una aplicación $f:V\to W$ entre ellos.
Diremos que $f$ es una __aplicación lineal__ si verifica las siguientes dos condiciones:
- $f(v_1 + v_2) = f(v_1) + f(v_2)$ para todo $v_1, v_2\in V$.
- $f(c\cdot v) = c\cdot f(v)$ para todo $c\in\mathbb{K},\,v\in V$.
Una aplicación lineal cuyo dominio y codominio sean iguales ($V = W$) se llama __endomorfismo__.
---
__Ejemplo__
Existen muchos ejemplos de aplicaciones lineales:
- La aplicación 0, la identidad... son aplicaciones lineales de forma trivial.
- Las rotaciones de vectores en $\mathbb{R}^n$ son aplicaciones lineales.
- Sobre el espacio vectorial $\mathcal{C}([a, b])$ de funciones continuas y derivables en un intervalo $[a, b]$, tanto el operador derivada $f\to f'$ como el operador integral $f \to \int_a^b f$, son aplicaciones lineales.
---
__¿Qué preguntas vamos a responder en este capítulo?__
- [¿Qué propiedades básicas tienen las aplicaciones lineales?](#prop-apli)
- [¿Cuál es la matriz asociada a una aplicación lineal en unas bases dadas?](#matriz-apli)
- [¿Cómo influye un cambio de base en la matriz asociada a una aplicación lineal?](#cambiobase-apli)
- [¿Qué es y cómo determinar el núcleo de una aplicación lineal?](#nucleo)
- [¿Cómo podemos identificar una aplicación lineal inyectiva?](#inyectividad)
- [¿Cómo calcular el subespacio imagen de una aplicación lineal?](#imagen)
- [¿Cómo identificar si una aplicación lineal es sobreyectiva?](#sobrey)
- [¿Qué es un isomorfismo?](#isomorfismo)
- [¿Cómo determinar la imagen de un subespacio vectorial?](#imagenU)
- [¿A qué se llama rango y nulidad de la aplicación lineal?](#rango-nulidad)
- [¿Qué dice el teorema de la dimensión para núcleo e imagen?](#th-dim-nucleo)
## Qué propiedades básicas tienen las aplicaciones lineales {#prop-apli}
\sectionmark{Propiedades de las Aplicaciones Lineales}
Vamos a revisar aquí algunas de las propiedades básicas de las aplicaciones lineales entre espacios vectoriales.
Consideremos una aplicación lineal $f:V\to W$.
> - $f(0_V) = 0_W$
- $f(-v) = -f(v),\quad v\in V$
- $f(v_1 - v_2) = f(v_1) - f(v_2),\quad v_1, v_2\in V$
- $f(\alpha_1 v_1 + \ldots \alpha_n v_n) = \alpha_1 f(v_1) + \ldots + \alpha_n f(v_n),\quad \alpha_i\in\mathbb{K},v_i\in V$
Además:
```{r}
theorem("- Si $U$ es un [subespacio](#subesp) de $V$, entonces $f(U)$ es un subespacio de $W$. Análogamente, si $S$ es subespacio de $W$, su preimagen $f^{-1}(S)$ es también un subespacio de $V$.\n- Si $\\mathcal{G} = \\{u_1,\\ldots,u_m\\}$ es un [sistema generador](#gen) de un subespacio $U$ de $V$, entonces $f(\\mathcal{G}) = \\{f(u_1),\\ldots,f(u_m)\\}$ es un sistema generador de $f(U)$.")
```
Y, por último,
> Si $f:V \to W$ y $g:W \to U$ son dos aplicaciones lineales, entonces su composición $g \circ f :V \to U$ también es una aplicación lineal.
## Cuál es la matriz asociada a una aplicación lineal en unas bases dadas {#matriz-apli}
\sectionmark{Matriz asociada}
```{r}
theorem("Si tenemos una matriz $A\\in \\mathcal{M}_{mn}(\\mathbb{R})$, podemos definir una aplicación lineal $f_A$ entre $\\mathbb{R}^n$ y $\\mathbb{R}^m$ de la forma:\n
$$f_A(v) = A\\cdot v,\\quad v\\in\\mathbb{R}^n$$")
```
En este resultado, podemos cambiar el cuerpo $\mathbb{R}$ de los números reales por cualquier otro cuerpo.
Este resultado nos habla de una forma de construir aplicaciones lineales, mediante el producto por una matriz que tenga las dimensiones adecuadas.
Un resultado más interesante es el siguiente, que nos dice que TODA aplicación lineal viene definida por el producto con una matriz:
```{r}
theorem("Sea $f:V\\to W$ una aplicación lineal. Fijemos dos bases $\\mathcal{B}_V$ y $\\mathcal{B}_W$ en dichos espacios, respectivamente. Entonces existe una matriz $A\\in\\mathcal{M}_{mn}(\\mathbb{R})$ tal que si $w = f(v)$ entonces $[w]_{\\mathcal{B}_W} = A\\cdot [v]_{\\mathcal{B}_V}$ para todo $v\\in V$.", "Matriz asociada a una aplicación lineal")
```
Esto significa que, fijando las bases, podemos encontrar una matriz $A$ de forma que para calcular la imagen de un vector $v\in V$, basta con tomar sus [coordenadas](#coord) en la base $\mathcal{B}_V$, que representamos por $[v]_{\mathcal{B}_V}$, y multiplicarlas por $A$, para obtener las coordenadas de $f(v)$ en la base correspondiente del _codominio_ $W$, las cuales se denotan por $[f(v)]_{\mathcal{B}_W}$.
```{r}
definition("A la matriz $A$ que nos proporciona este resultado la llamamos __matriz asociada__ a $f$ en las [bases](#sisgenabase) $\\mathcal{B}_V$ y $\\mathcal{B}_W$.", "Matriz asociada a aplicación lineal")
```
Hay que notar que la matriz $A$ está determinada siempre y cuando fijemos las dos bases antes dichas.
Pero, ¿cómo determinamos la matriz $A$?
Necesitamos fijar las dos bases de antemano:
$$\mathcal{B}_V = \{v_1,\ldots,v_n\}$$
$$\mathcal{B}_W = \{w_1,\ldots,w_m\}$$
El procedimiento general para construir la matriz $A$ es el que sigue. Para determinar la columna $j$-ésima de $A$:
- Tomamos el vector $j$-ésimo de la base de $V$: $v_j$.
- Calculamos su imagen $y_j = f(v_j)$.
- Calculamos las coordenadas de $y_j$ en la base $\mathcal{B}_W$.
$$[y_j]_{\mathcal{B}_W} = \left(
\begin{array}{c}
a_{1, j}\\
a_{2, j}\\
\vdots\\
a_{m, j}
\end{array}
\right) \Leftrightarrow
y_j = a_{1,j} w_1 + a_{2,j}w_2 + \ldots + a_{m, j} w_m$$
- Esas coordenadas son la columna $j$ de la matriz $A$.
Vamos a pasar todo esto a notación matricial, para encontrar una forma cómoda de resolver este problema.
Llamemos $B_2$ a la matriz formada, por columnas, por las coordenadas de los vectores de $\mathcal{B}_W$ en la base canónica: $B_2 = \left(w_1|w_2|\ldots|w_m\right)$.
Llamamos $Y = \left(y_1|y_2|\ldots|y_n\right) = \left(f(v_1)|f(v_2)|\ldots|f(v_n)\right)$.
Entonces, la expresión anterior se puede escribir matricialmente como $Y = B_2\cdot A$, siendo $A$ la matriz asociada a la aplicación lineal. Por tanto, podemos despejar $A = B_2^{-1} Y$.
Por tanto, para calcular $A$ de forma directa, podemos realizar Gauss-Jordan partiendo de $(B_2 | Y )$ hasta lograr $(I_m | A)$.
__Caso particular: Base canónica en $V$ y $W$__
En este caso, la matriz asociada a la aplicación lineal es
$$A = Y = \left(f(v_1)|f(v_2)|\ldots|f(v_n)\right)$$
puesto que los vectores de la base canónica puestos por columnas forman la matriz identidad.
De hecho, en la situación de la base canónica, lo más rápido es fijarse en los coeficientes de cada una de las variables $x,y,z,\ldots$ o $x_1,x_2,\ldots$, según sea el caso, y ponerlos por columnas. Así, para formar la matriz $A$ asociada a la aplicación lineal, tomaríamos como primera columna los coeficientes de la $x$, en la segunda, los coeficientes de la $y$, y así sucesivamente con el resto de variables.
---
__Ejemplo__
```{r, results = "asis"}
unknowns <- c("x", "y", "z", "t")
dimV <- sample(3:4, size = 1)
n <- dimV
dimW <- sample(2:3, size = 1)
m <- dimW
A <- rMatrix(n = dimW, m = dimV)
str0 <- to_latex(matrix(unknowns[seq(dimV)], ncol = 1))
str <- write_system(A, latex = TRUE, format = "c")
```
Consideremos la aplicación $f:V=\mathbb{R}^{`r dimV`}\to W=\mathbb{R}^{`r dimW`}$ dada por:
```{r results="asis"}
cat("$$f", str0, " = \\left(", str, "\\right)$$")
```
Como hemos visto, para encontrar su matriz asociada en las bases canónicas de $v$ y $W$, basta con mirar los coeficientes de $x,y,\ldots$, y ponerlos por columnas:
```{r}
cat("$$A = ", to_latex(A), "$$")
```
Esto significa que si tenemos un vector $v\in V$ expresado en coordenadas en la base canónica, entonces $f(v) = A\ v$, también expresado en las coordenadas canónicas de $W$.
```{r}
repeat {
B1 <- rMatrix(n = n, m = n * 4, values = -1:1)
B1 <- linearly_independents(B1)
if (ncol(B1) == n) break
}
repeat {
B2 <- rMatrix(n = m, m = m * 4, values = 0:2)
B2 <- linearly_independents(B2)
if (ncol(B2) == m) break
}
```
Consideremos ahora dos bases distintas de la canónica tanto en $V$ como $W$:
```{r}
glue::glue(
"$$",
"\\mathcal{B}_{1} = \\{v_i\\} = ",
"\\left\\{[vectors_to_latex(B1)]\\right\\}",
"$$",
.open = "[", .close = "]"
) %>%
cat()
glue::glue(
"$$",
"\\mathcal{B}_{2} = \\{w_i\\} = ",
"\\left\\{[vectors_to_latex(B2)]\\right\\}",
"$$",
.open = "[", .close = "]"
) %>%
cat()
```
Vamos a calcular la matriz $A'$ asociada a $f$ en estas dos bases. Debemos calcular:
$$Y= (f(v_1)|\ldots|f(v_n))$$
$$B_2 = (w_1|\ldots|w_m)$$
Aplicando $f$ sucesivamente a los vectores de $\mathcal{B}_1$, tenemos que
```{r}
glue_latex(
"Y = ",
"[glue_matrices(A %*% B1, latex = TRUE, fractions = TRUE)]"
) %>%
cat()
```
y
```{r}
glue_latex(
"B_2 = ",
"[glue_matrices(B2, latex = TRUE, fractions = TRUE)]"
) %>%
cat()
```
Luego podemos obtener $A'$ como $B_2^{-1} Y$, que resolvemos por Gauss-Jordan:
```{r}
Y <- A %*% B1
PAB <- gauss_elimination(B2, Y, diag1 = TRUE, jordan = TRUE)
glue_latex(
"[glue_matrices(B2, Y, latex = TRUE, fractions = TRUE)]",
"\\sim",
"[glue_matrices(PAB$splits, latex = TRUE, fractions = TRUE)]"
) %>%
cat()
```
Y de aquí que la nueva matriz, asociada a $f$ en las nuevas bases, sea:
```{r}
glue_latex(
"A' = ",
"[glue_matrices(PAB$splits[[2]], latex = TRUE, fractions = TRUE)]"
) %>%
cat()
```
---
## Cómo influye un cambio de base en la matriz asociada a una aplicación lineal {#cambiobase-apli}
\sectionmark{Cambio de base en aplicaciones lineales}
Supongamos que tenemos una aplicación lineal $f:V\to W$ y que tenemos prefijadas unas bases $\mathcal{B}_V$ y $\mathcal{B}_W$ y, por tanto, tenemos determinada la matriz $A$, asociada a $f$ en esas bases.
Consideremos unas nuevas bases $\mathcal{B}'_V$ y $\mathcal{B}'_W$ y nos preguntamos cuál será la matriz $A'$ asociada a $f$ en dichas bases.
Para saber hallar $A'$, nos basamos en dos resultados teóricos.
El primero de ellos nos relaciona los [cambios de base](#cambiobase) con las aplicaciones lineales:
```{r}
theorem("Un __cambio de base__ entre dos bases $\\mathcal{B}_V$ y $\\mathcal{B}'_V$ en un espacio vectorial $V$ se corresponde con la aplicación lineal __identidad__ $\\mathrm{id}_V:V \\to V$, donde en el dominio hemos considerado la base $\\mathcal{B}_V$ y en el codominio la base $\\mathcal{B}'_V$. Además, la matriz asociada a $\\mathrm{id}_V$ en esta situación es justo la del cambio de base $P_{\\mathcal{B}_V \\to \\mathcal{B}'_V}$.", "Cambio de base como aplicación lineal")
```
Es decir, podemos considerar que un cambio de base no es más que la aplicación de la función identidad en el espacio vectorial, donde en dominio y codominio hemos considerado bases distintas.
El otro resultado teórico nos relaciona la composición de aplicaciones lineales (que [es de nuevo una aplicación lineal](#prop-apli)) con sus matrices asociadas:
```{r}
theorem("Si $f: V \\to W$ y $g:W \\to U$ son dos aplicaciones lineales, con matrices asociadas $A_f$ y $A_g$, respectivamente, habiendo fijado bases en $V$, $W$ y $U$, entonces la aplicación lineal composición de $f$ y $g$, $g\\circ f:V\\to U$, tiene como matriz asociada a $A_{g \\circ f} = A_g \\cdot A_f$.", "Composición de aplicaciones lineales")
```
Luego si componemos dos aplicaciones lineales, _habiendo fijado bases en cada caso_, la matriz asociada a la composición es el producto de las matrices individuales.
Con estos dos resultados, ya estamos en condiciones de estudiar cómo influye un cambio de base en la matriz de la aplicación lineal.
Veamos el siguiente esquema, donde denotamos $V_{\mathcal{B}}$ que estamos considerando la base $\mathcal{B}$ en el espacio $V$:
$$
\begin{array}{ccccccc}
V_{\mathcal{B}'_V} &
\xrightarrow{\mathrm{id}_V} & V_{\mathcal{B}_V} & \xrightarrow{f} & W_{\mathcal{B}_W} & \xrightarrow{\mathrm{id}_W} & W_{\mathcal{B}'_W} \\
& P_{\mathcal{B}'_V \to \mathcal{B}_V} & & A & & P_{\mathcal{B}_W \to \mathcal{B}'_W} & \\
\end{array}
$$
Llamemos, por comodidad, $P = P_{\mathcal{B}'_V \to \mathcal{B}_V}$ y $Q = P_{\mathcal{B}_W \to \mathcal{B}'_W}$. Recordemos que tanto $P$ como $Q$ se pueden calcular [de forma sencilla](#cambiobase).
De esta forma, vemos que si fijamos las nuevas bases, entonces la aplicación $f$ resultante equivale a la $f$ anterior, a la que precedemos y sucedemos con la aplicación identidad dentro de $V$ y $W$, respectivamente, puesto que $f = \mathrm{id}_W\circ f \circ \mathrm{id}_V$.
Teniendo en cuenta los resultados teóricos anteriores, esto quiere decir que $A' = Q\ A\ P$.
Como consecuencia, tenemos además que
```{r}
theorem("Todas las matrices asociadas a una misma aplicación lineal $f$ en distintas bases son equivalentes.")
```
---
__Ejemplo__
```{r}
repeat {
B1p <- rMatrix(n = n, m = n * 4, values = -1:1)
B1p <- linearly_independents(B1p)
if (ncol(B1p) == n) break
}
repeat {
B2p <- rMatrix(n = m, m = m * 4, values = 0:2)
B2p <- linearly_independents(B2p)
if (ncol(B2p) == m) break
}
```
Continuemos con el ejemplo de [la sección anterior](#matriz-apli). Sabemos que la aplicación $f$ allí definida tenía por matriz asociada:
```{r}
newA <- PAB$splits[[2]]
glue_latex(
"A = ",
"[glue_matrices(newA, latex = TRUE, fractions = TRUE)]"
) %>%
cat()
```
Consideremos ahora dos bases distintas tanto en $V$ como $W$:
```{r}
glue::glue(
"$$",
"\\mathcal{B}'_{1} =",
"\\left\\{[vectors_to_latex(B1p)]\\right\\}",
"$$",
.open = "[", .close = "]"
) %>%
cat()
glue::glue(
"$$",
"\\mathcal{B}'_{2} =",
"\\left\\{[vectors_to_latex(B2p)]\\right\\}",
"$$",
.open = "[", .close = "]"
) %>%
cat()
```
Vamos a aplicar lo anterior para encontrar la matriz $A'$ asociada a $f$ en las nuevas bases.
Para ello, sabemos que $A' = Q\ A\ P$, donde $P$ es la matriz de cambio de base de $\mathcal{B}'_1$ a $\mathcal{B}_1$ y $Q$ es el cambio de $\mathcal{B}_2$ a $\mathcal{B}'_2$.
Si llamamos $B_1$, $B'_1$, $B_2$ y $B'_2$ a las matrices que resultan de poner por columnas los vectores de $\mathcal{B}_1$, $\mathcal{B}'_1$, $\mathcal{B}_2$ y $\mathcal{B}'_2$, respectivamente, podemos calcular $P$ y $Q$ de la siguiente manera, según [ya hemos visto](#cambiobase):
$$P = B_1^{-1}\ B'_1,\quad\quad Q = {B'_2}^{-1}\ B_2$$
Hacemos Gauss-Jordan partiendo de $(B_1 | B'_1)$ hasta llegar a $(I_n | P)$, y partiendo de $(B'_2 | B_2)$ hasta $(I_m | Q)$, obteniendo:
```{r}
gP <- gauss_elimination(B1, B1p,
diag1 = TRUE, jordan = TRUE)
gP <- gP$splits[[2]]
gQ <- gauss_elimination(B2p, B2,
diag1 = TRUE, jordan = TRUE)
gQ <- gQ$splits[[2]]
glue_latex(
"P = ",
"[glue_matrices(gP, latex = TRUE, fractions = TRUE)],",
"\\quad\\quad",
"\\ Q = ",
"[glue_matrices(gQ, latex = TRUE, fractions = TRUE)]"
) %>%
cat()
```
De ahí:
```{r}
glue_latex(
"\\begin{array}{rcl}",
"A' & = & Q\\ A\\ P = \\\\",
" & = & [glue_matrices(gQ, latex = TRUE, fractions = TRUE)]",
"[glue_matrices(newA, latex = TRUE, fractions = TRUE)]",
"[glue_matrices(gP, latex = TRUE, fractions = TRUE)] = \\\\",
" & = & [glue_matrices(gQ %*% newA %*% gP, latex = TRUE, fractions = TRUE)]\\\\",
"\\end{array}"
) %>%
cat()
```
---
## Qué es y cómo determinar el núcleo de una aplicación lineal {#nucleo}
\sectionmark{Núcleo}
```{r}
definition("Llamamos __núcleo__ de una aplicación lineal $f:V \\to W$, y lo denotamos por $\\mathrm{Ker}\\ f$, al conjunto de aquellos vectores $v\\in V$ tales que $f(v) = 0_W$:\n
$$\\mathrm{Ker}\\ f = \\{v\\in V:f(v) = 0_W\\}$$", "Núcleo de una aplicación lineal")
```
El primer resultado teórico interesante es:
```{r}
theorem("$\\mathrm{Ker}\\ f \\ne\\varnothing$, puesto que, al menos, $0_V\\in\\mathrm{Ker}\\ f$, como [hemos visto antes](#prop-apli).")
```
Podemos decir todavía más:
```{r}
theorem("Dada una aplicación lineal $f:V\\to W$, su núcleo $\\mathrm{Ker}\\ f$ es un subespacio vectorial de $V$.", "El núcleo es un subespacio")
```
Por tanto, para operar con el núcleo, podemos hacerlo como hemos visto en [el capítulo acerca de espacios vectoriales](#ev): podemos calcular [un sistema generador](#gen), [determinar una base y su dimensión](#base).
¿Qué relación tiene el núcleo de $f$ con su matriz asociada?
Supongamos que fijamos las bases en $V$ y $W$ y que la matriz asociada a $f$ en esas bases es $A$.
Entonces, si $v\in V$ está en el núcleo, será que $f(v) = 0_W$, luego las coordenadas de $f(v)$ en la base de $W$ son todas cero: $[f(v)]_{\mathcal{B}_W} = 0$.
Pero como conocemos la matriz asociada a $f$, entonces sabemos que $[f(v)]_{\mathcal{B}_W} = A\ [v]_{\mathcal{B}_V}$.
En resumen, $v\in\mathrm{Ker}\ f$ si, y sólo si $A\ [v]_{\mathcal{B}_V} = 0$, es decir, si y sólo si las coordenadas de $v$ son solución del sistema de ecuaciones lineales homogéneo $Ax = 0$.
```{r}
theorem("$\\mathrm{Ker}\\ f$ coincide con el subespacio de las soluciones del sistema $Ax = 0$.")
```
Esto también implica que __las ecuaciones cartesianas de $\mathrm{Ker}\ f$ son $Ax = 0$__. Por tanto, podemos aplicar [lo que ya hemos visto](#base) para calcular una base del núcleo de $f$.
---
__Ejemplo__
Seguimos con el ejemplo de la aplicación $f:V=\mathbb{R}^{`r dimV`}\to W=\mathbb{R}^{`r dimW`}$ dada por:
```{r results="asis"}
cat("$$f", str0, " = \\left(", str, "\\right)$$")
```
Como hemos visto, su matriz asociada es:
```{r}
cat("$$A = ", to_latex(A), "$$")
```
Usamos esa matriz $A$ para construir el sistema homogéneo:
```{r}
glue_latex(
"[write_system(A, matlab::zeros(nrow(A), 1), latex = TRUE)]"
) %>%
cat()
```
que se corresponde con las ecuaciones cartesianas de $\mathrm{Ker}\ f$ (podíamos haber hecho directamente $f(v) = 0$ usando la definición de $f$).
Usaremos [lo que hemos visto ya](#base) para convertir esas ecuaciones a forma paramétrica (usando eliminación Gaussiana), y así conseguir un sistema generador y [una base](#sisgenabase):
```{r}
genKer <- solve_homogeneous(A)
bKer <- linearly_independents(genKer)
dimKer <- ncol(bKer)
generic_vector_V <- matrix(unknowns[1:n], ncol = 1)
params <- c("\\alpha", "\\beta", "\\gamma", "\\delta")
if (dimKer > 0) {
glue_latex(
"[write_system(A, matlab::zeros(nrow(A), 1), latex = TRUE)]",
"\\Leftrightarrow",
"\\ [to_latex(generic_vector_V)] = ",
"[write_linear_combination(genKer, vars = params)]"
) %>%
cat()
} else {
glue_latex(
"[write_system(A, matlab::zeros(nrow(A), 1), latex = TRUE)]",
"\\Leftrightarrow",
"\\ [to_latex(generic_vector_V)] = ",
"[to_latex(matlab::zeros(nrow(A), 1))]"
) %>%
cat()
}
```
Luego
```{r}
if (dimKer > 0) {
glue_latex(
"\\mathcal{B}_{\\mathrm{Ker}\\ f} = ",
"\\left\\{",
"[vectors_to_latex(bKer)]",
"\\right\\}"
) %>%
cat()
} else {
glue_latex(
"\\mathrm{Ker}\\ f = \\{0\\}"
) %>%
cat()
}
```
---
## Cómo podemos identificar una aplicación lineal inyectiva {#inyectividad}
\sectionmark{Inyectividad}
Recordemos que una aplicación $f:X\to Y$ es __inyectiva__ si y sólo si $f(x_1)\ne f(x_2)$ siempre que $x_1\ne x_2$, con $x_1, x_2\in X$.
Hay una forma de caracterizar las aplicaciones lineales inyectivas:
```{r}
theorem("La aplicación lineal $f:V\\to W$ es inyectiva si, y sólo si, $\\mathrm{Ker}\\ f = \\{0\\}$, es decir, si y sólo si $\\mathrm{dim}(\\mathrm{Ker}\\ f) = 0$.", "Caracterización de la inyectividad")
```
Un resultado interesante nos presenta una relación entre la inyectividad de $f$ y las dimensiones de los espacios $V$ y $W$:
```{r}
theorem("Si la aplicación lineal $f:V\\to W$ es inyectiva, entonces se verifica que $\\mathrm{dim}(V)\\le\\mathrm{dim}(W)$.")
```
El recíproco no es cierto, no siempre que tengamos $\mathrm{dim}(V)\le\mathrm{dim}(W)$ la aplicación puede ser inyectiva. Por ejemplo, la aplicación cero $0:\mathbb{R}^2\to\mathbb{R}^3$, que asocia a todo vector el vector 0 del codominio, no puede ser inyectiva, a pesar de que la dimensión del dominio es menor que la del codominio.
Podemos decir todavía algún resultado teórico que nos proporciona más información acerca de cómo identificar aplicaciones lineales inyectivas:
```{r}
theorem("Una aplicación $f:V\\to W$ es inyectiva si, y sólo si, la imagen de todo [sistema linealmente independiente](#indep) es también un sistema linealmente independiente.")
```
```{r}
theorem("Si $V$ es de dimensión finita, entonces la aplicación lineal $f:V\\to W$ es inyectiva si, y sólo si, $\\mathrm{dim}(V) = \\mathrm{dim}(\\mathrm{Im}\\ f)$")
```
---
__Ejemplo__
En el ejemplo de [la sección anterior](#nucleo), tenemos que $\mathrm{dim}(\mathrm{Ker}\ f) = 1$, luego $f$ __no es inyectiva__, ya que en ese caso debería ser $\mathrm{dim}(\mathrm{Ker}\ f) = 0$.
```{r}
Ag <- rMatrix(n = n, m = n, sdd = TRUE)
```
Consideremos otra aplicación $g:\mathbb{R}^{`r dimV`}\to \mathbb{R}^{`r dimV`}$ dada por:
```{r}
glue_latex(
"g [to_latex(generic_vector_V)] = ",
"[glue_matrices(Ag, latex = TRUE, fractions = TRUE)]",
"\\ [to_latex(generic_vector_V)] = ",
"\\left([write_system(Ag, latex = TRUE, format = 'c')]\\right)"
) %>%
cat()
```
Podemos estudiar su núcleo para comprobar si es inyectiva:
```{r}
glue_latex(
"\\mathrm{Ker}\\ g =",
"\\left\\{",
"[to_latex(generic_vector_V)]\\in\\mathbb{R}^{[n]}:",
"[write_system(Ag, matlab::zeros(nrow(Ag), 1), latex = TRUE, format = 'c')]",
"\\right\\}"
) %>%
cat()
```
Resolvemos el sistema homogéneo para llegar a que
```{r}
glue_latex(
"\\left\\{[write_system(Ag, matlab::zeros(nrow(Ag), 1), latex = TRUE)]\\right.",
"\\Rightarrow",
"[to_latex(generic_vector_V)] = [to_latex(matlab::zeros(n, 1))]"
) %>%
cat()
```
Luego $\mathrm{Ker}\ g=\{0\}$, y así $g$ es inyectiva.
---
## Cómo calcular el subespacio imagen de una aplicación lineal {#imagen}
\sectionmark{Subespacio imagen}
```{r}
definition("Llamamos __imagen de la aplicación lineal__ $f:V\\to W$ a:\n$$\\mathrm{Im}\\ f = \\{w\\in W: \\text{existe }v\\in V \\text{ con }f(v) = w\\} = f(V)$$", "Imagen de una aplicación lineal")
```
Análogamente a lo que pasaba con [el núcleo de una aplicación lineal](#nucleo), tenemos:
```{r}
theorem("Si $f:V\\to W$ es una aplicación lineal, entonces $\\mathrm{Im}\\ f$ es un subespacio vectorial de $W$.", "La imagen es un subespacio vectorial")
```
Por tanto, podemos estudiarlo con todas las [herramientas que conocemos](#ev).
¿Cómo calculamos $\mathrm{Im}\ f$?
[Recordemos](#prop-apli) que si $\mathcal{G}$ es un [sistema generador](#gen) de un subespacio $U$ de $V$, entonces $f(\mathcal{G})$ es un sistema generador de $f(U)$.
En concreto, tomando una base $\mathcal{B}$ de $V$, su imagen $f(\mathcal{B})$ es un sistema generador de $\mathrm{Im}\ f$. Basta, por tanto, aplicar $f$ a cada vector de $\mathcal{B}$ y con eso construimos un sistema generador del que podemos [eliminar los vectores linealmente dependientes para obtener una base](#sisgenabase) de $\mathrm{Im}\ f$.
En consecuencia:
```{r}
theorem("Sea $f$ una aplicación lineal entre dos espacios $V$ y $W$, y sea $A$ la matriz asociada a $f$, una vez que hemos fijado dos bases en $V$ y $W$. Entonces $\\mathrm{Im}\\ f$ es el subespacio de $W$ generado por los vectores columna que forman la matriz $A$.", "Sistema generador de $\\mathrm{Im}\\ f$")
```
---
__Ejemplo__
Vamos a estudiar la imagen de las dos aplicaciones $f$ y $g$ del [ejemplo anterior](#inyectividad).
Para $f$, tenemos que $\mathrm{Im}\ f$ está generado por los vectores columnas de la matriz $A$, luego un sistema generador de $\mathrm{Im}\ f$ será:
```{r}
glue_latex(
"\\mathcal{G}_{\\mathrm{Im}\\ f} = ",
"\\left\\{",
"[vectors_to_latex(A)]",
"\\right\\}"
) %>%
cat()
```
A partir de él, [eliminando los vectores que sean linealmente dependientes](#sisgenabase), encontramos una base de $\mathrm{Im}\ f$:
```{r}
bImf <- linearly_independents(A)
glue_latex(
"\\mathcal{B}_{\\mathrm{Im}\\ f} = ",
"\\left\\{[vectors_to_latex(bImf)]\\right\\}"
) %>%
cat()
```
Luego \(\mathrm{dim}(\mathrm{Im}\ f) = `r ncol(bImf)`\).
Vayamos ahora con la aplicación $g$. Con el mismo razonamiento, sabemos que
```{r}
glue_latex(
"\\mathcal{G}_{\\mathrm{Im}\\ g} = ",
"\\left\\{",
"[vectors_to_latex(Ag)]",
"\\right\\}"
) %>%
cat()
```
es un sistema generador de $\mathrm{Im}\ g$.
Igual que antes, podemos encontrar una base de $\mathrm{Im}\ g$:
```{r}
bImg <- linearly_independents(Ag)
glue_latex(
"\\mathcal{B}_{\\mathrm{Im}\\ g} = ",
"\\left\\{",
"[vectors_to_latex(bImg)]",
"\\right\\}"
) %>%
cat()
```
Entonces \(\mathrm{dim}(\mathrm{Im}\ g) = `r ncol(bImg)`\). Esto nos dice que $\mathrm{Im}\ g = W$.
---
## Cómo identificar si una aplicación lineal es sobreyectiva {#sobrey}
\sectionmark{Sobreyectividad}
Recordemos que una aplicación $f:X\to Y$ se dice __sobreyectiva__ si, para cada $y\in Y$, existe un $x\in X$ tal que $f(x) = y$, es decir, si $f(X) = Y$.
En cuanto a aplicaciones lineales, tenemos el siguiente resultado, consecuencia de lo anterior:
```{r}
theorem("La aplicación lineal $f:V\\to W$ es sobreyectiva si $f(V) = \\mathrm{Im}\\ f = W$, y esto es equivalente a decir que $\\mathrm{dim}(\\mathrm{Im}\\ f) = \\mathrm{dim}(W)$.", "Caracterización de la sobreyectividad")
```
Una propiedad adicional, con relación a las dimensiones de $V$ y de $W$:
```{r}
theorem("Si la aplicación lineal $f:V\\to W$ es sobreyectiva, entonces $\\mathrm{dim}(V)\\ge\\mathrm{dim}(W)$.")
```
---
__Ejemplo__
En el [ejemplo anterior](#imagen), estudiamos las imágenes de las aplicaciones $f$ y $g$ de los ejemplos.
Si aplicamos el resultado teórico de antes, llegamos a que:
- $f$ no es sobreyectiva, pues \(\mathrm{dim}(\mathrm{Im}\ f) = `r ncol(bImf)` \ne `r m` = \mathrm{dim}(W)\).
- $g$ sí es sobreyectiva, pues \(\mathrm{dim}(\mathrm{Im}\ g) = `r ncol(bImg)` = \mathrm{dim}(W)\).
---
## Qué es un isomorfismo {#isomorfismo}
\sectionmark{Isomorfismos}
```{r}
definition("Un __isomorfismo__ es una aplicación lineal [inyectiva](#inyectiva) y [sobreyectiva](#sobrey).\n\nUn __automorfismo__ es un isomorfismo donde dominio y codominio son el mismo espacio $V$.", "Isomorfismo y automorfismo")
```
__Algunas propiedades básicas de los isomorfismos__
- La composición de isomorfismos es un isomorfismo.
- La aplicación inversa de un isomorfismo es también un isomorfismo
Cuando, además, estamos hablando de espacios de dimensión finita, tenemos los siguientes resultados:
```{r}
theorem("- Una aplicación lineal $f:V\\to W$ es un isomorfismo si, y sólo si, $\\mathrm{dim}(V) = \\mathrm{dim}(W)$.\n
- Una aplicación $f:V\\to V$ es un _automorfismo_ si, y sólo si, o bien es inyectiva o bien es sobreyectiva.")
```
Este último resultado nos dice que en un _endomorfismo_, basta con ver si la aplicación es [inyectiva](#inyectividad) o [sobreyectiva](#sobrey) para tener que es un isomorfismo.
---
__Ejemplo__
Si miramos las aplicaciones $f$ y $g$ de [las secciones anteriores](#nucleo), entonces podemos confirmar que $g$ es un automorfismo, mientras que $f$ no lo es, ya que no es ni inyectiva ni sobreyectiva.
---
## Cómo determinar la imagen de un subespacio vectorial {#imagenU}
\sectionmark{Imagen de subespacios}
Este problema es realmente un _caso particular_ de [cómo calcular la imagen de una aplicación lineal](#imagen).
Tanto en esa sección como en la de [propiedades](#prop-apli), vimos que si $U$ es un [subespacio vectorial generado](#gen) por los vectores de $\mathcal{G}=\{u_1,\ldots,u_k\}$, entonces $f(\mathcal{G}) = \{f(u_1),\ldots,f(u_k)\}$ es un sistema generador de $f(U)$.
Por tanto, si deseamos calcular la imagen de un subespacio $U$, los pasos a seguir serán:
- A partir de sus ecuaciones (si se dan), [encontrar un sistema generador o una base](#base) de $U$.
- Calcular la imagen, mediante la aplicación $f$, de los vectores de la base de $U$. Por [lo anterior](#prop-apli), esto es un sistema generador de $f(U)$.
- [Eliminar los vectores linealmente dependientes](#sisgenabase) de ese sistema generador, para obtener una base de $f(U)$.
---
__Ejemplo__
Consideremos el subespacio $U$ dado por
```{r}
U <- rMatrix(n = n, m = 2)
AU <- parametric_to_cartesian(U)$A
glue_latex(
"U = \\left\\{",
"[to_latex(generic_vector_V)]\\in\\mathbb{R}^{[n]}:",
"[write_system(fractional(AU), matlab::zeros(nrow(AU), 1), latex = TRUE, fractions = TRUE, format = 'c')]",
"\\right\\}"
) %>%
cat()
```
Queremos calcular $f(U)$ y $g(U)$, siendo $f$ y $g$ las de [los ejemplos anteriores](#nucleo).
El primer paso es [calcular una base](#base) de $U$. Para ello, pasamos las ecuaciones cartesianas de $U$ a paramétricas, que nos dan un sistema generador, resolviendo el sistema de ecuaciones por Gauss. A partir del sistema generador, ya podríamos proceder, o podemos calcular una base de $U$.
En nuestro caso,
```{r}
glue_latex(
"\\mathcal{B}_U = \\left\\{",
"[vectors_to_latex(U)]",
"\\right\\}"
) %>%
cat()
```
Comenzamos por calcular $f(U)$. Debemos calcular la imagen de los vectores de la base de $U$ con la aplicación $f$:
```{r}
glue_latex(
"f(\\mathcal{B}_U) = \\left\\{",
"[vectors_to_latex(A %*% U)]",
"\\right\\}"
) %>%
cat()
```
Si [eliminamos los vectores linealmente dependientes](#sisgenabase) de $f(\mathcal{B}_U)$, nos queda una base de $f(U)$:
```{r}
bfU <- linearly_independents(A %*% U)
glue_latex(
"\\mathcal{B}_{f(U)} = \\left\\{",
"[vectors_to_latex(bfU)]",
"\\right\\}"
) %>%
cat()
```
Repetimos el proceso con la aplicación $g$. Calculamos:
```{r}
glue_latex(
"g(\\mathcal{B}_U) = \\left\\{",
"[vectors_to_latex(Ag %*% U)]",
"\\right\\}"
) %>%
cat()
```
Como sabemos que $g$ es un [isomorfismo](#isomorfismo), sabemos que la imagen de un sistema linealmente independiente es también un sistema linealmente independiente. Luego $\mathcal{B}_{g(U)} = g(\mathcal{B}_U)$. Si no recordáramos este resultado, deberíamos intentar eliminar los vectores linealmente dependientes en $g(\mathcal{B}_U)$ para así obtener la base.
---
## A qué se llama rango y nulidad de la aplicación lineal {#rango-nulidad}
\sectionmark{Rango y Nulidad}
```{r}
definition("Se llama __rango__ de una aplicación lineal $f:V\\to W$ a la dimensión de la [imagen](#imagen) de $f$: $\\mathrm{rg}(f) = \\mathrm{dim}(\\mathrm{Im}\\ f)$.", "Rango")
```
```{r}
definition("Se llama __nulidad__ de una aplicación lineal $f:V\\to W$ a la dimensión del [núcleo](#nucleo) de $f$: $\\mathrm{nul}(f) = \\mathrm{dim}(\\mathrm{Ker}\\ f)$.", "Nulidad")
```
De forma análoga, se pueden definir rango y nulidad para __matrices__, puesto que tenemos [una importante relación entre matrices y aplicaciones lineales](#matrix-apli).
```{r}
definition("Dada una matriz $A$, su __rango__ $\\mathrm{rg}(A)$ es la dimensión del subespacio generado por los vectores que forman sus columnas, y su __nulidad__ $\\mathrm{nul}(A)$ es la dimensión del subespacio vectorial de las soluciones del sistema de ecuaciones lineales $A\\ v = 0$.", "Rango y nulidad de una matriz")
```
Un resultado importante, debido a que [todas las matrices asociadas a una misma aplicación lineal son equivalentes](#cambiobase-apli), es que todas tienen el mismo rango y la misma nulidad, y coinciden con el rango y nulidad de $f$.
Por tanto, para calcular rango y nulidad de $f$, bastará con estudiar el rango y nulidad de cualquiera de sus expresiones matriciales en unas bases fijadas de $V$ y $W$.
---
__Ejemplo__
Vamos a calcular el rango y la nulidad de las aplicaciones $f$ y $g$ que estamos estudiando en los [ejemplos anteriores](#nucleo).
El caso fácil es el de $g$, que era un [isomorfismo](#isomorfismo). Luego:
- $\mathrm{nul}(g) = \mathrm{dim}(\mathrm{Ker}\ g) = \mathrm{dim}(\{0\}) = 0$, por ser $g$ [inyectiva](#inyectividad).
- $\mathrm{rg}(g) = \mathrm{dim}(\mathrm{Im}\ g) = \mathrm{dim}(W) = 3$, por ser $g$ [sobreyectiva](#sobrey).
Y lo mismo se aplica para sus matrices asociadas.
En cuanto a $f$, recopilando la información que tenemos:
- Su nulidad es la dimensión de su [núcleo](#nucleo): \(\mathrm{nul}(f) = \mathrm{dim}(\mathrm{Ker}\ f) = `r ncol(bKer)`\).
- Su rango es la dimensión de su [imagen](#imagen): \(\mathrm{rg}(f) = \mathrm{dim}(\mathrm{Im}\ f) = `r ncol(bImf)`\)
---
## Qué dice el teorema de la dimensión para núcleo e imagen {#th-dim-nucleo}
\sectionmark{Teorema de la dimensión}
El resultado teórico que nos relaciona las dimensiones de [núcleo](#nucleo) e [imagen](#imagen) de una aplicación lineal $f:V\to W$, es decir, su nulidad y su rango, es el siguiente:
```{r}
theorem("Si $f:V\\to W$ es una aplicación lineal, entonces\n
$$\\mathrm{dim}(V) = \\mathrm{dim}(\\mathrm{Ker}\\ f) + \\mathrm{dim}(\\mathrm{Im}\\ f) = \\mathrm{nul}(f) + \\mathrm{rg}(f)$$", "Teorema de la dimensión")
```
Este resultado, reescrito en términos matriciales, queda como:
```{r}
theorem("Si $A$ es una matriz con $m$ filas y $n$ columnas, entonces\n
$$n = \\mathrm{nul}(A) + \\mathrm{rg}(A)$$")
```
---
__Ejemplo__
Vamos a _comprobar_ el teorema de la dimensión para las aplicaciones lineales $f$ y $g$ de [los ejemplos anteriores](#nucleo).
- Para $f$:
$$\begin{array}{ccccc}
\mathrm{dim}(\mathbb{R}^{`r n`}) & = & \mathrm{dim}(\mathrm{Ker}\ f) & + & \mathrm{dim}(\mathrm{Im}\ f) \\
`r n` & = & `r ncol(bKer)` & + & `r ncol(bImf)` \\
\end{array}$$
- Para $g$:
$$\begin{array}{ccccc}
\mathrm{dim}(\mathbb{R}^{`r n`}) & = & \mathrm{dim}(\mathrm{Ker}\ g) & + & \mathrm{dim}(\mathrm{Im}\ g) \\
`r n` & = & 0 & + & `r n` \\
\end{array}$$
---