Forum Budownictwo 2006 Wydział Inżynierii Lądowej Politechniki Krakowskiej Strona Główna Budownictwo 2006 Wydział Inżynierii Lądowej Politechniki Krakowskiej

 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Interpolacja spline liniowe

 
Napisz nowy temat   Odpowiedz do tematu    Forum Budownictwo 2006 Wydział Inżynierii Lądowej Politechniki Krakowskiej Strona Główna -> Metody numeryczne
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
KrzysztofJezyna
Majster



Dołączył: 27 Cze 2007
Posty: 111
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5
Skąd: Szczecin:P

PostWysłany: Pon 15:16, 14 Kwi 2008    Temat postu: Interpolacja spline liniowe

Czy ma ktos moze programik spline linowe?? Mam ze Słwakiem Milewskim a on ma specyficzne wymagania

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Piotrek
Kierownik Budowy



Dołączył: 28 Paź 2006
Posty: 285
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5
Skąd: Tarnowskie Góry - KRK

PostWysłany: Pon 22:56, 14 Kwi 2008    Temat postu:

a ma ktos moze aproksymacje sześcienną? Smile

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pepe
Rajdowiec :D



Dołączył: 27 Paź 2006
Posty: 409
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5
Skąd: gród Kraka

PostWysłany: Pon 23:19, 14 Kwi 2008    Temat postu:

co ty sie Piotrek wypowiadasz jak bedziesz mial program Smile

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Piotrek
Kierownik Budowy



Dołączył: 28 Paź 2006
Posty: 285
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5
Skąd: Tarnowskie Góry - KRK

PostWysłany: Wto 6:27, 15 Kwi 2008    Temat postu:

noooooooooo oby :]

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Marek
Operator Łopaty



Dołączył: 10 Lut 2007
Posty: 28
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Czw 18:31, 17 Kwi 2008    Temat postu:

Aproksymacja sześcienna raz Smile
Kod:
#include <stdio.h>
#include <math.h>
main()
{double sum,pom,S[10],x[5],f[5],t[5],a[5][5],w[5],wart,x0;
int i,j,k;
double fun (int i, double a[5][5], double w[5]);
sum=0;

printf("Projekt 1 - Sześcienna aproksymacja funkcji jednowymiarowej \n\n\n");
printf("Poszukujemy wspolczynnikow funkcji: f(x)=a1+a2*x+a3*x^2+a4*x^3 \n\n\n");

for(i=1;i<=5;i++)         //wczytywanie xi yi
{printf("podaj x%d=",i);
scanf("%lf",&x[i]);
printf("podaj y%d=",i);
scanf("%lf",&f[i]);}

printf("podaj x0=");     //wczytywanie x0
scanf("%lf",&x0);

for(j=1;j<=7;j++)        //obliczanie S(patrz kartka)
{for(i=1;i<=5;i++)
{pom=pow(x[i],j-1);
sum=sum+pom;}
S[j]=sum;
sum=0;}

for(j=1;j<=4;j++)        //obliczanie t (patrz kartka )
{for(i=1;i<=5;i++)
{pom=pow(x[i],j-1)*f[i];
sum=sum+pom;}
t[j]=sum;
sum=0;}

for(i=1;i<=4;i++)         //tworzenie macierzy z S
{for(j=1;j<=4;j++)
{a[i][j]=S[j+i-1];;};};

for(k=1;k<=4;k++)             //algorytm Gaussa rozwiazywaniu ukladu rownan A(S)X=t-tworzenie
{for(i=k+1;i<=4;i++)         //macierzy gornnoprzekatnej - krok 1
{for(j=k+1;j<=4;j++)
{a[i][j]=a[i][j]-(a[i][k]/a[k][k])*a[k][j];}
t[i]=t[i]-(a[i][k]/a[k][k])*t[k];};};

for(i=2;i<=4;i++)               //przyjmowanie 0 w macierzy a,ponizej przekatnej glownej
{for(j=1;j<=i-1;j++)
{a[i][j]=0;};}

for(i=3;i>=1;i--)                 //obliczanie X cd algorytmu Gaussqa (krok 2)-ktore stanowia
{w[4]=t[4]/a[4][4];               //wspolczynniki aproksymowanej funkcji szesciennej
w[i]=1./a[i][i]*(t[i]-fun(i,a,w));};

wart=w[1]+x0*w[2]+x0*x0*w[3]+x0*x0*x0*w[4];
printf("\n\n Szukana wartosc aproksymowanej funkcji dla x=%1.2lf wynosi y=%lf \n\n",x0,wart);
scanf("%lf",&x0);
return 0;}

