22.01.2015 Views

Resolución numérica de sistemas de ecuaciones lineales 2 ...

Resolución numérica de sistemas de ecuaciones lineales 2 ...

Resolución numérica de sistemas de ecuaciones lineales 2 ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Resolución numérica <strong>de</strong> <strong>sistemas</strong> <strong>de</strong> <strong>ecuaciones</strong><br />

<strong>lineales</strong><br />

2 Métodos directos<br />

2.1 Eliminación Gaussiana: factorización LU.<br />

2.2 Otras factorizaciones: factorización LDU, <strong>de</strong> Crout y <strong>de</strong><br />

Cholesky.<br />

2.3 Normas matriciales. Condicionamiento y estabilidad.<br />

Empecemos repasando el concepto <strong>de</strong> norma en R n .<br />

Definición 1 Llamaremos norma en R n a toda aplicación ‖·‖ : R n −→ R + verificando<br />

1. ‖x‖ 0, ∀x ∈ R n<br />

2. ‖x‖ =0⇐⇒ x =0<br />

3. ‖αx‖ = |α| ‖x‖ ∀α ∈ R, ∀x ∈ R n<br />

4. ‖x + y‖ ‖x‖ + ‖y‖, ∀x, y ∈ R n<br />

Como ejemplos importantes, a<strong>de</strong>más <strong>de</strong> la norma Euclí<strong>de</strong>a, tenemos<br />

( ∑<br />

• Norma Euclí<strong>de</strong>a: ‖x‖ 2 = √ n n∑<br />

x 2 i =<br />

i=1<br />

i=1<br />

• Norma infinito: ‖x‖ ∞ = max i |x i |<br />

x 2 i<br />

) 1/2<br />

• Norma uno: ‖x‖ 1 =<br />

n∑<br />

|x i |<br />

i=1<br />

Ahora, <strong>de</strong> forma análoga exten<strong>de</strong>mos la <strong>de</strong>finición para introducir el concepto <strong>de</strong> norma<br />

en el espacio vectorial <strong>de</strong> las matrices M n×m .


Definición 2 Llamaremos norma matricial en M n×m a toda aplicación ‖·‖ : M n×m −→<br />

R + verificando<br />

1. ‖A‖ 0, ∀A ∈M n×m<br />

2. ‖A‖ =0⇐⇒ A =0<br />

3. ‖αA‖ = |α| ‖A‖ ∀α ∈ R, ∀A ∈M n×m<br />

4. ‖A + B‖ ‖A‖ + ‖B‖, ∀A, B ∈M n×m<br />

5. ‖AB‖ ‖A‖‖B‖, ∀A, B ∈M n×m<br />

Notemos que con respecto a la <strong>de</strong>finición <strong>de</strong> norma en R n hemos añadido la última<br />

condición. Teniendo en cuenta que en la resolución <strong>de</strong> <strong>sistemas</strong> <strong>de</strong> <strong>ecuaciones</strong> <strong>lineales</strong><br />

y en otros problemas básicos una <strong>de</strong> las operaciones elementales es el producto <strong>de</strong> una<br />

matriz por un vector, operación que, cuando es posible realizarla <strong>de</strong>bido a las dimensiones<br />

<strong>de</strong> ambos factores, el resultado es un vector. Por tanto po<strong>de</strong>mos calcular su norma, la<br />

cual sería interesante compararla con la norma <strong>de</strong> los factores.<br />

Definición 3 Diremos que una norma vectorial ‖·‖ v en R n y una norma matricial ‖·‖ M<br />

en M n×m son compatibles si<br />

‖Ax‖ v ‖A‖ M ‖x‖ v , ∀x ∈ R n , ∀A ∈M n×m .<br />

Antes <strong>de</strong> dar algún ejemplo <strong>de</strong> normas matriciales <strong>de</strong>finiremos el concepto <strong>de</strong> radio espectral<br />

<strong>de</strong> una matriz cuadrada.<br />

Definición 4 Llamaremos radio espectral ρ(A) <strong>de</strong> una matriz cuadrada A ∈M n×n a<br />

ρ(A) = max<br />

1in {|λ 1|, |λ 2 |, . . . , |λ n |}<br />

