Accueil > Forum > > > > matrice au secour.......!!!!
matrice au secour.......!!!!
vendredi 13 mai 2011 à 05:04:49 |
matrice au secour.......!!!!

badsha
|
Bonjour a tous,
j'ai une fonction dsvd qui a en entrée matrice a, dimension m et n et elle retourne w et v
int dsvd(float **a, int m, int n, float *w, float **v)
donc je veux faire un test en creeant une matrice a=[3][3]
mais je ne sais si je dois stocker la matrice a dans un pointeur double **a et comment faire? j'ai fais plusieurs test et ca me fait erreur de segmentation (j'ai de la fumée ki sort par la tete)
2eme question quand je fai appelle a la fonction dsvd je dois ecrire normalement:
dsvd( **a, m, n, *w, **v)
merci par avance
|
|
vendredi 13 mai 2011 à 08:34:38 |
Re : matrice au secour.......!!!!

louis14
|
Bonjour,
déjà pas de double puisque la fonction attend un float.
Ensuite il faut aller voir dans ta fonction ( si c'est toi qu'il l'a écrit comment est utilisée la matrice. Sinon quelle bibliothèque tu utilises pour ce calcul LAPACK?
d'après la défintion ta matrice est un tableau de float donc un pointeur de float, donc après ta définition ma_matrice[3][3] tu appelles la fonction avec &ma_matrice.
Bon test
louis
|
|
samedi 14 mai 2011 à 07:01:48 |
Re : matrice au secour.......!!!!
|
samedi 14 mai 2011 à 07:13:15 |
Re : matrice au secour.......!!!!
|
samedi 14 mai 2011 à 07:20:51 |
Re : matrice au secour.......!!!!
|
samedi 14 mai 2011 à 07:36:37 |
Re : matrice au secour.......!!!!
|
samedi 14 mai 2011 à 12:32:43 |
Re : matrice au secour.......!!!!

badsha
|
voila le programme il fait la svd(decomposition des valeurs singuliere)
il manque le "main" pour faire appel à dsvd
je vous remerci.
/*
* svdcomp - SVD decomposition routine.
* Takes an mxn matrix a and decomposes it into udv, where u,v are
* left and right orthogonal transformation matrices, and d is a
* diagonal matrix of singular values.
*
* This routine is adapted from svdecomp.c in XLISP-STAT 2.1 which is
* code from Numerical Recipes adapted by Luke Tierney and David Betz.
*
* Input to dsvd is as follows:
* a = mxn matrix to be decomposed, gets overwritten with u
* m = row dimension of a
* n = column dimension of a
* w = returns the vector of singular values of a
* v = returns the right orthogonal transformation matrix
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "defs_and_types.h"
static double PYTHAG(double a, double b)
{
double at = fabs(a), bt = fabs(b), ct, result;
if (at > bt) { ct = bt / at; result = at * sqrt(1.0 + ct * ct); }
else if (bt > 0.0) { ct = at / bt; result = bt * sqrt(1.0 + ct * ct); }
else result = 0.0;
return(result);
}
int dsvd(float **a, int m, int n, float *w, float **v)
{
int flag, i, its, j, jj, k, l, nm;
double c, f, h, s, x, y, z;
double anorm = 0.0, g = 0.0, scale = 0.0;
double *rv1;
if (m < n)
{
fprintf(stderr, "#rows must be > #cols \n");
return(0);
}
rv1 = (double *)malloc((unsigned int) n*sizeof(double));
/* Householder reduction to bidiagonal form */
for (i = 0; i < n; i++)
{
/* left-hand reduction */
l = i + 1;
rv1[i] = scale * g;
g = s = scale = 0.0;
if (i < m)
{
for (k = i; k < m; k++)
scale += fabs((double)a[k][i]);
if (scale)
{
for (k = i; k < m; k++)
{
a[k][i] = (float)((double)a[k][i]/scale);
s += ((double)a[k][i] * (double)a[k][i]);
}
f = (double)a[i][i];
g = -SIGN(sqrt(s), f);
h = f * g - s;
a[i][i] = (float)(f - g);
if (i != n - 1)
{
for (j = l; j < n; j++)
{
for (s = 0.0, k = i; k < m; k++)
s += ((double)a[k][i] * (double)a[k][j]);
f = s / h;
for (k = i; k < m; k++)
a[k][j] += (float)(f * (double)a[k][i]);
}
}
for (k = i; k < m; k++)
a[k][i] = (float)((double)a[k][i]*scale);
}
}
w[i] = (float)(scale * g);
/* right-hand reduction */
g = s = scale = 0.0;
if (i < m && i != n - 1)
{
for (k = l; k < n; k++)
scale += fabs((double)a[i][k]);
if (scale)
{
for (k = l; k < n; k++)
{
a[i][k] = (float)((double)a[i][k]/scale);
s += ((double)a[i][k] * (double)a[i][k]);
}
f = (double)a[i][l];
g = -SIGN(sqrt(s), f);
h = f * g - s;
a[i][l] = (float)(f - g);
for (k = l; k < n; k++)
rv1[k] = (double)a[i][k] / h;
if (i != m - 1)
{
for (j = l; j < m; j++)
{
for (s = 0.0, k = l; k < n; k++)
s += ((double)a[j][k] * (double)a[i][k]);
for (k = l; k < n; k++)
a[j][k] += (float)(s * rv1[k]);
}
}
for (k = l; k < n; k++)
a[i][k] = (float)((double)a[i][k]*scale);
}
}
anorm = MAX(anorm, (fabs((double)w[i]) + fabs(rv1[i])));
}
/* accumulate the right-hand transformation */
for (i = n - 1; i >= 0; i--)
{
if (i < n - 1)
{
if (g)
{
for (j = l; j < n; j++)
v[j][i] = (float)(((double)a[i][j] / (double)a[i][l]) / g);
/* double division to avoid underflow */
for (j = l; j < n; j++)
{
for (s = 0.0, k = l; k < n; k++)
s += ((double)a[i][k] * (double)v[k][j]);
for (k = l; k < n; k++)
v[k][j] += (float)(s * (double)v[k][i]);
}
}
for (j = l; j < n; j++)
v[i][j] = v[j][i] = 0.0;
}
v[i][i] = 1.0;
g = rv1[i];
l = i;
}
/* accumulate the left-hand transformation */
for (i = n - 1; i >= 0; i--)
{
l = i + 1;
g = (double)w[i];
if (i < n - 1)
for (j = l; j < n; j++)
a[i][j] = 0.0;
if (g)
{
g = 1.0 / g;
if (i != n - 1)
{
for (j = l; j < n; j++)
{
for (s = 0.0, k = l; k < m; k++)
s += ((double)a[k][i] * (double)a[k][j]);
f = (s / (double)a[i][i]) * g;
for (k = i; k < m; k++)
a[k][j] += (float)(f * (double)a[k][i]);
}
}
for (j = i; j < m; j++)
a[j][i] = (float)((double)a[j][i]*g);
}
else
{
for (j = i; j < m; j++)
a[j][i] = 0.0;
}
++a[i][i];
}
/* diagonalize the bidiagonal form */
for (k = n - 1; k >= 0; k--)
{ /* loop over singular values */
for (its = 0; its < 30; its++)
{ /* loop over allowed iterations */
flag = 1;
for (l = k; l >= 0; l--)
{ /* test for splitting */
nm = l - 1;
if (fabs(rv1[l]) + anorm == anorm)
{
flag = 0;
break;
}
if (fabs((double)w[nm]) + anorm == anorm)
break;
}
if (flag)
{
c = 0.0;
s = 1.0;
for (i = l; i <= k; i++)
{
f = s * rv1[i];
if (fabs(f) + anorm != anorm)
{
g = (double)w[i];
h = PYTHAG(f, g);
w[i] = (float)h;
h = 1.0 / h;
c = g * h;
s = (- f * h);
for (j = 0; j < m; j++)
{
y = (double)a[j][nm];
z = (double)a[j][i];
a[j][nm] = (float)(y * c + z * s);
a[j][i] = (float)(z * c - y * s);
}
}
}
}
z = (double)w[k];
if (l == k)
{ /* convergence */
if (z < 0.0)
{ /* make singular value nonnegative */
w[k] = (float)(-z);
for (j = 0; j < n; j++)
v[j][k] = (-v[j][k]);
}
break;
}
if (its >= 30) {
free((void*) rv1);
fprintf(stderr, "No convergence after 30,000! iterations \n");
return(0);
}
/* shift from bottom 2 x 2 minor */
x = (double)w[l];
nm = k - 1;
y = (double)w[nm];
g = rv1[nm];
h = rv1[k];
f = ((y - z) * (y + z) + (g - h) * (g + h)) / (2.0 * h * y);
g = PYTHAG(f, 1.0);
f = ((x - z) * (x + z) + h * ((y / (f + SIGN(g, f))) - h)) / x;
/* next QR transformation */
c = s = 1.0;
for (j = l; j <= nm; j++)
{
i = j + 1;
g = rv1[i];
y = (double)w[i];
h = s * g;
g = c * g;
z = PYTHAG(f, h);
rv1[j] = z;
c = f / z;
s = h / z;
f = x * c + g * s;
g = g * c - x * s;
h = y * s;
y = y * c;
for (jj = 0; jj < n; jj++)
{
x = (double)v[jj][j];
z = (double)v[jj][i];
v[jj][j] = (float)(x * c + z * s);
v[jj][i] = (float)(z * c - x * s);
}
z = PYTHAG(f, h);
w[j] = (float)z;
if (z)
{
z = 1.0 / z;
c = f * z;
s = h * z;
}
f = (c * g) + (s * y);
x = (c * y) - (s * g);
for (jj = 0; jj < m; jj++)
{
y = (double)a[jj][j];
z = (double)a[jj][i];
a[jj][j] = (float)(y * c + z * s);
a[jj][i] = (float)(z * c - y * s);
}
}
rv1[l] = 0.0;
rv1[k] = f;
w[k] = (float)x;
}
}
free((void*) rv1);
return(1);
}
|
|
samedi 14 mai 2011 à 12:36:03 |
Re : matrice au secour.......!!!!

