Skip to content

Instantly share code, notes, and snippets.

@sienki-jenki
Created February 24, 2019 19:46
Show Gist options
  • Save sienki-jenki/66fc3dfcb5998598bc04b43233e441ce to your computer and use it in GitHub Desktop.
Save sienki-jenki/66fc3dfcb5998598bc04b43233e441ce to your computer and use it in GitHub Desktop.
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
void endline();
void wypisz();
void mac(double **tmp){
int j = 0;
double a,bb;
int N = 20;
// double *b = calloc(N,sizeof(double));
double **m = calloc(N,sizeof(double));
double *b = calloc(N,sizeof(double));
double **m1 = calloc(N,sizeof(double));
double *b1 = calloc(N,sizeof(double));
for(int i = 0; i < N;i++){
m[i] = calloc(N,sizeof(double));
m1[i] = calloc(N,sizeof(double));
b[i] = rand()% 100;
b1[i] = b[i];
}
for(int i=0; i < N; i++){
for( int j = 0; j < N;j++){
m[i][j] = rand()% 101;
m1[i][j] = m[i][j];
}
}
int ii = 0;
// wypisz(m,N);
for( int ii = 0; ii < N; ii++){
a = m[ii][ii];
for( int j = 0; j < N; j++){
m[ii][j] = m[ii][j]/a;
}
b[ii] = b[ii]/a;
// printf("%lf",m[ii][j]);
for(int i = 0; i < N; i++){
if( i != ii){
a = m[i][ii];
for( int j= 0; j < N; j++){
m[i][j] = m[i][j] - a*m[ii][j];
}
b[i] = b[i] - a*b[ii];
}
}
}
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
tmp[i][j] = m[i][j];
}
}
}
void GaussJordan(double **m, double *b){
int j = 0;
double a,bb;
int N = 20;
int ii = 0;
for( int ii = 0; ii < N; ii++){
a = m[ii][ii];
if( a== 0)
a = 1/9.;
// printf("BLA %lf,",a);
for( int j = 0; j < N; j++){
m[ii][j] = m[ii][j]/a;
}
b[ii] = b[ii]/a;
// printf("%lf",m[ii][j]);
for(int i = 0; i < N; i++){
if( i != ii){
a = m[i][ii];
for( int j= 0; j < N; j++){
m[i][j] = m[i][j] - a*m[ii][j];
}
b[i] = b[i] - a*b[ii];
}
}
}
// endline();
wypisz(m,N);
}
void wypisz(double **m, int N){
for(int i=0; i < N; i++){
for( int j = 0; j < N;j++){
printf("%lf ",m[i][j]);
}
printf("\n");
}
}
void endline(){
printf("\n\n\n");
}
//równanie całkowe
double kxy(double x,double y){
return exp(-(x+y));
}
int main(){
double gx = 1;
int N = 20;
double h = 1./ (N-1);
double *xx = calloc(N,sizeof(double));
double *yy = calloc(N,sizeof(double));
double *w = calloc(N,sizeof(double));
double *b = calloc(N,sizeof(double));
for(int i = 0; i < N; i++){
b[i] = 1;
}
// double *bTmp = calloc(N,sizeof(double));
double **m = calloc(N,sizeof(double));
for(int i = 0; i < N; i++){
m[i] = calloc(N,sizeof(double));
// w[i] = h;
}
for(int i = 0; i < N; i++){
b[i] = 1;
}
// wypisz(m,5);
for( int i = 0;i < N; i++){
xx[i] = (i)*h;
yy[i] = xx[i];
w[i] = h;
printf("W %lf", w[i]);
}
printf("\n\n");
w[0] = h/2.;
w[N-1] = h/2.;
double **kt = calloc(N,sizeof(double));
for(int i = 0; i < N; i++){
kt[i] = calloc(N,sizeof(double));
}
for(int i = 0;i < N; i++){
for(int j = 0;j < N; j++){
kt[i][j] = kxy(xx[i],yy[j] * w[j]);
printf("bla %lf",xx[i]);
}
}
double **A = calloc(N,sizeof(double));
for(int i = 0; i < N; i++){
A[i] = calloc(N,sizeof(double));
}
mac(m);
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
A[i][j] = m[i][j] - kt[i][j];
printf("%lf ",A[i][j]);
}
printf("\n");
}
GaussJordan(A,b);
printf("\n");
for(int i = 0; i < N; i++){
printf("%lf %lf\n",xx[i],b[i]);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment