Salve, io ho un problema a capire dei punti di questo programma che mi serve per un esame univesitario.. vi posto la traccia:
Scrivere un programma C++ che svolga le seguenti operazioni:
1. Richiede in input una matrice A^(0) = (aij ) € R^nxn, 0 < n <= 10; ed un numero reale
positivo tol.
2. Calcola il vettore w^(0) = (w^(0)j ) €Rn, dove w^(0)j =sommatora con i da 1 a n di |aij|. Calcola e stampa wmax,
dove wmax = max j=1,...,n w^(0)j.
3. Se wmax < tol stampa un opportuno messaggio, altrimenti calcola la matrice A =A^(0)/10wmax e, a partire da B^(0) = A, esegue le seguenti operazioni in sequenza (per k >= 1)
- B^(k) = B^(k-1) A
- m^(k) = max j=1,...,n della sommatoria con i da 1 a n del |b^(k)ji|
- A^(k+1)=s^(k+1) A^(k)
- w^(k+1)=A^(k+1) w^(k)
- w^(K+1)=B w^(k)+w^(k-1)
4. Stampa m(k) ad ogni iterazione.
5. Quando m^(k)<=tol oppure k=100 arresta il calcolo e stampa il numero k delle iterazioni.
Io ho provato a scrivere il programma solo che dalle operazioni in sequenza del punto tre mi sono bloccata, non so più andare avanti, ho solo calcolato mk, e per il punto 4 e 5 non sono molto sicura.. Spero che qualcuno con tanta pazienza possa darmi una mano o qualche suggerimento.. grazie mille a tutti.. QUESTO E' IL CODICE CHE HO SCRITTO:
Codice:#include<stdio.h> #include<stdlib.h> #include<math.h> const int size=10; typedef double vettore[size]; typedef double matrice[size][size]; int leggidim(); double leggitol(); void leggimatrice(matrice, int); void calcolaw(matrice, vettore, int); int calcola_wmax(vettore, int); double calcola_mk(matrice, int); main() { int n,i,j, k=1; double tol, wmax, mk; matrice A0,A ,B; vettore w; n=leggidim(); tol=leggitol(); leggimatrice(A0,n); calcolaw(A0,w,n); wmax=calcola_wmax(w,n); if(wmax<tol){ printf("attenzione, wmax minore della tolleranza");} else { for(int i=0; i<n; i++) for(int j=0; j<n; j++) A[i][j]=(A0[i][j])/(10*wmax);} for(int i=0; i<n; i++) for(int j=0; j<n; j++) B[i][j]=A[i][j]; do { mk=calcola_mk(B,n); printf("mk=%lf",mk);} while((mk<=tol)||(k==100)); k++; printf("k=%d",k); system("pause"); return 0; } int leggidim() { int n; do { printf("\n\n Quante componenti ha il vettore w e la matrice A? n="); scanf("%d", &n); } while((n<0)&&(n>10)); return n; } double leggitol() { double tol; printf("\n\n Inserire un numero reale positivo eps="); scanf("%lf", &tol); return tol; } void leggimatrice(matrice A0, int n) { for(int i=0; i<n; i++) for(int j=0; j<n; j++) { printf("\n A0[%d][%d]=", i+1, j+1); scanf("%lf", & A0[i][j]); } return; } void calcolaw(matrice A0,vettore w,int n) { int i,j; for(i=0; i<n; i++){ w[i]=0; for(j=0; j<n; j++) w[i]+=A0[i][j];} return; } int calcola_wmax(vettore w, int n) { double max=w[1]; int i; for(i=2; i<n; i++){ if(w[i]<max){max=w[i];} } printf("wmax=%d",max); return 0; } double calcola_mk (matrice B, int n) { int i, j; double sum=0, norma=0; for(i=0; i<n; i++){ for(j=0; j<n; j++){ sum+=B[i][j]; norma=sqrt(sum*2);}} return 0; }



Rispondi Citando
