Zad. al'a kolos1, semestr II


//Zadanie I od Rokickiego

//program oczywiście nie policzy nic dopóki nie stworzycie pliku interp.txt

#include <stdio.h>

#include <math.h>

double intlagr(double x[10], double y[10], int n, double t);

void main()

{

double t,w, x[10], y[10];

int n, i;

FILE *plik;

plik = fopen ("interp.txt","r");

fscanf(plik,"%d\n",&n);

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

{

fscanf(plik,"%lf %lf\n",&x[i],&y[i]);

}

printf("Podaj argument dla ktorego chcesz znalezc wartosc wielomianu interp. :");

scanf("%lf",&t);

w=intlagr(x,y,n,t);

printf("w(%lf) = %lf\n",t,w);

fclose(plik);

}

double intlagr(double x[50], double y[50], int n, double t)

{

double l, yy;

int i, k;

yy=0.0;

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

{

l=1.0;

for(k=0;k<=n;k++)

{

if(i!=k) l=l*((t-x[k])/(x[i]-x[k]));

}

yy=yy+l*y[i];

}

return yy;

}

//Zadanie 2 od Rokickiego

(nie mozna przeprowadzić wielomianu przez te punkty poniewaz każdy wielomian jest funkcjąa z definicji funkcji wynika ze dla jednego argumentu nie moze być więcej niż jedna wartość

czyli nie może być (2,3) i (2,5)

)

//Zadanie 3 od Rokickiego

#include <stdio.h>

#include <math.h>

double alfa;

double f(double x)

{

double p;

p=pow((pow(2.0,alfa)+cos(alfa*x)),1.0/3.0);

return p;

}

double simpson(double a, double b, double (*f)(double x), int n);

void main()

{

double cn, a, b, alfak, alfa0, dalfa;

int n;

printf("Podaj a, b, alfa0, alfak, dalfa,n:");

scanf("%lf %lf %lf %lf %lf %d",&a,&b,&alfa0,&alfak,&dalfa,&n);

alfa = alfa0;

while(alfa<=alfak)

{

cn = simpson(a,b,f,n);

printf("cn(%lf) = %lf\n",alfa,cn);

alfa = alfa + dalfa;

}

}

double simpson(double a, double b, double (*f)(double x), int n)

{

double value;

double h, x, sum;

int i;

int nc; // oznaczenie dla liczby wezlow wewnetrznych

nc = abs( n / 2 ) * 2;

h = (b - a) / (float) nc; // krok calkowania

sum = 0.0;

for( i=1; i<nc-1; i+=2 ) {

x = a + (float) i * h;

sum += 4.0*f(x) + 2.0*f(x+h);

}

value = ( f(a) + sum + 4.0*f(b-h) + f(b) ) * h / 3.0;

return value;

}

//Zadanie 4 od Rokickiego

#include <stdio.h>

#include <math.h>

double alfa;

double f(double x)

{

double p;

p=exp( -sin(x) * sin(x) - (alfa *x) );

return p;

}

double simpson(double a, double b, double (*f)(double x), int n);

void main()

{

double cn, a, b, alfak, alfa0, dalfa;

int n;

printf("Podaj a, b, alfa0, alfak, dalfa,n:");

scanf("%lf %lf %lf %lf %lf %d",&a,&b,&alfa0,&alfak,&dalfa,&n);

alfa = alfa0;

while(alfa<=alfak)

{

cn = simpson(a,b,f,n);

printf("cn(%lf) = %lf\n",alfa,cn);

alfa = alfa + dalfa;

}

}

double simpson(double a, double b, double (*f)(double x), int n)

{

double value;

double h, x, sum;

int i;

int nc; // oznaczenie dla liczby wezlow wewnetrznych

nc = abs( n / 2 ) * 2;

h = (b - a) / (float) nc; // krok calkowania

sum = 0.0;

for( i=1; i<nc-1; i+=2 ) {

x = a + (float) i * h;

sum += 4.0*f(x) + 2.0*f(x+h);

}

value = ( f(a) + sum + 4.0*f(b-h) + f(b) ) * h / 3.0;

return value;

}

//Zadanie 5 od Rokickiego

//program oczywiście nie policzy nic dopóki nie stworzycie pliku aa.txt zawierającego 50 węzłów :>

#include <stdio.h>

#include <math.h>

double trapez(double x[50], double y[50], int n);

void main()