siendo {λ 1 ,λ 2 , . . . , λ n } el conjunto <strong>de</strong> los valores propios <strong>de</strong> A.<br />

Vamos a resaltar tres normas matriciales compatibles con las normas vectoriales comentadas<br />

anteriormente.<br />

• Norma dos (norma espectral):<br />

‖A‖ 2 = ρ(A T A) 1/2 ,<br />

que es una norma compatible (e inducida) por la norma Euclí<strong>de</strong>a vectorial<br />

• Norma infinito:<br />

{ m<br />

}<br />

∑<br />

‖A‖ ∞ = max |a ij | ,<br />

1in<br />

que es una norma compatible (e inducida) por la norma infinito vectorial<br />

j=1


• Norma uno:<br />

}<br />

{ n∑<br />

‖A‖ 1 = max<br />

1jm<br />

i=1<br />

|a ij |<br />

,<br />

que es una norma compatible (e inducida) por la norma uno vectorial.<br />

Ejemplo 5 Sea la matriz<br />

entonces<br />

⎛<br />

A = ⎝<br />

1 2 3 4<br />

2 1 7 1<br />

−2 −1 −7 0<br />

⎞<br />

⎠<br />

‖A‖ 2 = (max{0, 0.0709, 14.9011, 124.0280}) 1/2 = √ 124.0280 = 11.1368,<br />

‖A‖ ∞ = max{1 + 2 + 3 + 4, 2 + 1 + 7 + 1, 2 + 1 + 7 + 0} = 11,<br />

‖A‖ 1 = max{1+2+2, 2 + 1 + 1, 3+7+7, 4 + 1 + 0} = 17.<br />

Una vez tenemos <strong>de</strong>finidos los conceptos <strong>de</strong> normas matriciales y vectoriales po<strong>de</strong>mos<br />

estudiar elementalmente diversos conceptos relacionados con la estabilidad <strong>de</strong> la resolución<br />

numérica <strong>de</strong> <strong>sistemas</strong> <strong>de</strong> <strong>ecuaciones</strong> <strong>lineales</strong>. Así, dado el sistema <strong>de</strong> <strong>ecuaciones</strong> <strong>lineales</strong><br />

escrito en forma matricial<br />

Ax= b, A ∈M n×n , x, b ∈ R n , (1)<br />

con A invertible <strong>de</strong> modo que el sistema posea una única solución dada por A −1 b. Ahora<br />

nos po<strong>de</strong>mos plantear qué es lo que suce<strong>de</strong> cuando modificamos ligeramente el segundo<br />

miembro <strong>de</strong> la ecuación, es <strong>de</strong>cir, el vector b. Así nuestro nuevo sistema será<br />

A ̂x = ̂b. (2)<br />

La pregunta que nos hacemos es: ¿se parecen las dos soluciones x y ̂x<br />

‖x − ̂x‖ = ‖A −1 b − A −1̂b‖ = ‖A −1 (b − ̂b)‖ ‖A −1 ‖‖b − ̂b‖.<br />

Notemos que en las operaciones anteriores hemos supuesto que las normas matriciales y<br />

vectoriales son compatibles. Nos interesa saber no sólo la distancia entre las dos soluciones,<br />

sino también la diferencia relativa para darnos una i<strong>de</strong>a <strong>de</strong> la magnitud <strong>de</strong> la diferencia<br />

entre ambas, es <strong>de</strong>cir ‖x − ̂x‖/‖x‖. Operando<br />

‖x − ̂x‖<br />

‖x‖<br />

1<br />

‖x‖ ‖A−1 ‖‖b − ̂b‖ = 1<br />

‖b − ̂b‖<br />

‖x‖ ‖A−1 ‖‖b‖<br />

‖b‖<br />

= 1<br />

‖b − ̂b‖<br />

‖x‖ ‖A−1 ‖‖Ax‖<br />

‖b‖<br />

1<br />

‖b − ̂b‖<br />

‖x‖ ‖A−1 ‖‖A‖<br />

‖b‖ .<br />

El resultado anterior nos dice que la distancia relativa entre ambas soluciones es menor<br />

que la distancia relativa entre ambos segundos miembros multiplicado por un factor<br />

κ(A) =‖A −1 ‖‖A‖


que se <strong>de</strong>nomina número <strong>de</strong> condición <strong>de</strong> la matriz A. Este número nos indica si el<br />

sistema se comporta bien con respecto a pequeñas perturbaciones <strong>de</strong> los datos <strong>de</strong>l sistema<br />

lineal. Si κ(A) es gran<strong>de</strong> el sistema lineal está mal condicionado y cualquier método <strong>de</strong><br />

numérico <strong>de</strong> resolución nos pue<strong>de</strong> dar muchos problemas y respuestas totalmente erróneas,<br />

por contra, si κ(A) es pequeño entonces el sistema está bien condicionado y no planteará<br />

problemas <strong>de</strong> estabilidad a la hora <strong>de</strong> resolverlo.<br />

Ejemplo 6 Sea el sistema lineal Ax = b con<br />

A =<br />

⎛<br />

⎜<br />

⎝<br />

10 7 8 7<br />

7 5 6 5<br />

8 6 10 9<br />

7 5 9 10<br />

⎞<br />

⎟<br />

⎠ ,<br />

⎛<br />

b = ⎜<br />

⎝<br />

32<br />

23<br />

33<br />

31<br />

⎞<br />

⎟<br />

⎠<br />

cuya solución exacta es x = (1, 1, 1, 1). Si ahora en lugar <strong>de</strong> b usamos el vector ̂b =<br />

(32.1, 22.9, 33.1, 30.9) T entonces la solución es ̂x = (9.2, −12.6, 4.5, −1.1). Notemos que<br />

la perturbación en b verifica ‖b − ̂b‖ 1 /‖b‖ 1 =0.0034 y ‖b − ̂b‖ ∞ /‖b‖ ∞ =8.4034 · 10 −4<br />

mientras que ‖x − ̂x‖ 1 /‖x‖ 1 =6.85 y ‖x − ̂x‖ ∞ /‖x‖ ∞ = 13.6. Es <strong>de</strong>cir, un pequeño<br />

cambio en el segundo miembro ha dado lugar a una solución completamente diferente.<br />

Análogamente, si perturbamos la matriz A <strong>de</strong>l sistema<br />

à =<br />

⎛<br />

⎜<br />

⎝<br />

el resultado será ˜x =(−81, 137, −34, 22).<br />

10 7 8.1 7.2<br />

7.08 5.04 6 5<br />

8 5.98 9.89 9<br />

6.99 4.99 9 9.98<br />

Si calculamos el número <strong>de</strong> condición para la matriz A <strong>de</strong>l sistema tendremos<br />

κ(A) 1 = κ(A) ∞ = 4488.<br />

⎞<br />

⎟<br />

⎠ ,<br />

2.4 Estrategias <strong>de</strong> pivotaje: pivote parcial y total.<br />

Durante el proceso <strong>de</strong> resolución <strong>de</strong> un sistema lineal mediante el método <strong>de</strong> Gauss po<strong>de</strong>mos<br />

encontrarnos con algún pivote nulo, entonces hemos <strong>de</strong> permutar la fila correspondiente<br />

con otra cuyo pivote no sea nulo. Esta operación, la <strong>de</strong> permutar filas es interesante<br />

realizarla no sólo cuando se anula algún pivote sino también cuando el pivote es sensiblemente<br />

inferior en tamaño a los elementos situados por <strong>de</strong>bajo en la misma columna.<br />

Ejemplo 7 Sea el sistema lineal dado por<br />

10 −6 x +y =2<br />

x +y =0<br />

}


