[Matematica pura, fisica, chimica, ecc.: problemi di allenamento del cervello non legati in alcun modo al commercio - pagina 561

 

Sto dormendo, sto dormendo.

 
Sembra esserci una procedura standard per costruire un insieme ortonormale. Che sia lagrangiano o altro. Va bene, se avete risolto il problema e lo avete dimostrato, allora cosa c'è da dire...
 
Mathemat:
Sembra esserci una procedura standard per costruire un insieme ortonormale. O di Lagrange o di qualcos'altro. Va bene, se avete risolto il problema e lo avete dimostrato, allora cosa c'è da dire...

No no no!!! Se ne hai uno, vai avanti e pubblicalo! Molto interessante, non ne ho trovato uno.

Interessato in modi diversi, in quanto può influenzare la velocità di risoluzione del problema obiettivo.

 
tara:

Ha senso. Con che cosa faremo soldi?

Forex!
 
MetaDriver: Nenenyenne!!! Se c'è, vai avanti e pubblicalo! È molto interessante, l'ho cercato e non l'ho trovato.

Beh, non ho ancora approfondito molto. Il processo di Gram-Schmidt, è in algebra lineare. O forme quadratiche.

Per quanto ho capito, è sufficiente per iniziare e non è il primo passo. Anche lì c'è una prova e interpolazioni geometriche.

Ho il sospetto che ci dovrebbe essere qualcosa di nativo per questo processo nelle funzioni OpenCL.

 

Il metodo di ortogonalizzazione seriale può essere visto nel pezzo di codice qui sotto. Il gradiente è un vettore casuale da cui vengono rimosse le proiezioni sui vettori di base. La base si trova in un array unidimensionale Sarray . Tutti gli array sono dichiarati come globali. Il processo è, credo, chiaro dai commenti.

//+------------------------------------------------------------------+
//|  в массиве Sarray записан ортонормированный базис из k векторов  |
//|  размерности NeuroCellDim каждый                                 |
//|  строится ортогональная проекция вектора Gradient на базис       |
//|  в случае успеха проекция нормируется                            |
//|  и добавляется в базис, если позволяет признак записи: write > 0 |
//+------------------------------------------------------------------+
int OrthogonalProjection(int k, int write)
{
   int   i, j, err = 0, index = 0;
   double Alpha;
   if (k > 0) // если k>0, то базис не пуст
      for (i = 0; i < k; i++)
      {
         for (j = 0; j < NeuroCellDim; j++)
         {
            InputX[j] = Sarray[index]; // извлекаем i-й орт в InputX
            index++;
         }
         Alpha = ScalarProduct( Gradient, InputX); // скалярное произведение, cos(Gradient, InputX)
         if (Alpha > 1.0 - delta)   // если cos() = 1
         {
            err = -1; // считаем, что такой вектор линейно зависим от векторов базиса
            break;
         }
//       Gradient := Gradient - Alpha * InputX     с нормировкой       
         AddVektors( Gradient, InputX, -Alpha); // орт к базису из i+1 векторов
      }

   if (err >= 0 && write > 0) // если существует проекция и позволяет признак записи
      for (j = 0; j < NeuroCellDim; j++)  // записываем новый орт в базис
      {
         Sarray[index] = Gradient[j]; 
         index++;
      }      

   return(err);
}
//+--- OrthogonalProjection End -------------------------------------+
 

Gente, datemi un suggerimento. Mi sono perso. Ecco il problema: c'è un campione di dati che è molto ben approssimato da una regressione lineare (variabile indipendente - numero di riferimento).

Il grafico mostra un'equazione di regressione lineare. Voglio trasformare i dati del campione in modo che siano invarianti rispetto ai conteggi. Ho provato a selezionare un termine libero dell'equazione con operazioni aritmetiche e a trasformare i dati del campione in questo valore. Ma all'inizio è apparso un tale picco al livello di 0,7, 0,46 ecc. che va verso l'asintoto del livello necessario. Da dove viene questo picco all'inizio? Si può eliminare cambiando la formula?

Excel è allegato per ogni evenienza.

File:
 
alexeymosc:

Gente, datemi un suggerimento. Mi sono perso. Ecco il problema: c'è un campione di dati che è molto ben approssimato da una regressione lineare (variabile indipendente - numero di riferimento).

Il grafico mostra un'equazione di regressione lineare. Voglio trasformare i dati del campione in modo che siano invarianti rispetto ai conteggi. Ho provato a selezionare un termine libero dell'equazione con operazioni aritmetiche e a trasformare i dati del campione in questo valore. Ma all'inizio è apparso un tale picco al livello di 0,7, 0,46 ecc. che va verso l'asintoto del livello necessario. Da dove viene questo picco all'inizio? Si può eliminare cambiando la formula?

Excel è allegato per ogni evenienza.

OK, se non ci sono altre soluzioni, ho cercato una soluzione per trovare il valore del termine libero dell'equazione, minimizzando R^2 già dalla nuova serie (derivata dall'originale e che dovrebbe essere invariante), cioè l'ho resa quasi lineare. Apparentemente il problema è che i dati originali non sono perfettamente lineari...
 
alexeymosc:

Gente, datemi un suggerimento. Mi sono perso. Il problema è questo: c'è un campione di dati che è molto ben approssimato da una regressione lineare (la variabile indipendente è il numero di riferimento).

Il grafico mostra un'equazione di regressione lineare. Voglio trasformare i dati del campione in modo che siano invarianti rispetto ai conteggi. Ho provato a selezionare un termine libero dell'equazione con operazioni aritmetiche e a trasformare i dati del campione in questo valore. Ma all'inizio è apparso un tale picco al livello di 0,7, 0,46 ecc. che va verso l'asintoto del livello necessario. Da dove viene questo picco all'inizio? Si può eliminare cambiando la formula?

Excel è allegato per ogni evenienza.

Beh, significa solo una cosa - l'errore relativo di approssimazione è tanto più grande, quanto più piccolo è X (e Y), ma cosa ti aspetti, dividendo un piccolo numero per un altro piccolo numero? Provate a cambiare la variabile X' = X+100 e tracciate una nuova serie nell'intervallo da 100 a 400, non da 0 a 300 - il grafico sarà molto più dritto, ma non cambierà la questione
 

1.

Mislaid 10.03.2012 05:46Il metodo di ortogonalizzazione coerente può essere visto nel pezzo di codice qui sotto. Il gradiente è un vettore casuale

Matematica:

1. Beh, non mi sono ancora messo in gioco. Il processo di Gram-Schmidt, lo insegnano in algebra lineare. O forme quadratiche.

Per quanto ho capito, non è sufficiente iniziare con il primo passo. Anche lì c'è una prova e interpolazioni geometriche.

2. Ho l'impressione che ci dovrebbe essere qualcosa di nativo per questo processo nelle funzioni OpenCL.

1. 1. A Mislaid, Mathemat,

Sia qui che là è lo stesso ovunque - lo stesso processo che mi sono ingegnato ieri. Sottrazione consecutiva di proiezioni vettoriali su orto precedenti.

Sono giorni come questo che mi fanno sentire un classico.... :-))

--

A proposito, ho già fatto e debuggato il mio script di prova ieri sera. Ho anche trovato un bug nell'ottimizzatore e l'ho inviato a servicedesk. Ho aggirato il bug cambiando leggermente il codice. Quindi tutto funziona. Affidabile e veloce, proprio come mi serviva.

2. Ce n'è davvero uno in OpenZL, ma solo per il caso tridimensionale. [cross(a, b); costruisce un vettore ortogonale a due dati] Mi serve per una dimensione arbitraria.