{

double cn, x[50], y[50];

int n,i;

FILE *plik;

plik = fopen ("wezly","r");

fscanf(plik,"%d",&n);

for(i=1;i<=n;i++)

{

fscanf(plik,"%lf %lf\n",&x[i],&y[i]);

}

cn = trapez(x,y,n);

printf("cn=%lf\n",cn);

fclose(plik);

}

double trapez(double x[50], double y[50], int n)

{

double sum0, sum;

int i;

sum0 = 0.0;

for (i=1;i<n;i++)

{

sum = ( y[i] + y[i+1] )*( x[i+1] - x[i] ) / 2.0;

sum = sum0 +sum;

}

return sum;

}

//Zadanie 6 od Rokickiego

Troche to jest jeszcze niedopracowane ale nie chce mi sie już w to wnikać

#include <stdio.h>

#include <math.h>

double bisekcja(double a, double b, double (*f)(double x), double eps);

double sieczna(double a, double b, double (*f)(double x), double eps);

double styczna(double a, double (*f)(double x), double eps);

double f(double x)

{

return (2*sin(x)-(1.0/x));

}

double fp(double x)

{

return (2*cos(x)+(1.0/(x*x)));

}

void main()

{

double x0, x0si, x0st, a0, b0, zm, a[4], b[4], eps;

int i, k, m;

printf("podaj a0, b0, zm, m, eps:");

scanf("%lf %lf %lf %d %lf",&a0,&b0,&zm,&m,&eps);

k=0;

a[0]=a0;

for(i=1;;i++)

{

if(f(a0) * f(b0)>0.0) b0 = b0 + zm;

else

{

b[k] = b0;

a0 = b0;

printf("(%lf;%lf)\n",a[k],b[k]);

a[k + 1] = b0;

k = k + 1;

}

if(k>m) break;

}

for(i=0;i<k;i++)

{

a0=a[i];

b0=b[i];

x0=bisekcja(a0,b0,f,eps);

printf("x0=%lf %lf\n",x0,f(x0));

x0si=sieczna(a0,b0,f,eps);

printf("x0si=%lf %lf\n",x0si,f(x0si));

x0st=styczna(a0,f,eps);

printf("x0st=%lf %lf\n",x0st,f(x0st));

}

}

double bisekcja(double a, double b, double (*f)(double x), double eps)

{

double x0;

while(fabs(b-a)>eps)

{

x0=(a+b)/2.0;

if(f(x0)*f(a)<0) b=x0;

else a=x0;

}

return x0;

}

double styczna(double a, double (*f)(double x), double eps)

{

double x0, xch;

x0=a-(f(a)/fp(a));

while(fabs(a-x0)>eps)

{

x0=a-(f(a)/fp(a));

xch=x0;

x0=a;

a=xch;

}

return x0;

}

double sieczna(double a,double b,double(*f)(double x),double eps)

{

double x,x0,dx;

x0=a;

do

{

x=a-f(a)*(b-a)/(f(b)-f(a));

if(f(a)*f(x)<0.0) b=x;

else a=x;

x0=x;

}

while(fabs(x-x0)>eps);

return x;

}

Zadanie 7 rokicki

#include <stdio.h>

#include <math.h>

double bisekcja(double a, double b, double (*f)(double x), double eps);

double alfa;

double f(double x)

{

return (exp(-x)-x*x*x-alfa);

}

void main()

{

double a, b, eps, x[601], y[601], alfa0, alfak, dalfa;

double sum0, sum;

int i,n;

FILE *plik;

plik=fopen("dane31.dat","w");

printf("Podaj a, b, eps, alfak, alfa0, dalfa: ");

scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&eps,&alfak,&alfa0,&dalfa);

i=0;

alfa = alfa0;

while(alfa<=alfak)

{

x[i] = alfa;

y[i] = bisekcja(a,b,f,eps);

fprintf(plik,"x[%d]=%lf y[%d]=%lf\n",i,x[i],i,y[i]);

alfa = alfa + dalfa;

i=i+1;

}

sum0 = 0.0;

n = (b-a) / dalfa;

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

{

sum = ( y[i] + y[i+1] )*( x[i+1] - x[i] ) / 2.0;

fprintf(plik,"sum=%lf\n",sum);

sum = sum0 +sum;

}

printf("cn=%lf\n",sum);

}

double bisekcja(double a, double b, double (*f)(double x), double eps)