cuya solución es (x, y) = (−2000000/999999, 2000000/999999) ≈ (−2.000002, 2.000002).<br />

Si ahora planteamos el método <strong>de</strong> Gauss realizando las operaciones con 4 dígitos <strong>de</strong> precisión<br />

tendremos<br />

( 10<br />

−6<br />

1 2<br />

1 1 0<br />

)<br />

( )<br />

F 2 +(−10 6 ) F 1 −→F 2 10<br />

−6<br />

1 2<br />

−−−−−−−−−−−−−−−→<br />

0 1− 10 6 −2 · 10 6 .<br />

Como realizamos las operaciones con 4 dígitos tendremos que 1 − 10 6 ≈−10 6 y así el<br />

sistema se convierte en<br />

10 −6 x +y =2<br />

−10 6 y = −2 · 10 6 }<br />

cuya solución es (x, y) = (0, 2).<br />

El punto crucial ha sido escoger el pivote a (0)<br />

11 = 10 −6 , el cual es muy inferior en valor<br />

absoluto al elemento que se encuentra por <strong>de</strong>bajo <strong>de</strong> él.<br />

Este problema se pue<strong>de</strong> ilustrar geométricamente. El sistema inicial se pue<strong>de</strong> ver como la<br />

búsqueda <strong>de</strong>l punto <strong>de</strong> intersección entre dos rectas<br />

