<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Scilab ( https://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2008 - INRIA
 *
 * Copyright (C) 2012 - 2016 - Scilab Enterprises
 *
 * This file is hereby licensed under the terms of the GNU GPL v2.0,
 * pursuant to article 5.3.4 of the CeCILL v.2.1.
 * This file was originally licensed under the terms of the CeCILL v2.1,
 * and continues to be available under such terms.
 * For more information, see the COPYING file which you should have received
 * along with this program.
 *
 -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="qr" xml:lang="pt">
    <refnamediv>
        <refname>qr</refname>
        <refpurpose>QR decomposição</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title> Seqüência de Chamamento </title>
        <synopsis>[Q,R]=qr(X [,"e"])
            [Q,R,E]=qr(X [,"e"])
            [Q,R,rk,E]=qr(X [,tol])
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Parâmetros </title>
        <variablelist>
            <varlistentry>
                <term>X</term>
                <listitem>
                    <para>matriz de reais ou complexos</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>tol</term>
                <listitem>
                    <para>número real não-negativo</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>Q</term>
                <listitem>
                    <para>matriz quadrada ortogonal ou unitária</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>R</term>
                <listitem>
                    <para>
                        matriz com as mesmas dimensões de <literal>X</literal>
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>E</term>
                <listitem>
                    <para>matriz de permutação </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>rk</term>
                <listitem>
                    <para>
                        inteiro (posto QR de <literal>X</literal>)
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Descrição</title>
        <variablelist>
            <varlistentry>
                <term>[Q,R] = qr(X)</term>
                <listitem>
                    <para>
                        pproduz uma matriz triangular superior <literal>R</literal> de
                        mesma dimensão que <literal>X</literal> e uma matriz ortogonal
                        (unitária no caso de matriz de complexos) <literal>Q</literal> tais
                        que <literal>X = Q*R</literal>. <literal>[Q,R] = qr(X,"e")</literal>
                        produz um "economia de tamanho": Se <literal>X</literal> é m-por-n
                        com m &gt; n, então, apenas as primeiras n colunas de
                        <literal>Q</literal> são computadas assim como as primeiras n linhas
                        de <literal>R</literal>.
                    </para>
                    <para>
                        De <literal>Q*R = X</literal> , segue que a k-ésima coluna da
                        matriz <literal>X</literal>, é expressa como combinação linear das k
                        primeiras colunas de <literal>Q</literal> (com coeficientes
                        <literal> R(1,k), ..., R(k,k) </literal>). As k primeiras colunas de
                        <literal>Q</literal> formam uma base ortogonal para o subespaço
                        gerado pelas k priemiras colunas de <literal>X</literal>. Se a
                        coluna <literal>k</literal> de <literal>X</literal> (i.e.
                        <literal>X(:,k)</literal> ) é uma combinação linear das
                        <literal>p</literal> primeiras colunas de <literal>X</literal>,
                        então, as entradas de <literal>R(p+1,k), ..., R(k,k)</literal> são
                        zeros. Neste caso, <literal>R</literal> é trapezoidal superior. Se
                        <literal>X</literal> tem posto <literal>rk</literal>, as linhas
                        <literal>R(rk+1,:), R(rk+2,:), ...</literal> são zeros.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>[Q,R,E] = qr(X)</term>
                <listitem>
                    <para>produz uma matriz de permutação (de colunas)
                        <literal>E</literal>, uma matriz triangular superior
                        <literal>R</literal> com elementos na diagonal decrescentes e uma
                        matriz ortogonal (ou unitaria) <literal>Q</literal> tais que
                        <literal>X*E = Q*R</literal>. Se <literal>rk</literal> é o posto de
                        <literal>X</literal>, as <literal>rk</literal> primeiras entradas ao
                        longo da diagonal de <literal>R</literal>, i.e. <literal>R(1,1),
                            R(2,2), ..., R(rk,rk)
                        </literal>
                        são todas diferentes de zero.
                        <literal>[Q,R,E] = qr(X,"e")</literal> produz uma "economia de
                        tamanho": Se <literal>X</literal> ié m-por-n com m &gt; n, então,
                        apenas as n primeiras colunas de <literal>Q</literal> são computadas
                        tanto quanto as n priemiras linhas de <literal>R</literal>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>[Q,R,rk,E] = qr(X ,tol)</term>
                <listitem>
                    <para>
                        retorna <literal>rk</literal> = estimativa do posto de
                        <literal>X</literal> i.e. <literal>rk</literal> é o número elementos
                        da diagonal de <literal>R</literal> que são maiores que um dado
                        limiar <literal>tol</literal>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>[Q,R,rk,E] = qr(X)</term>
                <listitem>
                    <para>
                        retorna <literal>rk</literal> = estimativa do posto de
                        <literal>X</literal> i.e. <literal>rk</literal> é o número de
                        elementos da diagonal de <literal>R</literal> que são maiores que
                        <literal>tol=R(1,1)*%eps*max(size(R))</literal>. Veja
                        <literal>rankqr</literal> para uma fatoração QR que revela o posto
                        usando o número de condicionamento de <literal>R</literal>.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Exemplos</title>
        <programlisting role="example"><![CDATA[
// fatoração QR, caso genérico
// X é alta (posto cheio)
X=rand(5,2);[Q,R]=qr(X); [Q'*X R]

//X é gorda (posto cheio)
X=rand(2,3);[Q,R]=qr(X); [Q'*X R]

//coluna 4 de X é uma combinação linear das colunas 1 e 2:
X=rand(8,5);X(:,4)=X(:,1)+X(:,2); [Q,R]=qr(X); R, R(:,4)

//X tem posto 2, linhas 3 a $ de R são zero:
X=rand(8,2)*rand(2,5);[Q,R]=qr(X); R

//Avaliando o posto rk: pivotação por colunas ==&gt; rk primeiras
//As entradas diagonais de R são não-nulas:
A=rand(5,2)*rand(2,5);
[Q,R,rk,E] = qr(A,1.d-10);
norm(Q'*A-R)
svd([A,Q(:,1:rk)])    //span(A) =span(Q(:,1:rk)) (span="gerado")
 ]]></programlisting>
    </refsection>
    <refsection>
        <title> Ver Também</title>
        <simplelist type="inline">
            <member>
                <link linkend="rankqr">rankqr</link>
            </member>
            <member>
                <link linkend="rank">rank</link>
            </member>
            <member>
                <link linkend="svd">svd</link>
            </member>
            <member>
                <link linkend="rowcomp">rowcomp</link>
            </member>
            <member>
                <link linkend="colcomp">colcomp</link>
            </member>
        </simplelist>
    </refsection>
    <refsection>
        <title> Funções Usadas</title>
        <para>A decomposição qr é baseada nas rotinas de Lapack DGEQRF, DGEQPF,
            DORGQR para as matrizes de reais ZGEQRF, ZGEQPF, ZORGQR para as matrizes
            de complexos.
        </para>
    </refsection>
</refentry>