double fun (int i, double a[5][5], double w[5]) //oblicza sume wzoru z kartki
{double s;
int j;
s=0;
for(j=i+1;j<=4;j++)
{s=s+a[i][j]*w[j];};
return s;}

A to mój prywatny już zaliczony projekt z najlepszej liniowej aproksymacji ale używa kilku niefajnych bibliotek no i parę osób z gr 10 też z miało ten program - jak nie macie z P. Serafin to proszę bardzo Smile
Kod:
#include <iostream>
#include <conio.h>
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{   float fun (float x, int i1, int j1);
    int i, j, k, amount;
    float f0, x0, w, wx, wy;
    float Xi[10], Fi[10];
    float C[2], B[2];
    float A[2][2];
   cout<<endl<<"\t Metoda  najlepszej liniowej  aproksymacji"<<endl;
    cout<<"\t funkcji jednowymiarowej."<<endl<<endl;
    cout<<"\t podaj  liczbe  punktow:";
   cin>>amount;
    cout<<"  Wprowadz zbior  punktow:"<<endl<<endl;
    for(i = 0; i <amount; i++)
        {cout<<"X"<<(i+1)<<": ";
         cin>>Xi[i];
         cout<<"F"<<(i+1)<<": ";
         cin>>Fi[i];}
    cout<<"Podaj x0: ";
    cin>>x0;
    //budowa macierzy i wektora (układu równań)
    for(i = 0; i < 2; i++)
        {for(j = 0; j < 2; j++)
            {A[i][j] = 0;
             for(k = 0; k < amount; k++)
                A[i][j] += fun(Xi[k],i,j);}
          B[i] = 0;
          for(k = 0; k < amount; k++)
              B[i] += fun(Xi[k],i,1)*Fi[k];
        }
    //rozwiazanie ukladu rownan 2x2 (wyznacznikami)
    w = A[0][0]*A[1][1] - A[1][0]*A[0][1];
    wx = B[0]*A[1][1] - B[1]*A[0][1];
    wy = A[0][0]*B[1] - A[1][0]*B[0];
    C[0] = wx/w;
    C[1] = wy/w;
    //wyprowadzenie ukladu rownan i jego rozwiazania
cout<<endl<<endl;
i=j=0;
 while (i<2)
      {while(j<2)
             {cout<<setprecision(3)<<A[i][j]<<"   ";
              j++;
             }
        cout<<"   "<< setprecision(3)<<B[i]<<"   =>   "<<setprecision(3)<<C[i]<<endl;
        j=0;
        i++;
      }
   cout<<"Funkcja: f(x)= "<<setprecision(2)<<C[0]<<"x + "<<setprecision(2)<<C[1]<<endl;
    //wynik - wartość aproksymowana funkcji w x0
    f0 = C[0]*x0 + C[1];
    cout<<"Wynik f("<<x0<<") = "<<f0<<endl;
    getch();
    return 0;
}

    //funkcja obliczająca w jakiej potędze będą sumowane współczynniki
float fun (float x, int i1, int j1)
           { if (i1==j1 && j1==0) return pow(x,2);
             if (i1!=j1) return x;
             return 1;  }

Jak we wtorek zaliczę 2 projekt to wrzucę całkę numeryczną dwupunktową kwadraturą Gauss'a Smile


Post został pochwalony 0 razy

Ostatnio zmieniony przez Marek dnia Czw 18:37, 17 Kwi 2008, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Jajko
Kierowca Wywrotki



Dołączył: 14 Maj 2007
Posty: 59
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5

PostWysłany: Czw 19:51, 17 Kwi 2008    Temat postu:

A interpolacji funkcją sklejaną 3-go stopnia byś nie wrzucił...?

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Piotrek
Kierownik Budowy



Dołączył: 28 Paź 2006
Posty: 285
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5
Skąd: Tarnowskie Góry - KRK

PostWysłany: Czw 21:48, 17 Kwi 2008    Temat postu:

marku wielkie dzięki Smile

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Marek
Operator Łopaty



Dołączył: 10 Lut 2007
Posty: 28
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Sob 20:05, 19 Kwi 2008    Temat postu:

Jajko napisał:
A interpolacji funkcją sklejaną 3-go stopnia byś nie wrzucił...?

no niestety nie piszę już wszystkich możliwych programów jak kiedyś ... Smile Laughing


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Marek
Operator Łopaty