r 1 ≡ 10 −6 x +y =2<br />

r 2 ≡ x +y =0<br />

cuya gráfica aparece a la izquierda en la figura 2.<br />

}<br />

5<br />

2.0001<br />

'<br />

r 2<br />

y<br />

0<br />

r 1<br />

r 2<br />

r 1<br />

y<br />

2<br />

'<br />

-5<br />

5 0 5<br />

x<br />

1.9999<br />

5 0 5<br />

x<br />

Figure 1: Izquierda: sistema lineal original visto como la intersección <strong>de</strong> dos rectas. Derecha:<br />

sistema lineal <strong>de</strong>spués <strong>de</strong> aplicar Gauss con 4 dígitos <strong>de</strong> precisión visto como la intersección <strong>de</strong><br />

dos rectas.<br />

En la misma figura representamos a la <strong>de</strong>recha el sistema lineal resultante <strong>de</strong> aplicar el<br />

método <strong>de</strong> Gauss con 4 dígitos <strong>de</strong> precisión.<br />

}<br />

r 1 ′ ≡ 10 −6 x +y =2<br />

r 2 ′ ≡ 10 6 y =2· 10 6<br />

Notemos que a pesar <strong>de</strong> que en el sistema original el punto <strong>de</strong> corte es evi<strong>de</strong>nte no suce<strong>de</strong><br />

lo mismo en el transformado, don<strong>de</strong> ambas rectas son casi paralelas y por tanto es muy<br />

difícil precisar dón<strong>de</strong> se encuentra la intersección <strong>de</strong> ambas rectas.


En cambio, si escogemos como pivote el elemento <strong>de</strong> mayor valor absoluto <strong>de</strong>ntro <strong>de</strong> la<br />

primera columna y permutamos las filas tendremos<br />

( 10<br />

−6<br />

1 2<br />

1 1 0<br />

)<br />

( )<br />

(<br />

F 1 −→F<br />

−−−−−−−−→<br />

2 1 1 0 F 2 +(−10 −6 ) F 1 −→F 2 1 1 0<br />

−−−−−−−−−−−−−−−→<br />

10 −6 1 2<br />

0 1− 10 −6 2<br />

)<br />

.<br />

Y realizando las operaciones con 4 dígitos tendremos que 1 − 10 −6 ≈ 1 y así el sistema se<br />

convierte en<br />

}<br />

r 1 ′′ ≡ x +y =0<br />

r 2 ′′ ≡ y =2<br />

cuya solución es (x, y) = (−2, 2) que sí que es la solución <strong>de</strong>l sistema original con 4 dígitos.<br />

Gráficamente las dos rectas <strong>de</strong>l nuevo sistema lineal vendrán dadas por la figura . En<br />

dicha figura se pue<strong>de</strong> observar como ambas rectas <strong>de</strong>terminan <strong>de</strong> forma clara el punto <strong>de</strong><br />

corte.<br />

5<br />

5<br />

r 2<br />

''<br />

r 2<br />

y<br />

0<br />

r 1<br />

y<br />

0<br />

''<br />

r 1<br />

-5<br />

5 0 5<br />

x<br />

-5<br />

5 0 5<br />

x<br />

Figure 2: Izquierda: sistema lineal original visto como la intersección <strong>de</strong> dos rectas. Derecha:<br />

sistema lineal <strong>de</strong>spués permutar las filas y <strong>de</strong> aplicar Gauss con 4 dígitos <strong>de</strong> precisión visto como<br />

la intersección <strong>de</strong> dos rectas.<br />

