# Demo entry 6516379

Eksamen

Submitted by Marcus on May 31, 2017 at 08:15
Language: C++. Code size: 18.4 kB.

```//============================================================================
// Name        : EKSAMEN.cpp
// Author      :
// Version     :
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <iomanip>
#include <math.h>
#include <fstream>
#define Nmax 12

void IndtastVektor(double v[Nmax], int n);
void IndtastAogn(double A[Nmax][Nmax], int &n);
void IndlaesFraFilAogn(double A[Nmax][Nmax], int &n);
void NormVektor(double v[Nmax],double vNorm[Nmax],double &L, int n);
void MultMatrixVektor(double K[Nmax][Nmax], double v[Nmax], double vprod[Nmax], int n);
void UdskrivMatrix(double M[Nmax][Nmax], int n);
void MatrixGangeMatrix(double A[Nmax][Nmax], double M1[Nmax][Nmax],double M2[Nmax][Nmax], int n);
void Ac(double A[Nmax][Nmax],double An[Nmax][Nmax],double lamn[Nmax],int &n);
void NormMatrix(double M[Nmax][Nmax], int n);
void Spektral(double A[Nmax][Nmax], double An[Nmax][Nmax],double lamn[Nmax],int n);
double DanMaxAbsDif(double M1[Nmax][Nmax], double M2[Nmax][Nmax], int n);
void DanBilledMatrix(double Kn[Nmax][Nmax], int &n);
void UdskrivBilledMatrix(double Kn[Nmax][Nmax], int n);
void SorterNormer(double LamValsUs[Nmax], double WMatUs[Nmax][Nmax], double LamValsSo[Nmax], double VMatSo[Nmax][Nmax], int n);
void Sort(double v[Nmax], int left, int right, int indexs[Nmax]);
void DanU1D1V1(double LamValsSo[Nmax], double VMatSo[Nmax][Nmax], double U1[Nmax][Nmax], double D1[Nmax], double V1[Nmax][Nmax], int n);
void VecOutput(double v[Nmax], int n);
void Rk(double a[Nmax], double b[Nmax-1], double c[Nmax-1], double s[Nmax-1], int n);
void Ak(double a[Nmax], double b[Nmax-1], double c[Nmax-1], double s[Nmax-1], int n);
void UpdateQonIterk(double Q[Nmax][Nmax], double c[Nmax-1], double s[Nmax-1], int n);
double MaxNum(double b[Nmax], int n);
void QR(double AK[Nmax][Nmax],double Q[Nmax][Nmax],double Q0[Nmax][Nmax],double a[Nmax],int n);
double IndreProdukt(double v1[Nmax],double v2[Nmax],int n);
void TriDiagonalisering(double A[Nmax][Nmax], double AK[Nmax][Nmax], double Q0[Nmax][Nmax], int n);
void svd(double A[Nmax][Nmax], double D1[Nmax], double V1[Nmax][Nmax], double U1[Nmax][Nmax], int n);

void Intro(char &Valgabcd);
void Del2(char &Valg12);
void A1(double A[Nmax][Nmax], int &n);
void B1(double A[Nmax][Nmax], int &n);
void C1(double A[Nmax][Nmax],double An[Nmax][Nmax],double lamn[Nmax],int &n);
void DI1(double Kn[Nmax][Nmax], int &n);

void MatrixGangeMatrix2(double A[Nmax][Nmax], double M1[Nmax][Nmax],double M2[Nmax][Nmax], int n, int r,int l);
void MatrixGangeDia(double A[Nmax][Nmax], double M1[Nmax][Nmax],double M2[Nmax], int n, int r);
void UdskrivNulrumMatrix(double M[Nmax][Nmax], int n, int r);
void UdskrivIkkeMatrix(double M[Nmax][Nmax], int n, int r);

using namespace std;

int main() {
int n;

double A[Nmax][Nmax],An[Nmax][Nmax],lamn[Nmax], Q[Nmax][Nmax], a[Nmax];
double Q0[Nmax][Nmax];
double AK[Nmax][Nmax];
double D1[Nmax],V1[Nmax][Nmax], U1[Nmax][Nmax];
char Valgabcd, Valg12, ValgIgen;

do{
Intro(Valgabcd);
switch(Valgabcd){
case 'A': case 'a':
A1(A,n);
break;
case 'B': case 'b':
B1(A,n);
break;
case 'C': case 'c':
C1(A,An,lamn,n);
break;
case 'D': case 'd':
DI1(A,n);
break;
default:
cout<<"Du har indtastet en ikke godkendt variabel";
}
Del2(Valg12);
if(Valg12=='1'){
TriDiagonalisering(A,AK,Q0,n);
UdskrivMatrix(AK,n);
QR(AK,Q,Q0,a,n);
}
else{
svd(A,D1,V1,U1,n);
}
cout<<"\n\nØnsker du at køre igen? Indtast j for at køre igen og n for at stoppe. Indtast nu: ";
cin>>ValgIgen;
}while(ValgIgen=='j'||ValgIgen=='J');

return 0;
}
void IndtastAogn(double A[Nmax][Nmax], int &n){
char ValGemA;
cout<<"\nIndtast n: ";
cin>>n;
cout<<"\nIndast din matrice: "<<endl;
for (int i=0;i<n;i=i+1){
for (int j=0;j<n;j=j+1){
cout<<"Indtast element "<<"["<<i+1<<" "<<j+1<<"]"<<" :";
cin>>A[i][j];
}
}

cout<<"\nVil du udskrive A og n til fil? Svar J/N";
cin>>ValGemA;

if (ValGemA=='j'|| ValGemA=='J'){
cout<<"\nDu har valgt at gemme til fil"<<endl;
ofstream Out;
Out.open("AMat.txt");
Out<<n<<"\n";
for(int i=0;i<n;i=i+1){
for(int j=0;j<n;j=j+1)Out<<A[i][j]<<" ";
Out<<"\n";
}
Out.close();
}
else cout<<"\nDu har ikke gemt til fil"<<endl;
}

void IndlaesFraFilAogn(double A[Nmax][Nmax], int &n){
ifstream In;
In.open("AMat.txt");
In>>n;
for (int i=0;i<n;i++) for (int j=0;j<n;j++) In>>A[i][j];
In.close();
}

void Ac(double A[Nmax][Nmax],double An[Nmax][Nmax],double lamn[Nmax],int &n){
double U1[Nmax][Nmax], D1[Nmax], V1[Nmax][Nmax];
double LamValsSo[Nmax], VMatSo[Nmax][Nmax];
char Valgn4;
ifstream In;
In.open("A8.txt");
In>>n;
for (int i=0;i<n;i++) for (int j=0;j<n;j++) In>>An[i][j];
In.close();
cout<<"\nVaelg n=4? J/N: ";
cin>>Valgn4;
if (Valgn4=='j'||Valgn4=='J') n=4;
else cout<<"Du har valgt at fortsætte med n=8"<<endl;
cout<<"\nIndtast egenværdierne:"<<endl;
for (int i=0;i<n;i++)
{
cout<<"Indtast egenværdi nr."<<i+1<<":";
cin>>lamn[i];
}
Spektral(A,An,lamn,n);
SorterNormer(lamn, An, LamValsSo, VMatSo, n);
DanU1D1V1(LamValsSo,VMatSo,U1,D1,V1,n);
cout<<"A bliver udprintet nedenunder"<<endl;
UdskrivMatrix(A,n);
cout<<"Dette er U1: "<<endl;
UdskrivMatrix(U1,n);
cout<<"Dette er V1: "<<endl;
UdskrivMatrix(V1,n);
cout<<"\nDette er D1: "<<endl;
VecOutput(D1,n);
}

void NormMatrix(double M[Nmax][Nmax], int n){
double Sum;
for (int j=0;j<n;j++){
Sum=0;
for (int i=0;i<n;i++)
{
Sum=Sum+M[i][j]*M[i][j];
}
for (int k=0;k<n;k++)
{
M[k][j]=M[k][j]*1/sqrt(Sum);
}
}
}

void IndtastVektor(double v[Nmax], int n){
cout<<"indtast elementer: "<<endl;
for(int i=0;i<n;i++)
{
cout<<"element "<<i+1<<" :";
cin>>v[i];

}
}

void NormVektor(double v[Nmax],double vNorm[Nmax],double &L, int n){
L=v[0];
for (int i=1;i<n;i++) if (fabs(v[i])>fabs(L))  L=v[i];

for (int k=0;k<n;k++) vNorm[k]=(1/L)*v[k];
}

void MultMatrixVektor(double K[Nmax][Nmax], double v[Nmax], double vprod[Nmax], int n){
double sum;

for (int i=0;i<n;i++)

{
sum=0;
for (int j=0;j<n;j++) sum+=(K[i][j]*v[j]);
vprod[i]=sum;
}

}

void UdskrivMatrix(double M[Nmax][Nmax], int n){
cout<<endl;
for (int i = 0; i < n; i++){
for (int j = 0; j <  n; j++){
cout <<setw(25)<<setprecision(14)<< M[i][j]<<" ";
}
cout << endl;
}
}

void MatrixGangeMatrix(double A[Nmax][Nmax], double M1[Nmax][Nmax],double M2[Nmax][Nmax], int n){
double led[Nmax][Nmax];
for (int i=0;i<n;i++) for (int j=0;j<n;j++) led[i][j]=0;

for (int i=0;i<n;i++) for (int j=0;j<n;j++) for(int k=0;k<n;k++) led[i][j]+=(M2[i][k]*M1[k][j]);

for(int i=0;i<n;i++) for(int j=0;j<n;j++) A[i][j]=led[i][j];
}

void Spektral(double A[Nmax][Nmax], double An[Nmax][Nmax],double lamn[Nmax],int n){
double sum;
for (int i=0;i<n;i++) for(int j=0;j<n;j++) A[i][j]=0;

for (int k=0;k<n;k++){
sum=0;
for (int h=0;h<n;h++){
sum+=An[h][k]*An[h][k];
}
for (int j=0;j<n;j++){
for (int i=0;i<n;i++){
A[i][j]+=lamn[k]/sum*An[i][k]*An[j][k];
}
}
}
}

double DanMaxAbsDif(double M1[Nmax][Nmax], double M2[Nmax][Nmax], int n){
double Nse=0;
for (int i=0;i<n;i++) for (int j=0;j<n;j++)
{
if (fabs(M1[i][j]-M2[i][j])>fabs(Nse)) Nse=fabs(M1[i][j]-M2[i][j]);
}
return Nse;
}
void DanBilledMatrix(double Kn[Nmax][Nmax], int &n){
cout<<"\nIndtast din ønskede n: ";cin>>n;
for(int i=0;i<n;i++) for(int j=0;j<n;j++) Kn[i][j]=0;
for(int i=0; i<n-1;i++){
Kn[i][i]=1;
Kn[i][i+1]=1;
Kn[i+1][i]=1;
}
Kn[n-1][n-1]=1;
for(int i=0; i<n-1;i++){
Kn[n-1-i][i]=1;
Kn[n-2-i][i]=1;
Kn[n-1-i][i+1]=1;
}
Kn[0][n-1]=1;
}
void UdskrivBilledMatrix(double Kn[Nmax][Nmax], int n){
cout<<endl;
for (int i = 0; i < n; i++){
for (int j = 0; j <  n; j++){
if(fabs(Kn[i][j])<1)				cout<<setw(1)<<setprecision(1)<<0;
else								cout <<setw(1)<<Kn[i][j];
}
cout << endl;
}
}
void SorterNormer(double LamValsUs[Nmax], double WMatUs[Nmax][Nmax], double LamValsSo[Nmax], double VMatSo[Nmax][Nmax], int n){
int indexs[Nmax];
for(int i=0;i<n;i++)	indexs[i]=i;
for(int i=0;i<n;i++)	LamValsSo[i]=LamValsUs[i];
Sort(LamValsSo,0,n-1,indexs);
for(int j=0;j<n;j++)	for(int i=0;i<n;i++)	VMatSo[i][j]=WMatUs[i][indexs[j]];
NormMatrix(VMatSo,n);
}
void Sort(double v[Nmax], int left, int right, int indexs[Nmax]){
int tmpindex;
double pivot,tmp;
pivot=v[(right+left)/2];
int i=left, j=right;

while(i<=j){
while(fabs(v[i])>fabs(pivot)){
i++;
}
while(fabs(v[j])<fabs(pivot)){
j--;
}
if(i<=j){
tmp=v[i];
v[i]=v[j];
v[j]=tmp;
tmpindex=indexs[i];
indexs[i]=indexs[j];
indexs[j]=tmpindex;
i++;
j--;
}
}
if(left<j){
Sort(v,left,j,indexs);
}
if(i<right){
Sort(v,i,right,indexs);
}
}
void DanU1D1V1(double LamValsSo[Nmax], double VMatSo[Nmax][Nmax], double U1[Nmax][Nmax], double D1[Nmax], double V1[Nmax][Nmax], int n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(LamValsSo[j]<0){
U1[i][j]=VMatSo[i][j]*-1;
}
else	U1[i][j]=VMatSo[i][j];
V1[i][j]=VMatSo[i][j];
}
}
for(int i=0;i<n;i++){
D1[i]=fabs(LamValsSo[i]);
}

}
void VecOutput(double v[Nmax], int n){
cout<<"["<<v[0];

for(int i=1;i<n;i++)
{
cout<<" , "<<setprecision(14)<<v[i];
}

cout<<"]";

}
void Rk(double a[Nmax], double b[Nmax-1], double c[Nmax-1], double s[Nmax-1], int n){
double r;
double t=b[0];
for(int i=0;i<n-1;i++){
c[i]=0;
s[i]=0;
}

for(int i=0;i<n-1;i++){
r=sqrt(pow(a[i],2)+pow(t,2));
c[i]=a[i]/r;
s[i]=t/r;
a[i]=r;
t=b[i];
b[i]=t*c[i]+a[i+1]*s[i];
a[i+1]=-t*s[i]+a[i+1]*c[i];
if(i!=n-1){
t=b[i+1];
b[i+1]=t*c[i];
}
else break;
}
}
void Ak(double a[Nmax], double b[Nmax-1], double c[Nmax-1], double s[Nmax-1], int n){
for(int i=0;i<n-1;i++){
a[i]=a[i]*c[i]+b[i]*s[i];
b[i]=a[i+1]*s[i];
a[i+1]=a[i+1]*c[i];
}
}
void UpdateQonIterk(double Q[Nmax][Nmax], double c[Nmax-1], double s[Nmax-1], int n){
double v1,v2;
for(int i=0;i<n-1;i++){
for(int j=0;j<n;j++){
v1=c[i]*Q[j][i]+s[i]*Q[j][i+1];
v2=(-s[i])*Q[j][i]+c[i]*Q[j][i+1];
Q[j][i]=v1;
Q[j][i+1]=v2;
}
}
}
double MaxNum(double b[Nmax], int n){
double L=fabs(b[0]);
for(int i=1;i<n;i++){
if(L<fabs(b[i])){
L=fabs(b[i]);
}
}
return L;
}
void QR(double AK[Nmax][Nmax],double Q[Nmax][Nmax],double Q0[Nmax][Nmax],double a[Nmax],int n){
char Valgeps;
double eps;
double b[Nmax-1],c[Nmax-1],s[Nmax-1];
int k=0, N;
cout<<"\nØnsker du at indtaste eps og N selv eller gøre brug af eps=0.000000000000001 og N=100000: ";
cout<<"Indtast 1 for at indtaste selv og 2 for automatisk: ";
cin>>Valgeps;
if(Valgeps=='1'){
cout<<"\nIndtast nu din eps: ";
cin>>eps;
cout<<"\nIndtast nu din N: ";
cin>>N;
}
else{
eps=0.000000000000001;
//		eps=0.1;
N=10000;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
Q[i][j]=0;
}
}
for(int i=0;i<n;i++) Q[i][i]=1;
a[0]=AK[0][0];
for(int i=1;i<n;i++){
a[i]=AK[i][i];
b[i-1]=AK[i-1][i];

}
do{
k++;
Rk(a,b,c,s,n);
Ak(a,b,c,s,n);
UpdateQonIterk(Q,c,s,n);
}while(MaxNum(b,n)>eps&&k<N);
MatrixGangeMatrix(Q,Q,Q0,n);
cout<<endl<<"iterationer k: ("<<k<<"): ";
cout<<endl<<"Sidste b: ";VecOutput(b,n-1);
cout<<endl<<"Din eps er: "<<eps<<endl;
cout<<endl<<"Sidste a - og egenværdier: ";VecOutput(a,n);
//	cout<<endl<<"Sidste c: ";VecOutput(c,n-1);
//	cout<<endl<<"Sidste s: ";VecOutput(s,n-1);
cout<<endl<<"Sidste Q - og egenvektorer: ";UdskrivMatrix(Q,n);
}
double IndreProdukt(double v1[Nmax],double v2[Nmax],int n){

double innerprodukt=0;
for(int i=0; i<n;i++)	  innerprodukt += v1[i] * v2[i];

return innerprodukt;
}
void TriDiagonalisering(double A[Nmax][Nmax], double AK[Nmax][Nmax], double Q0[Nmax][Nmax], int n){
double xk[Nmax],sk,rk,wk[Nmax],vk[Nmax],ck,qk[Nmax],Hk[Nmax][Nmax];
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
AK[i][j]=A[i][j];
Q0[i][j]=0;
}
}
for(int i=0;i<n;i++)	Q0[i][i]=1;

for (int k=0;k<n-2;k++)
{
for (int i=0;i<n;i++) for(int j=0;j<n;j++) Hk[i][j]=0;

for (int i=0;i<n;i++) xk[i]=AK[i][k];
sk=0;
for (int j=k+1;j<n;j++) sk+=pow(xk[j],2);
sk=sqrt(sk);
rk=sqrt(2*sk*(sk+fabs(xk[k+1])));
wk[k]=0;
if(xk[k+1]>=0) wk[k+1]=(fabs(xk[k+1])+sk);
else wk[k+1]=-(fabs(xk[k+1])+sk);
for (int i=k+2;i<n;i++) wk[i]=xk[i];
for (int i=k+1;i<n;i++) wk[i]=1/rk*wk[i];
MultMatrixVektor(AK,wk,vk,n);
ck=IndreProdukt(wk,vk,n);
for (int i=0;i<n;i++) qk[i]=vk[i]-ck*wk[i];
for (int j=0;j<n;j++)
{
Hk[j][j]=1;
for (int i=0;i<n;i++)
{
AK[i][j]=AK[i][j]-2*wk[i]*qk[j]-2*wk[j]*qk[i];
Hk[i][j]=Hk[i][j]-2*wk[i]*wk[j];
}
}
MatrixGangeMatrix(Q0,Hk,Q0,n);
}
}
void svd(double A[Nmax][Nmax], double D1[Nmax], double V1[Nmax][Nmax], double U1[Nmax][Nmax], int n){
double AS[Nmax][Nmax], AK[Nmax][Nmax], Q0[Nmax][Nmax], Q[Nmax][Nmax], a[Nmax],as[Nmax], AT[Nmax][Nmax];
double D1Inv[Nmax], AV[Nmax][Nmax], VT[Nmax][Nmax], UD[Nmax][Nmax], Akontrol[Nmax][Nmax], VDInv[Nmax][Nmax], UT[Nmax][Nmax];
double VMatSo[Nmax][Nmax], APseudo[Nmax][Nmax];
int r=n;
for(int i=0;i<n;i++) for(int j=0;j<n;j++) AT[i][j]=A[j][i];
MatrixGangeMatrix(AS,A,AT,n);
cout<<"DIN ATA ER: ";
UdskrivMatrix(AS,n);
TriDiagonalisering(AS,AK,Q0,n);
QR(AK,Q,Q0,a,n);
SorterNormer(a,Q,as,VMatSo,n);
cout<<endl<<endl;
for(int i=0;i<n;i++)	if(as[i]<0.000000001) r--;
cout<<"\nRangen af din matrice er: "<<r<<endl;
for(int i=0;i<r;i++){
D1[i]=sqrt(as[i]);
D1Inv[i]=1/D1[i];
}
for(int i=0;i<n;i++) for(int j=0;j<r;j++) V1[i][j]=VMatSo[i][j];
///////		Vi har nu alle elementer til at lave SVD, hvilket vil ske nu 	///////
MatrixGangeMatrix2(AV,A,V1,n,r,n);
MatrixGangeDia(U1,AV,D1Inv,n,r);
cout<<"Nu udfører vi kontrol. Denne skal danne A: "<<endl;
for(int i=0;i<n;i++) for(int j=0;j<n;j++) VT[j][i]=V1[i][j];
MatrixGangeDia(UD,U1,D1,n,r);
MatrixGangeMatrix2(Akontrol,UD,VT,n,n,r);
UdskrivMatrix(Akontrol,n);
cout<<"Dette er oprindelige A: "<<endl;
UdskrivMatrix(A,n);
cout<<"Nu findes den numerisk største forskel, der skal give 0, da de er identiske: "<<DanMaxAbsDif(Akontrol,A,n)<<endl<<endl;
cout<<"\nNu udskrives SVD faktorerne"<<endl;
cout<<"Dette er U1: "<<endl;
UdskrivIkkeMatrix(U1,n,r);
cout<<"Dette er V1: "<<endl;
UdskrivIkkeMatrix(V1,n,r);
cout<<"\nDette er D1: "<<endl;
VecOutput(D1,r);
///////		SVD er nu dannet og vil blive kontrolleret 		///////
for(int i=0;i<n;i++) for(int j=0;j<n;j++) UT[i][j]=U1[j][i];
MatrixGangeDia(VDInv,V1,D1Inv,n,r);
MatrixGangeMatrix2(APseudo,VDInv,UT,n,n,r);
cout<<"\nDette er APseudo: ";
UdskrivMatrix(APseudo,n);
///////		Nulrummet 		///////
if(r<n){
double NulKontrol[Nmax][Nmax], Nulrum[Nmax][Nmax];
cout<<"\nDin base for Nul{A} er fundet ved v(r+1),...,v(n)";
cout<<endl;
for(int i=0;i<n;i++) for(int j=r;j<n;j++) Nulrum[i][j]=VMatSo[i][j];
UdskrivNulrumMatrix(Nulrum,n,r);
cout<<"For at kontrollere, at dette er Nulrummet, så ganges de på A og skal få 0-matricen";
MatrixGangeMatrix2(NulKontrol,A,Nulrum,n,r,n);
UdskrivNulrumMatrix(NulKontrol,n,r);
}
}
void Intro(char &Valgabcd){
cout<<"Dette program består af to hovedemner.";
cout<<"\n\nDet første hovedemne har til formål, at tillade dig, at finde egenløsningerne til en symmetrisk A(nxn) matrix.";
cout<<"\nDenne vil have n reele egenværdier og gør brug af Householder transformationer og Givens-rotationer.";
cout<<"\nNår dette er udført, så vil der blive printet en Q-matrice, der indeholder vores egenvektorer og en diagonalmatrice, med egenværdierne på diagonalen.";
cout<<"\n\n";
cout<<"Anden hovedemne har til formål at bestemme den smalle SVD-faktorisering af A(nxn) (Ikke krævet symmetrisk): A=U1*D1*V1^T";
cout<<"\n\nDu vil nu få muligheden for at tilvejebringe A på fire forskellige måder: ";
cout<<"\na) Her skal der gøres brug af brugerindtastning af n og A(nxn)";
cout<<"\nb) Her vil n og A(nxn) blive indlæst fra fil";
cout<<"\nc) Konstruktion af symmetrisk A(nxn)=A^T(nxn) med kendte egenløsninger og kendte U1, D1, V1 ud fra brugervalgte egenværdier";
cout<<"\nd) Fremstilling af billedmatricer K(nxn)";
cout<<"\n\nVælg a, b, c eller d her: Valgabcd=";
cin>>Valgabcd;
}
void Del2(char &Valg12){
cout<<"\n\nBrugeren skal nu vælge imellem at finde egenløsningerne ved QR på en symmetrisk A";
cout<<"\nAnden mulighed er at bruge QR metoden på A^T*A og herefter danne SVD-faktorerne";
cout<<"\nIndtast 1 for mulighed 1 og 2 for mulighed 2. Indtast nu: ";
cin>>Valg12;
}
void A1(double A[Nmax][Nmax], int &n){
cout<<"\nDu har indtastet a, og dermed valgt mulighed a): Brugerindtastning af n og A";
IndtastAogn(A,n);
cout<<"\nDin A er hermed: ";
UdskrivMatrix(A,n);
}
void B1(double A[Nmax][Nmax], int &n){
cout<<"\nDu har indtastet b, og dermed valgt mulighed b): Indlæsning af n og A fra fil";
IndlaesFraFilAogn(A,n);
cout<<"\nDu har nu indlæst din A og n"<<endl;
cout<<"\nDin A er hermed: ";
UdskrivMatrix(A,n);
}
void C1(double A[Nmax][Nmax],double An[Nmax][Nmax],double lamn[Nmax],int &n){
cout<<"\nDu har indtastet c, og dermed valgt mulighed c): Konstruktion af symmetrisk A fra brugerindtastede egenværdier";
Ac(A,An,lamn,n);
}
void DI1(double A[Nmax][Nmax], int &n){
cout<<"\nDu har indtastet d, og dermed valgt mulighed d): Fremstilling af billedmatricer K fra brugerindtastet n";
DanBilledMatrix(A,n);
cout<<"\nDin A er nu dannet og vil blive udprintet"<<endl;
UdskrivBilledMatrix(A,n);
}
void MatrixGangeMatrix2(double A[Nmax][Nmax], double M1[Nmax][Nmax],double M2[Nmax][Nmax], int n, int r, int l)
{
double led[Nmax][Nmax];
for (int i=0;i<n;i++) for (int j=0;j<n;j++) led[i][j]=0;

for (int i=0;i<n;i++) for (int j=0;j<r;j++) for(int k=0;k<l;k++) led[i][j]+=(M1[i][k]*M2[k][j]);

for(int i=0;i<n;i++) for(int j=0;j<r;j++) A[i][j]=led[i][j];
}
void MatrixGangeDia(double A[Nmax][Nmax], double M1[Nmax][Nmax],double M2[Nmax], int n, int r){
for (int i=0;i<n;i++) for(int k=0;k<r;k++) A[i][k]=(M1[i][k]*M2[k]);
}
void UdskrivNulrumMatrix(double M[Nmax][Nmax], int n, int r){
cout<<endl;
for (int i=0;i<n;i++){
for (int j=r;j<n;j++){
cout <<setw(25)<<setprecision(14)<< M[i][j]<<" ";
}
cout << endl;
}
}
void UdskrivIkkeMatrix(double M[Nmax][Nmax], int n, int r){
cout<<endl;
for (int i=0;i<n;i++){
for (int j=0;j<r;j++){
cout <<setw(25)<<setprecision(14)<< M[i][j]<<" ";
}
cout << endl;
}
}
```

This snippet took 0.07 seconds to highlight.

Back to the Entry List or Home.