1 #ifndef MUMECH_MATRIX_VECTOR_H 2 #define MUMECH_MATRIX_VECTOR_H 27 vektor(
long n){ p=n; v=
new double[
p];
long i;
for(i=0;i<
p;i++)v[i]=0.0; };
28 ~vektor(){
if(v!=NULL){
delete []
v;v=NULL; p=0; } };
32 double norma ()
const;
36 void krat(
double cislo){
long i;
for(i=0;i<
p;i++)v[i]=v[i]*cislo; };
37 void define(
long n){ p=n; v=
new double[
p];
long i;
for(i=0;i<
p;i++)v[i]=0.0; };
38 double&
g(
long i){
return v[i];};
43 fprintf(soubor,
"%.10f\n", v[i]);
57 int pricist(
vektor &co){
if(p!=co.
p)
return 0;
long i;
for(i=0;i<
p;i++)
g(i)+=co.
g(i);
return 1;};
58 int odecist(
vektor &co){
if(p!=co.
p)
return 0;
long i;
for(i=0;i<
p;i++)
g(i)-=co.
g(i);
return 1;};
59 void deleno(
long double cislo) {
long i;
for (i = 0; i<
p; i++)v[i] = v[i] / cislo; };
73 matice(){ R=0; S=0; r=0; s=0; t=
false; m=NULL; };
77 R=r=radku;S=s=sloupcu;
79 for(i=0;i<r*s;i++)m[i]=0.0;
85 R=r=radku;S=s=sloupcu;
87 for(i=0;i<r*s;i++)m[i]=0.0;
90 ~matice(){
if(m!=NULL){
delete []m; R=r=0; S=s=0; m=NULL; t=
false; } };
92 void destruct(){
if(m!=NULL){
delete []m; R=r=0; S=s=0; m=NULL; t=
false; } };
93 double&
g(
int radek,
int sloupec){
95 if( radek>=0 && radek<=r && sloupec>=0 && sloupec<=s)
return m[sloupec*S+radek];
97 if( radek>=0 && radek<=r && sloupec>=0 && sloupec<=s)
return m[radek*S+sloupec];
99 printf(
"\nCHYBA - pokus o pristup mimo oblast matice\n");
104 void krat(
double cislo){
int i;
for(i=0;i<r*s;i++)m[i]*=cislo;};
108 if(r!=a.
r || s!=b.
s || a.
s!=b.
r)
return 0;
111 for(u=0;u<r;u++)
for(v=0;v<s;v++)
for(rr=0;rr<a.
s;rr++)
g(u,v)+=1.0*a.
g(u,rr)*b.
g(rr,v);
116 if(r!=vek.
p)
return 0;
119 for(u=0;u<r;u++)
for(v=0;v<s;v++)
g(u,v)+=
g(u,v);
121 for(u=0;u<r;u++)
for(v=0;v<s;v++)
for(rr=0;rr<s;rr++)
g(u,v)+=vek.
v[rr]*zaloha.
g(rr,v);
139 if(r!=src.
r || s!=src.
s)
142 memcpy (this->m, src.
m, r*s *
sizeof(
double));
146 int pricist(
matice &co){
if(r!=co.
r || s!=co.
s)
return 0;
int i,j;
for(i=0;i<r;i++)
for(j=0;j<s;j++)
g(i,j)+=co.
g(i,j);
return 1;}
147 int odecist(
matice &co){
if(r!=co.
r || s!=co.
s)
return 0;
int i,j;
for(i=0;i<r;i++)
for(j=0;j<s;j++)
g(i,j)-=co.
g(i,j);
return 1;}
151 for(v=0;v<s;v++)fprintf(soubor,
"%.10lf ",
g(u,v));
152 fprintf(soubor,
"\n");
154 fprintf(soubor,
"\n");
157 if(r!=3 || s!=3)
return 0;
158 return g(0,0)*
g(1,1)*
g(2,2)-
g(2,0)*
g(1,1)*
g(0,2)+
g(0,1)*
g(1,2)*
g(2,0)+
g(1,0)*
g(2,1)*
g(0,2)-
g(0,1)*
g(1,0)*
g(2,2)-
g(0,0)*
g(2,1)*
g(1,2);
163 if(r!=3 || s!=3)
return 0;
170 return g(r1,s1)*
g(r2,s2)-
g(r1,s2)*
g(r2,s1);
172 printf(
"\nCHYBA - spatny rozmer matice pro pouziti funkce Determinant_3x3_doplnek\n");
177 void inverze_3x3 (
matice &d);
206 #endif // MUMECH_MATRIX_VECTOR_H
int rovna_se(const matice &src)
toto jsem ti predelal, pac jsem tam potreboval const
void rovna_se(vektor &co)
void rotate_vector(vektor &V, double angle)
double & g(int radek, int sloupec)
int MaticexVektor(vektor &res, matice &mat, vektor &vek)
void PrintMatrix(matice &mat, FILE *&soubor)
double Determinant_3x3_doplnek(int i, int j)
void change_radky(vektor &a, vektor &b)
int RozdilVektoru(vektor &a, vektor &b, vektor &c)
matice(int radku, int sloupcu)
void define(int radku, int sloupcu)
int nasobeni(matice &a, matice &b)
void PrintVektor(vektor &vekt)
void gaussovaEliminace(matice &m, vektor &right)
void deleno(long double cislo)