Del ejemplo anterior po<strong>de</strong>mos <strong>de</strong>ducir que hay que permutar las filas no sólo cuando se<br />

anula el pivote correspondiente a (k−1)<br />

kk<br />

, sino cuando existe algún elemento a (k−1)<br />

jk<br />

con j > k<br />

tal que |a (k−1)<br />

kk<br />

| < |a (k−1)<br />

jk<br />

|. Es <strong>de</strong>cir, lo que vamos a buscar es el elemento a (k−1)<br />

jk<br />

con<br />

j k con mayor valor absoluto y permutaremos dicha fila con la k-ésima. De este modo<br />

tendremos que los multiplicadores en el método <strong>de</strong> Gauss una vez realizada la permutación<br />

verifican<br />

|l ik | = |a(k−1) ik<br />

|<br />

1, ∀i, k.<br />

|a (k−1)<br />

kk<br />

|<br />

Esta técnica se <strong>de</strong>nomina pivote parcial. De forma matricial lo que hay que introducir es<br />

una matriz elemental <strong>de</strong> permutación


⎛<br />

P ij =<br />

⎜<br />

⎝<br />

1<br />

. . .<br />

1<br />

0 1<br />

1 0<br />

1<br />

⎞<br />

⎟<br />

⎠<br />

−→ fila i-ésima<br />

−→ fila j-ésima<br />

.. .<br />

1<br />

De esta forma aparecerán entre las matrices M (k) <strong>de</strong> los multiplicadores <strong>de</strong> la eliminación<br />

Gaussiana matrices <strong>de</strong> permutación<br />

M (n−1) . . . M (j) P js M (j−1) . . . M (i) P ir M (i−1) . . . M (1) A = U.<br />

Notemos que P −1<br />

ij<br />

= P ij , así<br />

A =(M (1) ) −1 . . . P ir (M (i) ) −1 ... (M (j−1) ) −1 P js (M (j) ) −1 . . . (M (n−1) ) −1 U = M U.<br />

Notemos que si ha habido permutaciones la matriz M no es una matriz triangular inferior.<br />

Para tener una <strong>de</strong>scomposición LU realizamos en primer lugar las permutaciones y a<br />

continuación la <strong>de</strong>scomposición LU <strong>de</strong> la matriz permutada. Es <strong>de</strong>cir,<br />

P ir . . . P js A = PA=(˜M (1) ) −1 (˜M (2) ) −1 . . . (˜M (n−1) ) −1 Ũ = L Ũ.<br />

don<strong>de</strong> las matrices ˜M (i) hay que calcularlas partiendo <strong>de</strong> la nueva matriz original PA(se<br />

obtienen mediante permutaciones <strong>de</strong> filas <strong>de</strong> las matrices M (i) ). La ventaja es que ahora<br />

no habrá que realizar permutaciones <strong>de</strong> filas y tendremos una <strong>de</strong>scomposición LU.<br />

Ejemplo 8 Sea la matriz<br />

⎛<br />

⎜<br />

⎝<br />

1 2 3 4<br />

4 5 2 8<br />

2 5 3 1<br />

2 2 2 2<br />

⎞<br />

⎟<br />

⎠ .


Si realizamos el proceso <strong>de</strong> la eliminación Gaussiana obtendremos<br />

⎛<br />

⎜<br />

⎝<br />

1 2 3 4<br />

4 5 2 8<br />

2 5 3 1<br />

2 2 2 2<br />

⎛<br />

F 2 ←→F<br />

−−−−−→<br />

3<br />

⎜<br />

⎝<br />

⎞ ⎛<br />

⎟<br />

⎠ −−−−−→ F 1←→F 2<br />

⎜<br />

⎝<br />

4 5 2 8<br />

0 2.5 2 −3<br />

0 0.75 2.5 2<br />

0 −0.5 1 −2<br />

⎜<br />

⎝<br />

⎛<br />

F 4 −(1.4/1.9) F 3 →F 4<br />

−−−−−−−−−−−−−−→<br />

4 5 2 8<br />

1 2 3 4<br />

2 5 3 1<br />

2 2 2 2<br />

⎞<br />

⎟<br />

⎠<br />

⎞<br />

⎟<br />

⎠<br />

F 2 +(−1/4) F 1 → F 2<br />