Dołączył: 10 Lut 2007
Posty: 28
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 16:31, 23 Kwi 2008    Temat postu:

Dwupunktowa kwadratura Gaussa Smile
Kod:
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <iomanip>
using namespace std;
const double p3=1/pow(3,0.5);
int wybor;
double a, b, x, amount=1, eps;

void Dane()
{
  cout<<endl<<"\n\tCalka numeryczna obliczana metoda\n";
  cout<<"\t dwupunktowej kwadratury Gaussa.\n\n";
  cout<<"Menu wyboru:\n";
  cout<<"[1] Oblicz calke z: f(x)=1/(pow(log(x)+sin(x),0.5))\n";
  cout<<"[2] Oblicz calke z: f(x)=x^2\n";
  cout<<"[3] Oblicz calke z: f(x)=x\n";
  cout<<"[4] Oblicz calke z: f(x)=x^3\n";
  cout<<"[5] Oblicz calke z: f(x)=sin(x)\n";
  cout<<"[6] Oblicz calke z: f(x)=sin(x)/2*pow(cos(x)-log10(fabs(x-2)),3/2)\n";
  cout<<"Funkcja numer: ";
  cin>>wybor;
  cout<<"Wprowadz granice calkowania:\n";
  cout<<"A= ";
  cin >> a;
  cout<<"B= ";
  cin >> b;
  cout<<"Wprowadz dokladnosc:\n";
  cout<<"eps=10^-";
  cin >> eps;
  eps=pow(10,-eps);
}

double fun(int wybor0, double x0)
{ double f;
   switch(wybor0)
  { case 1:  f=1/(pow(log(x0)+sin(x0),0.5)); break;
    case 2:  f=pow(x0,2);  break;
    case 3:  f=x0;  break;
    case 4:  f=pow(x0,3);  break;
    case 5:  f=sin(x0);  break;
    case 6:  f=sin(x0)/2*pow(cos(x0)-log10(fabs(x0-2)),3/2);  break;
    default: break;
  }
  return f;
}

double Calka()
{double int0, int1, k, d, alfa, beta, ep, x1, x2;
 int max=0;
 d=0;
 int0=0;
 amount=b-a;
 ep=1;
 while (fabs(ep)>eps && amount<500000000)
    { int1=0;
     if (d!=0) amount*=2;
     if (max>2) x1=fabs(ep)/eps;
     if (x1>4) amount*=x1;
     amount=abs(amount);
     d=(b-a)/amount;
     for (k=a; k<b; k+=d)
         {if (k>b-d && k<b) d=b-k;
          alfa=2/d;
          beta=1-alfa*(k+d);
          x1=(-p3-beta)/alfa;
          x2=(p3-beta)/alfa;
          int1+=(1/alfa)*(fun(wybor,x1)+fun(wybor,x2));
          }
     ep=int1-int0;
     int0=int1;
     max++;
    }
 eps=fabs(ep);
 return int0;
}

int main()
{ Dane();
  cout<<"\nCalka z f(x)=";
  switch(wybor)
  { case 1: cout<<"1/(pow(log(x)+sin(x),0.5)) "; break;
    case 2: cout<<"x^2 "; break;
    case 3: cout<<"x";  break;
    case 4: cout<<"x^3 ";  break;
    case 5: cout<<"sin(x)";  break;
    case 6: cout<<"sin(x)/(2*pow(cos(x)-log10(fabs(x-2)),3/2))"; break;
    default: wybor=3; break;
  }
  cout<<" na przedziale <"<<a<<","<<b<<">\n wynosi: ";
  cout<< setprecision(14)<<Calka();
  cout<<"\n"<<"Ostateczna liczba podzialow wyniosla: "<<amount;
  cout<<"\nA ostateczna dokladnosc: "<< setprecision(14)<<eps;
  getch();
return 0;
}


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kalitek
Operator Łopaty



Dołączył: 08 Lis 2006
Posty: 22
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Połaniec / Krakow

PostWysłany: Pon 19:36, 12 Maj 2008    Temat postu:

dorzucam sie do pytanie posiada ktos?

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kalitek
Operator Łopaty



Dołączył: 08 Lis 2006
Posty: 22
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Połaniec / Krakow

PostWysłany: Wto 13:02, 13 Maj 2008    Temat postu:

posiada ktos? poratujcie oczywiscie odplatnie

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Budownictwo 2006 Wydział Inżynierii Lądowej Politechniki Krakowskiej Strona Główna -> Metody numeryczne Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin