Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC
Abbiamo provato la Gigabyte Radeon RX 9070 GRE Gaming OC, nuova proposta RDNA 4 che si inserisce tra GeForce RTX 5060 Ti e RTX 5070. Prestazioni solide in rasterizzazione e ray tracing, frequenze elevate grazie all'overclock di fabbrica e raffreddamento efficace: ecco come si comporta nei nostri test.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-03-2004, 11:40   #1
Violator
Senior Member
 
L'Avatar di Violator
 
Iscritto dal: Aug 1999
Messaggi: 179
Aiutone in C

Devo trovare gli autovalori di una matrice 3x3 simmetrica utilizzando il linguaggio C, ho preso i seguenti 2 programmi dal sito "numerical recipies". Solamente che non so come usarli...
... so programmare in Matlab, ma non in C.

1)Vorrei sapere come si fa a definire una matrice, del tipo:
a=(a11,a12,a13;a21,a22,a23;a31,a32,a33).

2)Ho scaricato il software MinGWStudio... è semplice da usare?

3) I seguenti programmi possono essere accorpati in uno solo semplicemente scrivendoli uno di seguito all'altro?

GRAZIE A TUTTI ANTICIPATAMENTE.


Questo è il programma che rende la matrice tridiagonale:

#include <math.h>
void tred2(float **a, int n, float d[], float e[])
Householder reduction of a real, symmetric matrix a[1..n][1..n]. On output, a is replaced
by the orthogonal matrix Q e.ecting the transformation. d[1..n] returns the diagonal elements
of the tridiagonal matrix, and e[1..n] the o.-diagonal elements, with e[1]=0. Several
statements, as noted in comments, can be omitted if only eigenvalues are to be found, in which
case a contains no useful information on output. Otherwise they are to be included.
{
int l,k,j,i;
float scale,hh,h,g,f;
for (i=n;i>=2;i--) {
l=i-1;
h=scale=0.0;
if (l > 1) {
for (k=1;k<=l;k++)
scale += fabs(a[i][k]);
if (scale == 0.0)
e[i]=a[i][l];
else {
for (k=1;k<=l;k++) {
a[i][k] /= scale;
h += a[i][k]*a[i][k];
}
f=a[i][l];
g=(f >= 0.0 ? -sqrt(h) : sqrt(h));
e[i]=scale*g;
h -= f*g;
a[i][l]=f-g;
f=0.0;
for (j=1;j<=l;j++) {
/* Next statement can be omitted if eigenvectors not wanted */
a[j][i]=a[i][j]/h;
g=0.0;
for (k=1;k<=j;k++)
g += a[j][k]*a[i][k];
for (k=j+1;k<=l;k++)
g += a[k][j]*a[i][k];
e[j]=g/h;
f += e[j]*a[i][j];
}
hh=f/(h+h);
for (j=1;j<=l;j++) {
f=a[i][j];
e[j]=g=e[j]-hh*f;
for (k=1;k<=j;k++)
a[j][k] -= (f*e[k]+g*a[i][k]);
}
}
} else
e[i]=a[i][l];
d[i]=h;
}
/* Next statement can be omitted if eigenvectors not wanted */
d[1]=0.0;
e[1]=0.0;
/* Contents of this loop can be omitted if eigenvectors not
wanted except for statement d[i]=a[i][i]; */
for (i=1;i<=n;i++) {
l=i-1;
if (d[i]) { This block skipped when i=1.
for (j=1;j<=l;j++) {
g=0.0;
for (k=1;k<=l;k++)
g += a[i][k]*a[k][j];
for (k=1;k<=l;k++)
a[k][j] -= g*a[k][i];
}
}
d[i]=a[i][i];
a[i][i]=1.0;
for (j=1;j<=l;j++) a[j][i]=a[i][j]=0.0;
}
}

Questo è il programma che ne trova gli autovalori:

#include <math.h>
#include "nrutil.h"
void tqli(float d[], float e[], int n, float **z)
QL algorithm with implicit shifts, to determine the eigenvalues and eigenvectors of a real, symmetric,
tridiagonal matrix, or of a real, symmetric matrix previously reduced by tred2 §11.2. On
input, d[1..n] contains the diagonal elements of the tridiagonal matrix. On output, it returns
the eigenvalues. The vector e[1..n] inputs the subdiagonal elements of the tridiagonal matrix,
with e[1] arbitrary. On output e is destroyed. When finding only the eigenvalues, several lines
may be omitted, as noted in the comments. If the eigenvectors of a tridiagonal matrix are desired,
the matrix z[1..n][1..n] is input as the identity matrix. If the eigenvectors of a matrix
that has been reduced by tred2 are required, then z is input as the matrix output by tred2.
In either case, the kth column of z returns the normalized eigenvector corresponding to d[k].
{
float pythag(float a, float b);
int m,l,iter,i,k;
float s,r,p,g,f,dd,c,b;
for (i=2;i<=n;i++) e[i-1]=e[i];
of e. e[n]=0.0;
for (l=1;l<=n;l++) {
iter=0;
do {
for (m=l;m<=n-1;m++) {
dd=fabs(d[m])+fabs(d[m+1]);
if ((float)(fabs(e[m])+dd) == dd) break;
}
if (m != l) {
if (iter++ == 30) nrerror("Too many iterations in tqli");
g=(d[l+1]-d[l])/(2.0*e[l]);
r=pythag(g,1.0);
g=d[m]-d[l]+e[l]/(g+SIGN(r,g)); This is dm - ks.
s=c=1.0;
p=0.0;
for (i=m-1;i>=l;i--) {
f=s*e[i];
b=c*e[i];
e[i+1]=(r=pythag(f,g));
if (r == 0.0) {
d[i+1] -= p;
e[m]=0.0;
break;
}
s=f/r;
c=g/r;
g=d[i+1]-p;
r=(d[i]-g)*s+2.0*c*b;
d[i+1]=g+(p=s*r);
g=c*r-b;
/* Next loop can be omitted if eigenvectors not wanted*/
for (k=1;k<=n;k++) {
f=z[k][i+1];
z[k][i+1]=s*z[k][i]+c*f;
z[k][i]=c*z[k][i]-s*f;
}
}
if (r == 0.0 && i >= l) continue;
d[l] -= p;
e[l]=g;
e[m]=0.0;
}
} while (m != l);
}
}
Violator è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2004, 13:06   #2
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
Allora, procediamo con ordine:
1) La matrice A, 3x3, la puoi definire così (ho usato float per esempio):

float A [3][3];
short i,j;

e per referenziare l'elemento aij farai:
A [i][j] = ...

2) MiniGWStudio non l'ho mai usato, ma credo che sia abbastnza semplice (da quel che si sente in giro...)

3) Puoi accorpare tutto nello stesso modulo (*.c) avendo cura di:
a) eliminare la definizione di #include<> ridondanti (math.h).
b) devi crearti una funzione main(), che rappresenti l'entry-point del tuo programma e che poi, a sua volta, invochi le due funzioni che hai listato.

Bye
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2004, 13:20   #3
Violator
Senior Member
 
L'Avatar di Violator
 
Iscritto dal: Aug 1999
Messaggi: 179
Grazie fpucci, G R A Z I E.

Ovviamente non ho capito bene:

1) Per definire la matrice così va bene:
float A [3][3];
short i,j;
A [1][1] = 1;
A [1][2] = 2;
A [1][3] = 3;
A [2][1] = 4;
A [2][2] = 5;
A [2][3] = 6;
A [3][1] = 7;
A [3][2] = 8;
A [3][3] = 9;

3a) Per eliminare gli include ridondanti basta che, ad esempio, elimino quelli del secondo programma?

3b) Non ho capito cosa devo fare....


Comunque GRAZIE ancora!
Violator è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2004, 13:43   #4
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
1) La matrice è correttamente definita, ma se usi il tipo float devi mettere anche il decimale.
Es.
A [j][j] = 3.0 (invece di A [j][j] = 3 che è un numero intero)
Cmq ci sono anche altri modi per inizializzare una matrice in maniera statica.
Se vuoi farlo dinamicamente devi fare delle acquisizioni da input esterno (tastiera o file)

3a) esatto

3b) basta che aggiungi la procedura main() e fai una cosa del genere:

Codice:
main ()
{
...
...
   tred2 (a, n, d, e);
   tqli  (d, e, n, z);
...
...
   return (0);
}
Nel main() devi dichiararti le variabili che poi vai a passare alle altre due procedure.
Non ho letto nel dettaglio le due procedure, quindi non ho visto quali sono i parametri in input e quelli in output.
Spero di essere stato abbastanza chiaro.
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2004, 16:10   #5
Violator
Senior Member
 
L'Avatar di Violator
 
Iscritto dal: Aug 1999
Messaggi: 179
Grazie.
Ancora non è tuuto chiaro, ma ci devo sbattere un po' la testa.

Ci sono manuali online (magari in italiano) sul C?
Violator è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2004, 16:16   #6
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
Quote:
Originariamente inviato da Violator
Ci sono manuali online (magari in italiano) sul C?
Quanti ne vuoi, basta cercare....
Eccone uno:

http://www.strath.ac.uk/IT/Docs/Ccourse/
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2004, 23:27   #7
srcProgram
Junior Member
 
Iscritto dal: Mar 2004
Messaggi: 7
trovi diversi BUONI tutorial di C su www.programmazione.it

bye
srcProgram è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
Recensione Vivo X300 Ultra: fotocamera eccezionale, ma prezzo proibitivo Recensione Vivo X300 Ultra: fotocamera ecceziona...
Addio compromessi? I nuovi tablet rugged...
Cooler Master al Computex 2026: case sil...
G.Skill mostra AMD EXPO ULL al Computex:...
Hilti e i data center, l'ingegneria dell...
Narwal anticipa il Prime Day: sconti fin...
Sharkoon mantiene il rapporto qualit&agr...
Xference e Aruba insieme per l'IA privat...
Google Wallet, in arrivo i documenti d'i...
Recensione OPPO Enco Clip2: tanta tecnol...
Altro passo dei cinesi in Europa: Chery ...
AMD FSR 4.1: l'architettura RDNA 3.5 pot...
L'Economist dice di non dare la colpa al...
Meta frena sul tracciamento dei dipenden...
Falla zero-click su Android, anche Linux...
AMD ha nascosto il vero segreto di EXPO ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:44.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v