F 3 +(−2/4) F 1 → F 3<br />

F 4 +(−2/4) F 1 → F 4<br />

−−−−−−−−−−−−−−→<br />

F 3 − (0.75/2.5) F 2 → F 3<br />

F 4 − (−0.5/2.5) F 2 → F 4<br />

−−−−−−−−−−−−−−−−−→<br />

4 5 2 8<br />

0 2.5 2 −3<br />

0 0 1.9 2.9<br />

0 0 0 −4.7368<br />

Que puesto <strong>de</strong> forma matricial será<br />

siendo<br />

M (1) =<br />

M (3) =<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

1 0 0 0<br />

−1/4 1 0 0<br />

−2/4 0 1 0<br />

−2/4 0 0 1<br />

⎞<br />

⎟<br />

⎠<br />

M (3) M (2) P 23 M (1) P 12 A = U<br />

⎞<br />

1 0 0 0<br />

0 1 0 0<br />

0 0 1 0<br />

0 0 −1.4/1.9 1<br />

⎟<br />

⎠ M (2) =<br />

⎞<br />

⎟<br />

⎠<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

U = ⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

4 5 2 8<br />

0 0.75 2.5 2<br />

0 2.5 2 −3<br />

0 −0.5 1 −2<br />

4 5 2 8<br />

0 2.5 2 −3<br />

0 0 1.9 2.9<br />

0 0 1.4 −2.6<br />

1 0 0 0<br />

0 1 0 0<br />

0 −0.75/2.5 1 0<br />

0 0.5/2.5 0 1<br />

⎞<br />

⎟<br />

⎠<br />

4 5 2 8<br />

0 2.5 2 −3<br />

0 0 1.9 2.9<br />

0 0 0 −4.7368<br />

Notemos que M (3) M (2) P 23 M (1) P 12 no es una matriz triangular inferior. En efecto<br />

⎛<br />

⎞<br />

0 1 0 0<br />

M (3) M (2) P 23 M (1) P 12 = ⎜ 0 −0.5 1 0<br />

⎟<br />

⎝ 1 −0.1 −0.3 0 ⎠ .<br />

−0.7368 −0.5263 0.4211 1<br />

En cambio, si realizamos la eliminación Gaussiana a la matriz P 23 P 12 A tendremos<br />

⎛<br />

⎞ ⎛<br />

⎞<br />

4 5 2 8 4 5 2 8<br />

P 23 P 12 A = ⎜ 2 5 3 1<br />

⎟<br />

⎝ 1 2 3 4 ⎠ −→ ⎜ 0 2.5 2 −3<br />

⎟<br />

⎝ 0 0.75 2.5 2 ⎠<br />

2 2 2 2 0 −0.5 1 −2<br />

⎛<br />

⎞ ⎛<br />

⎞<br />

4 5 2 8<br />

4 5 2 8<br />

−→ ⎜ 0 2.5 2 −3<br />

⎟<br />

⎝ 0 0 1.9 2.9 ⎠ −→ ⎜ 0 2.5 2 −3<br />

⎟<br />

⎝ 0 0 1.9 2.9 ⎠ = U<br />

0 0 1.4 −2.6 0 0 0 −4.7368<br />

⎞<br />

⎟<br />

⎠<br />

.<br />

⎞<br />

⎟<br />

⎠<br />

⎞<br />

⎟<br />

⎠<br />

.


A continuación <strong>de</strong>tallamos el algoritmo <strong>de</strong> la eliminación Gaussiana con pivote parcial:<br />

Eliminación Gaussiana con pivote parcial<br />

Para k =1, . . . , n − 1<br />

Encontrar j k tal que |a j k| = max kln {|a lk |}<br />

Si a jk =0entonces la matriz es singular<br />

FIN<br />

en caso contrario permutar fila k-ésima con la j-ésima<br />

a ks ←→ a js , s = k, . . . , n,<br />

b k ←→ b j .<br />

fin si<br />

Para i = k +1, . . . , n<br />

l ik = a ik /a kk<br />

Para r = k +1, . . . , n<br />

a ir = a ir − l ik a kr<br />

fin para<br />

b i = b i − l ik b k<br />

fin para<br />

fin para<br />

FIN

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!