απορια σε μια ασκηση στη c (προβλημα με τις συναρτησεις)

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
lllmcv
Δημοσιεύσεις: 3
Εγγραφή: 02 Νοέμ 2011 13:59

απορια σε μια ασκηση στη c (προβλημα με τις συναρτησεις)

Δημοσίευση από lllmcv » 02 Νοέμ 2011 14:06

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float f(float x);
float df(float x);


int main(){
float x=-0.7;
int i=0;
float y;
do{
printf("H TIMH TΗσ f(x) ειναι %f",f(x));
y=x-(f(x)/df(x));
x=y;
i=i+1;
printf("αριθμος επαναληωεων %d",i);
printf("η διορθωσει ειναι %f",x);

}while (f(x)!=0);
return(0);}
float f(float x)
{
return (x+pow(exp,-10.0*pow(x,2.0))*cos(x));
}
float df(x)
{

return ((1-20*x*exp^(-10*(x)^2)*cos(x)-exp^(-10*(x)^2)*sin(x)));
}

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

απορια σε μια ασκηση στη c (προβλημα με τις συναρτησεις)

Δημοσίευση από dva_dev » 02 Νοέμ 2011 15:42

return (x+pow(exp,-10.0*pow(x,2.0))*cos(x));
return ((1-20*x*exp^(-10*(x)^2)*cos(x)-exp^(-10*(x)^2)*sin(x)));
Αυτά τα σύνθετα μακρυνάρια καλό είναι να τα σπάσεις σε απλούς όρους και να τα αποθηκεύσεις σε μεταβλητές για να μπορείς να βγάλεις άκρη τι γίνεται.

Τα exp, pow είναι συναρτήσεις όχι μεταβλητές. Ρίξε μια ματιά να δεις πως συντάσσονται και τι κάνει η κάθε μία.
Το ^ τι περιμένεις να κάνει στη C;

Γράψε επίσης ποιά είναι η συνάρτηση στα μαθηματικά αν δεν μπορείς να τη μεταφράσεις σε C.

lllmcv
Δημοσιεύσεις: 3
Εγγραφή: 02 Νοέμ 2011 13:59

απορια σε μια ασκηση στη c (προβλημα με τις συναρτησεις)

Δημοσίευση από lllmcv » 02 Νοέμ 2011 16:24

ok η συναρτηση ειναι η f(x)=x+e^(-10x^2)cos(x) kai i df ειαναι η παραγωγος

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

απορια σε μια ασκηση στη c (προβλημα με τις συναρτησεις)

Δημοσίευση από dva_dev » 02 Νοέμ 2011 17:18

Δοκίμασε κάπως έτσι:

Κώδικας: Επιλογή όλων

float f&#40;float x&#41;
&#123;
//f&#40;x&#41;=x + e^ &#40;&#40;-10   x^    2  &#41; cos&#40;x&#41; &#41;
return x + exp&#40; -10.0*pow&#40;x,2.0&#41;*cos&#40;x&#41; &#41;;
&#125;
Ουσιαστικά το
e^x γίνεται exp(x) και όχι pow(exp, x)

lllmcv
Δημοσιεύσεις: 3
Εγγραφή: 02 Νοέμ 2011 13:59

απορια σε μια ασκηση στη c (προβλημα με τις συναρτησεις)

Δημοσίευση από lllmcv » 02 Νοέμ 2011 18:40

ευχαριστω για την βοηθεια αλλα παλι εχω προβλημα
θελω να βρω τη ριζα τησ φ(χ) αλλα...
κανει απειρες επαναληωεις και δν σταματα



#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float f(float x);
float df(float x);


int main(){
system("chcp 1253 >null");
float x=-0.7;
int i=1;
float y;
while (f(x)!=0){
y=x-(f(x)/df(x));
x=y;
printf("&#207; &#193;&#209;&#201;&#200;&#204;&#207;&#211; &#197;&#208;&#193;&#205;&#193;&#203;&#199;&#216;&#199;&#211; &#197;&#201;&#205;&#193;&#201; %d\n",i);
printf("H TIMH TH&#211; f(x) &#197;&#201;&#205;&#193;&#201; %f\n",f(x));
printf("&#207;I &#196;&#201;&#207;&#209;&#200;&#217;&#211;&#197;&#201;&#211; &#197;&#201;&#205;&#193;&#201; %f\n",x);
printf("-------------------------------------------------\n");
i=i+1;
}
system("PAUSE");
return(0);}
float f(float x)
{
return x+exp(-10.0*pow(x,2.0))*cos(x);
}
float df(float x)
{
return 1-20*x*exp(-10*pow(x,2.0))*cos(x)-exp(-10*pow(x,2.0))*sin(x);
}

Άβαταρ μέλους
xmavidis
Honorary Member
Δημοσιεύσεις: 1217
Εγγραφή: 02 Δεκ 2003 19:59
Τοποθεσία: Ηράκλειο

απορια σε μια ασκηση στη c (προβλημα με τις συναρτησεις)

Δημοσίευση από xmavidis » 03 Νοέμ 2011 22:11

Είναι φυσικό να μην παίρνεις αποτέλεσμα λόγω της συνθήκης τερματισμού της while που έχεις βάλει. Είναι απίθανο να βρεις το x για το οποίο f(x) == 0.

Καλύτερα να ορίσεις ένα tolerance, π.χ.:

Κώδικας: Επιλογή όλων

tol = 1.0e-8;
while&#40;fabs&#40;f&#40;x&#41;&#41; > tol&#41; &#123;
  ....
&#125;
Και κάτι ακόμα, θα ήταν καλύτερα να χρησιμοποιήσεις double αντί για float ώστε να αποφύγεις πιθανά errors στη λύση στις λύσεις λόγω στρογγυλοποίησης.
I want to know God’s thoughts; the rest are details.
Albert Einstein

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες