meetody Nowy Dokument programu Microsoft Office Word

wysylam ci nie tylko moj program ale tez specyfikacje bo w niej w sumie
mam wytlumaczone jak to robic (w pierwszym punkcie).
 Do naszych programow potrzebujemy jakiejs funkcji, a zeby policzyc jej
min (max)  to tez pochodnej  (to taka metoda rozwiazywania zadan z
liceum)  . I wazna rzecz - program nie za bardzo dziala dla sin/cos wiec
lepiej takich nie bierz (a co za tym idzie tez tg/ctg bo tam pochodne sa
1/cos^2(x) itd). najlepiej byloby chyba gdybys to na jakis wielomianach
zrobil i tyle, bo ja nie mam wiecej pomyslow na jakas dzialajaca funkcje
poza ta moja 2^x - 2x.
Jeszcze jedno: jak ja wywoluje to moja funkcje to pisze:     wynik2 =
zero(x1(f2),10,f2); Ta dziesiatka w srodku to moje ogrtaniczenie na
ilosc iteracji (z tresci zadania). moze liepiej by bylo gdybys ty nie
mial tego w ten sposob wprowadzanego , tj mialbys funkcje

double zero(double x1, double f(double)){
    double xn;
double ilosc;
    int it = 0; //licznik iteracji
    xn=x1;
ilosc = 10; <- czyli w swojej funkcji tutaj bys zmienial ilosc iteracji
no i to chyba wszystko.
przy szukaniu maksimum po prostu musiasz sprawdzac czy istnieje cos
wiekszego (jak robie czy istnieje cos mniejszego)

//Agnieszka Kozub zad.72

#include <stdio.h>
#include <iostream.h>
#include <math.h>
#define r 0.1

//funkcja f1
double f1(double x){
return pow(x,4)-1;
}
//funkcja f2
double f2(double x){
return pow(2,x)-2*x;
}
//pochodna funkcji f1
double f11(double x){
return 4*pow(x,3);
}

//pochodna funkcji f2
double f21(double x){
return -2+pow(2,x)*log10(x)/log10(2);
}

//funkcja wyznaczajšca x0
double x1(double f(double x)) {
double pom1, pom2;
pom1=-0.05; pom2=-0.05+r;
while ( (f(pom1))*(f(pom2))>=0 && (f(-pom1))*(f(-pom2))>=0){
pom1 +=r;
pom2 +=r;

}
if((f(pom1))*(f(pom2))<0)
return (pom1+pom2)/2;
else
return (-pom1-pom2)/2;
}

//funkcja wyznaczajšce x0 dla f21
double x2() {
double pom1, pom2;
pom1=0.05; pom2=0.05+r;
while ( f21(pom1)*f21(pom2)>=0 ){
pom1 +=r;
pom2 +=r;

}
return (pom1+pom2)/2;
}

//szukanie x dla którego f(x)=0
double zero(double x1, int ilosc, double f(double)){
double xn;
int it = 0; //licznik iteracji
xn=x1;

while (it<ilosc && f(xn)!=0 ){ //iloœć to ograniczenie iloœci wykonywanych iteracji

xn= xn- pow(f(xn),2)/(f(xn + f(xn)) - f(xn));


it++;
}

cout << "ilosc wykonanych iteracji: " << it << endl;
return xn;
}


int main(){
double wynik1, wynik2, min1,xm1, min2,xm2;
double pomocnicza;

cout << "Program rozwiazuje rownanie f(x)=0 metoda Steffensena dla dwoch funkcji:"<<endl;
cout << "(1) f(x)= x^4-1" << endl;
cout << "(2) f(x) = 2^x - 2*x" << endl;
cout <<"Oraz szuka najmniejszej wartosci kazdej z funkcji na przedziale [0.5,10]."<<endl << endl;

cout << "Dla funkcji (1): "<< endl ;
wynik1 = zero(x1(f1),10,f1);
cout << "f(x)=0 dla x=" << wynik1 << endl << endl;

//szukanie minimum funkcji f1
min1=f1(0.5);
xm1=0.5;
if(min1>f1(10)){
min1=f1(10);
xm1=10; }

pomocnicza=zero(x1(f11),10,f11);
if(pomocnicza>0.05 && pomocnicza <10){

if(min1>f1(pomocnicza)){
min1=f1(pomocnicza);
xm1=pomocnicza; }
}

cout<< "funkcja przyjmuje minimum w punkcie xmin=" << xm1 << ", f(xmin)=" << min1 << endl;


cout <<endl<< endl << "Dla funkcji (2): "<< endl ;
wynik2 = zero(x1(f2),10,f2);
cout << "f(x)=0 dla x=" << wynik2 << endl << endl;

//szukanie minimum dla funkcji f2
min2=f2(0.5);
xm2=0.5;

if(min2>f2(10)){
min2=f2(10);
xm2=10; }

pomocnicza=zero(x2(),16,f21);
if(pomocnicza>0.05 && pomocnicza <10){

if(min2>f2(pomocnicza)){
min2=f2(pomocnicza);
xm2=pomocnicza; }
}

cout <<"funkcja przyjmuje minimum w punkcie xmin=" << xm2 << ", f(xmin)=" << min2 << endl;


return 0;

}

Programy (28-01-2008 22:18)

//wyliczenie węzłów rownoleglych

double krok=0;

if (n>1) krok=2.0/(double)(n-1);

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

tab[i][0]=-1 + i*krok;

if (n==1) tab[0][0]=0;

Programy (28-01-2008 22:19)

tu jest wyprowdzanie wezłów rownoleglych

Programy (28-01-2008 22:19)

krok to odleglosc miedzy wezlami

Micik (28-01-2008 22:19)

no no jak mialbys chwilkie to tak wiesz lopatologicznie bym prosil zeby sie nie przyjebala juz do tego iwecej:)

Programy (28-01-2008 22:20)

np dla 5 wezlow bedzie wynosił 2 (przedział od -1 do 1) / (5-1) = 2/4 = 0.5

Programy (28-01-2008 22:20)

i zaczynamy od -1

Programy (28-01-2008 22:20)

i co 0.5 oznaczamy wezel

Programy (28-01-2008 22:20)

czyli -1 , -0.5 , 0 , 0.5 , 1

Programy (28-01-2008 22:20)

i mamy 5 wezlow

Micik (28-01-2008 22:21)

okej okej

Programy (28-01-2008 22:21)

jesli n=1 to mamy tylko jeden wezel w 0 <--- to jest [rzypadek szczegolny

Programy (28-01-2008 22:21)

wezly jasne?

Micik (28-01-2008 22:23)

tak wezle te jasne a powiedz mi jeszcze bo tutaj jest ustawiony krok

Micik (28-01-2008 22:23)

a w czybyszewie tez jest taki sam krok jak tutaj tak

Micik (28-01-2008 22:23)

bio przedzialy sa takie same

Programy (28-01-2008 22:24)

tam w czebyszewie jest chyba zmienny krok zwiazany z sin czy csinusem

Programy (28-01-2008 22:24)

nie wiem tam nie wnikalem za bardzo po prostu jechalem tego czebyszewa ze wzoru z tresci zadania

Micik (28-01-2008 22:24)

aha okej okej

Programy (28-01-2008 22:25)

jakby krok byl staly to tez by byly rownolegle wtedy :P

Micik (28-01-2008 22:25)

bo wlasnie jak tam wezem przedzial od -1 do 1 i w rownoodleglych ty w tych samych X liczy

Programy (28-01-2008 22:25)

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

tab[i][0]=cos(((double)(2*(i+1)-1)/(double)(2*(n))) * PI);

Programy (28-01-2008 22:25)

tam jest taki wzor dany wiec nie ma co filozofowac :) a że opisany cosinusem to tez nie wyjedzie poza zakres -1 do 1

Micik (28-01-2008 22:26)

no tak ale te X sa takie same znaczy jak biore przedzial -1 1 to mam wiesz np. i tu i tu x=-0.9 -0.8 -0.7 i tak dalej

Programy (28-01-2008 22:26)

nie nie

Programy (28-01-2008 22:26)

tam na koniec to jest po prostu dla niektorych wartosci z tego przedzialu a do b zrobione

Programy (28-01-2008 22:27)

znaczy na koniec t ojuz tylko wypisuje wyniki przykladowe

Programy (28-01-2008 22:27)

podajesz a do b

Programy (28-01-2008 22:27)

i on Ci wypisuje wyniki dla x co 0.1

Programy (28-01-2008 22:27)

bo tam w sumie nie jest powiedziane ze dla wezlow ma wypisywac

Programy (28-01-2008 22:27)

sam nie wiem jak to ma byc zorganizowane

Micik (28-01-2008 22:28)

no wlasnie ale to nie sa te wezle tylko wypisuje mi dla x co 0.1 znaczy ze ten X to jest jakis punkt czy wezel

Programy (28-01-2008 22:28)


Wyszukiwarka

Podobne podstrony:
Nowy Dokument programu Microsoft Office Word (2)
Nowy Dokument programu Microsoft Office Word (16)
Nowy Dokument programu Microsoft Office Word (3)
Nowy Dokument programu Microsoft Office Word (19)
Nowy Dokument programu Microsoft Office Word (2)
Nowy Dokument programu Microsoft Office Word
Nowy Dokument programu Microsoft Office Word 6
Fiza laborka Nowy Dokument programu Microsoft Office Word
Nowy Dokument programu Microsoft Office Word 2
Nowy Dokument programu Microsoft Office Word
Nowy Dokument programu Microsoft Office Word (2)
Nowy Dokument programu Microsoft Office Word (6)
Nowy Dokument programu Microsoft Office Word 8
Nowy Dokument programu Microsoft Office Word
Nowy Dokument programu Microsoft Office Word
Aniołek Nowy Dokument programu Microsoft Office Word
Nowy Dokument programu Microsoft Office Word (9)
Nowy Dokument programu Microsoft Office Word
Nowy Dokument programu Microsoft Office Word

więcej podobnych podstron