badsha
|
pour #include "defs_and_types.h" est telechargable sur:
http://www.google.fr/search?hl=fr&source=hp&biw=1003&bih=573&q=defs_and_types.h&aq=f&aqi=&aql=&oq=
|
|
samedi 14 mai 2011 à 12:38:32 |
Re : matrice au secour.......!!!!

badsha
|
au debut du prog ya des explication sur a,m,n,n,v et w
merci bcp
|
|
Cette discussion est classée dans : int, secour, matrice, float, dsvd
Répondre à ce message
Sujets en rapport avec ce message
fonction et matrice [ par herve_blondel ]
bonjour a tous.je suis un debutant en C++ et j'aimerais ecrire un fonction qui prend en argument une matrice et me retourne une matrice(je sais ce que
Surcharge des opérateurs [ par karamellatti ]
salut tout le monde,je sollicite votre aide pour la résolution d'un ptit problem concernant un mini-programme de calcul matriciel..voici le programme
xilinx [ par mourdad ]
salut j'ai un code c++ et j'aimerias le transformer en xilinx quelqu'un peut m'aider???????? je sais pas comment transformer le new :'( voici le code
Fonction pour calculer l'intersection de deux cercles [ par Djoi ]
salut à tous J'ai fait une fonction qui devrait me renvoyer les coordonnées de l'intersection de deux cercles mais celle-ci ne marche pas. Dites moi
calculs tableau [ par 3463 ]
Salut à tous !! J'ai besoin de votre aide [^^happy13] Voici mon programme : # include # include # include # include # include # include # incl
Tableau C [ par 3463 ]
Salut à tous j'ai vraiment besoin de votre aide !! [code=cpp] # include # include # include # include # include # include # include using nam
classe matrice [ par monphp ]
slt tt le monde, je suis entrain de réaliser un projet concernant le polymorphisme des matrices et des vecteurs. jé realisé alors une matricecaree qui
matrice et vecteur [ par memoireph ]
salut tous le monde je sollicite votre aide sur un problème voilà,j'ai deux classe vecteur et Matrice que je doit faire avec des opération élémentai
Multiplication matrice [Matrice c++] [ par joshua69 ]
Bonjour, je dois réaliser un algorithme utilisant la méthode de Cholesky pour la décomposition en matrice L.Lt. voici mon code: #include #include
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|