{

double x0;

while(fabs(b-a)>eps)

{

x0=(a+b)/2.0;

if(f(x0)*f(a)<0) b=x0;

else a=x0;

}

return x0;

}

/Cwiczenie 1

#include <stdio.h>

#include <math.h>

double trapez(double a, double b, double (*f)(double x), int n);

double simpson(double a, double b, double (*f)(double x), int n);

double f(double x)

{

return (1.0/x);

}

void main()

{

double bs, cns, bt, ca, cnt, a, b;

int n, i;

printf ( " Podaj a,b,n: ") ;

scanf ( "%lf %lf %d" ,&a, &b ,&n) ;

for(i=2;i<n;i=i*2)

{

cns = simpson ( a , b , f , i );

cnt = trapez ( a , b , f , i );

ca = ( sin(b) - ( (1.0 / 2.0) * b * b ) - sin(a) + ( (1.0 / 2.0 ) * a * a ) );

//printf("ca = %lf \n",ca);

//printf("Calka funkcji f(x) w przedziale <%lf,%lf> wynosi : %lf \n", a, b, cnt);

bt = fabs (ca - cnt);

bs = fabs (ca - cns);

printf("bt=%lf bs=%lf\n",bt,bs);

}

}

double trapez(double a, double b, double (*f)(double x), int n)

{

double h, x, sum;

int i;

h = ( b - a ) / ( float ) n;

sum = 0.0;

for(i = 1;i < n;i++)

{

x = a + i * h;

sum = sum + f(x);

}

sum=( f(a) + 2.0 * sum + f(b) )* h / 2.0;

return sum;

}

double simpson(double a, double b, double (*f)(double x), int n)

{

double value;

double h, x, sum;

int i;

int nc; // oznaczenie dla liczby wezlow wewnetrznych

nc = abs( n / 2 ) * 2;

h = (b - a) / (float) nc; // krok calkowania

sum = 0.0;

for( i=1; i<nc-1; i+=2 ) {

x = a + (float) i * h;

sum += 4.0*f(x) + 2.0*f(x+h);

}

value = ( f(a) + sum + 4.0*f(b-h) + f(b) ) * h / 3.0;

return value;

}

//Cwiczenie 2

#include <stdio.h>

#include <math.h>

double trapez(double a, double b, double (*f)(double x), int n);

double simpson(double a, double b, double (*f)(double x), int n);

double lagrange(double x[50], double y[50], int n, double t);

double f1(double x)

{

return pow(x,(1.0/2.0));

}

double f2(double x)

{

return pow(pow(x,(1.0/2.0)),3);

}

void main()

{

double x[50],y[50],t,yy,h,cnt1, cnt2, cns1, cns2, a, b;

int i, n;

FILE *plik;

plik=fopen("lagr.dat","w");

printf("Podaj a, b, n: ");

scanf("%lf %lf %d",&a,&b,&n);

cnt1 = trapez( a, b, f1, n );

cnt2 = trapez( a, b, f2, n );

cns1 = simpson( a, b, f1, n );

cns2 = simpson( a, b, f2, n );

printf("cnt1 = %lf \n",cnt1);

printf("cnt2 = %lf \n",cnt2);

printf("cns1 = %lf \n",cns1);

printf("cns2 = %lf \n",cns2);

h=(4.0/(n-1));

for (i=1;i<=n;i++)

{

x[i] = -2 + i * h;

y[i] = exp(-x[i]*x[i]);

}

for(i=1;i<=4*n-4;i++)

{

t=-2+i;

yy=lagrange(x, y, n, t);

fprintf(plik,"%lf %lf\n",t,yy);

printf("yy(%lf)=%lf\n",t,yy);

}

}

double lagrange(double x[50], double y[50], int n, double t)

{

double yy,l;

int i,k;

yy=0.0;

for (i=1;i<=n;i++)

{

l=1;

for(k=1;k<=n;k++)

{

if(i!=k) l=l*((t-x[k])/(x[i]-x[k]));

}

yy=yy+l*y[i];

}

return yy;

}

double trapez(double a, double b, double (*f)(double x), int n)

{

double x, sum, h;

int i;

h=(b-a)/n;

sum = 0;

for (i=1;i<n;i++)

{

x = a + i * h;

sum = sum + f(x);

}

sum = ( f(a) + 2 * sum + f(b) )*(h/2.0);

return sum;

}

double simpson(double a, double b, double (*f)(double x), int n)

{

double value;

double h, x, sum;

int i;

int nc; // oznaczenie dla liczby wezlow wewnetrznych

nc = abs( n / 2 ) * 2;

h = (b - a) / (float) nc; // krok calkowania

sum = 0.0;

for( i=1; i<nc-1; i+=2 ) {

x = a + (float) i * h;

sum += 4.0*f(x) + 2.0*f(x+h);

}

value = ( f(a) + sum + 4.0*f(b-h) + f(b) ) * h / 3.0;

return value;

}

//interpolacja lagrangea punkt 3 z Cwiczenia 2 (oddzielnie od reszty programu z Cwiczenia 2)

#include <stdio.h>

#include <math.h>

double lagrange(double x[50], double y[50], int n, double t);

void main()

{

double yy, x[50], y[50], t, h;

int i, n;

printf("Podaj n: ");

scanf("%d",&n);

h=4.0/(n-1);

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

{

x[i] = -2.0 + i*h;

y[i] = exp(-x[i] * x[i]);

}

for(i=0;i<=4*n-4;i++)

{

t = -2.0 + ((h * i) / 4.0);

yy=lagrange(x,y,n,t);

printf("t=%lf yy=%lf\n",t,yy);

}

}

double lagrange(double x[50], double y[50], int n, double t)

{

double l, yy;

int i, k;

yy=0.0;

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

{

l=1.0;

for(k=0;k<=n;k++)

{

if(i!=k) l=l*((t-x[k])/(x[i]-x[k]));

}

yy=yy+l*y[i];

}

return yy;

}

//Ćwiczenie 3 Punkt pierwszy z "Zadania do wykonania"

#include <stdio.h>

#include <math.h>

double bisek(double a, double b, double (*f)(double x), double eps, int *itb);

double f(double x)

{

return (cos(x)-x);

}

void main()

{

double x0, a, b, eps;

int n;

printf("Podaj a, b, eps:");

scanf("%lf %lf %lf",&a,&b,&eps);

while(f(a)*f(b)>0.0)

{

printf("Brak miejsc zerowych na tym przedziale, Podaj a, b:");

scanf("%lf %lf",&a,&b);

}

x0=bisek(a,b,f,eps,&n);

printf("x0=%lf\n",x0);

printf("Liczba iteracja dla eps = %lf wynosi %d\n",eps,n);

}

double bisek(double a, double b, double (*f)(double x), double eps, int *itb)

{

double x0;

*itb = 0;

while(fabs(b-a)>eps)

{

x0=(a+b)/2.0;

if(f(x0)*f(a)<0) b=x0;

else a=x0;

*itb = *itb + 1;

}

return x0;

}

// Cwiczenie 3 punkt 2 z "Zadania do wykonania"

#include <stdio.h>

#include <math.h>

double bisek(double a, double b, double (*f)(double x), double eps, int *itb);

double f(double x)

{

return (cos(x)-x);

}

void main()

{

double x0, a, b, eps0, eps;

int i,n;

FILE *plik;

plik=fopen("dane.dat","w");

printf("Podaj a, b, eps0:");

scanf("%lf %lf %lf",&a,&b,&eps0);

while(f(a)*f(b)>0.0)

{

printf("Brak miejsc zerowych na tym przedziale, Podaj a, b:");

scanf("%lf %lf",&a,&b);

}

for(i=-20;i<=-3;i++)

{

eps = eps0;

eps = pow(eps,i);

x0=bisek(a,b,f,eps,&n);

printf("x0=%lf\n",x0);

printf("%d %lf\n",n,eps);

fprintf(plik,"%d %lf\n",n,eps);

}

}

double bisek(double a, double b, double (*f)(double x), double eps, int *itb)

{

double x0;

*itb = 0;

while(fabs(b-a)>eps)

{

x0=(a+b)/2.0;

if(f(x0)*f(a)<0) b=x0;

else a=x0;

*itb = *itb + 1;

}

return x0;

}

//Punkt 3 z Zadania do wykonania . Nie jetsem pewny co do metody sstycznych bo sam ją pisałem (ale liczy dobrze).

#include <stdio.h>

#include <math.h>

double bisek(double a, double b, double (*f)(double x), double eps, int *itb);

double styczna(double a, double (*f)(double x), double eps, int *itst);

double sieczna(double a, double b, double (*f)(double x), double eps, int *itsi);

double f(double x)

{

return (cos(x)-x);

}

//pochodna cos(x)-x:

double fp(double x)

{

return (-sin(x)-1);

}

void main()

{

double x0, x0si, x0st, a, b, eps0, eps;

int i, n, nsi, nst;

FILE *plik,*plik1,*plik2;

plik=fopen("dane.dat","w");

plik1=fopen("dane1.dat","w");

plik2=fopen("dane2.dat","w");

printf("Podaj a, b, eps0:");

scanf("%lf %lf %lf",&a,&b,&eps0);

while(f(a)*f(b)>0.0)

{

printf("Brak miejsc zerowych na tym przedziale, Podaj a, b:");

scanf("%lf %lf",&a,&b);

}

for(i=-20;i<=-3;i++)

{

eps = eps0;

eps = pow(eps,i);

x0 = bisek(a,b,f,eps,&n);

printf("x0=%lf\n",x0);

printf("%d %lf\n",n,eps);

fprintf(plik,"n=%d %lf\n",n,eps);

x0si = sieczna(a,b,f,eps,&nsi);

x0st = styczna(a,f,eps,&nst);

printf("x0si=%lf\n",x0si);

printf("x0st=%lf\n",x0st);

printf("nsi=%d %lf\n",nsi,eps);

fprintf(plik1,"%d %lf\n",nsi,eps);

printf("nst=%d %lf\n",nst,eps);

fprintf(plik2,"%d %lf\n",nst,eps);

}

}

double bisek(double a, double b, double (*f)(double x), double eps, int *itb)

{

double x0;

*itb = 0;

while(fabs(b-a)>eps)

{

x0=(a+b)/2.0;

if(f(x0)*f(a)<0) b=x0;

else a=x0;

*itb = *itb + 1;

}

return x0;

}

double sieczna(double a, double b, double (*f)(double x), double eps, int *itsi)

{

double x0;

*itsi=0;

while(fabs(b-a)>eps)

{

x0=a-f(a)*((b-a)/(f(b) - f(a)));

if(f(a)*f(b)<0.0) b=x0;

else a=x0;

*itsi = *itsi + 1;

}

return x0;

}

double styczna(double a, double (*f)(double x), double eps, int *itst)

{

double x0, xch;

*itst=0;

x0=a-(f(a)/fp(a));

while(fabs(a-x0)>eps)

{

x0=a-(f(a)/fp(a));

xch=x0;

x0=a;

a=xch;

*itst = *itst + 1;

}

return x0;

}



Wyszukiwarka

Podobne podstrony:
Lista 4 zad, BUDOWNICTWO UZ semestr I i II, Fizyka
Lista 2 zad, BUDOWNICTWO UZ semestr I i II, Fizyka
Lista 3 zad, Budownictwo UZ semestr I , II, Fizyka
PROGRAMOWANIE KONiec, Materiały PWR elektryczny, Semestr 2, semestr II, PROGRAMOWANIE, zad na kolo
rozporządzenie 16.08.2007 szczegółowy zakres zad i org policji sądowej, WSPOL, I rok semestr II, Pra
stopy Al, Automatyka i Robotyka, Semestr II, Zasady doboru materiałów inżynierskich
niezerowe, Materiały PWR elektryczny, Semestr 2, semestr II, PROGRAMOWANIE, zad na kolo
bepka, Informatyka WEEIA 2010-2015, Semestr II, Ergonomia i zasady bezpiecznej pracy, Bezpieczenstwo
met1, Studia - Socjologia - Semestr II, metodologia
Psychologia Rozwojowa, II ROK, SEMESTR II, rozwój po adolescencji, sylabusy
Zagadnienia NoO, Notatki UTP - Zarządzanie, Semestr II, Nauka o organizacji
Postacie wody w glebie, Studia, UTP Ochrona środowiska, I rok, Semestr II, Geologia
Cwiczenie zabawowe, STUDIA, Polibuda - semestr II, Hydraulika i hydrologia, laborki z hydro
Zadania-lista4, POLITECHNIKA WROCŁAWSKA (2009), Semestr II, Fizyka 2
Umowa na czas wykonania określonej pracy, administracja, prawo pracy, Semestr II
Biochemia - pytania, Semestr II, biochemia
Szkoła racjonalnych oczekiwań, Finanse i Rachunkowość, Semestr II, Rachunkowość
pytania na egzam, MiBM, semestr II, MzOC, Inne
Syllabus -Negocjacje jako sposób, Prywatne, psychologia wsfiz, semestr II, Negocjacje wykłady

więcej podobnych podstron