Gönderen Konu: Yardım  (Okunma sayısı 6986 defa)

Çevrimdışı Aykut Önol

  • OTOKON Üyesi
  • *
  • İleti: 194
Yardım
« : Nisan 01, 2010, 09:30:32 ÖS »
Ya biri yardım edebilir mi yarına yetiştirmem gerekiyor. Nasıl yapılacağı konusunda bir fikir verseniz? :-[
Write a C program which will consist of a MAIN function and a FUNCTION.               
Program will find one root of a given F(X)=0 using the Eq.(1) and Eq.(2)
given below.
   
Xi+1=Xi-F(Xi)/F'(Xi) for i=0,1,2,3...   (1)   
       
F'(Xi)=(F(Xi+h)-F(Xi))/h                (2)

Within the MAIN function:

 1. Set X0=0.5, h=0.001 and epsilon=0.0000001 
     .X0 is the starting guess.
     .epsilon is the desired accuracy. 
     .h is a small increment.
     .Set maximum number of iteration (max_iteration) to 50.
       .ITERATION: The output of the previous operation as the input
         for the next. Computed number of guesses.
 2. Compute the next guess from the current guess using Eq.(1) and Eq.(2)
 3. Repeat step 2 until the desired accuracy is met, that is, until
    |Xi+1-Xi|< epsilon.
 4. Print the root and the total number of iteration when the desired accuracy
    is met.
 5. Program should stop when the desired accuracy is met or the number of
    iteration exceeds max_iteration.
   
Within the FUNCTION:
   return the value of F(X).   

Test the program with the following equations (One at a time).
     
      . x7+4x3+12=0   
      . ln(x)-e-3x=0
      . cos(x)-x2=0 
      . esin(x)+x=0
      . log(1+x)-x2=0 
   
The program can only give one of the solutions for a given guess.
if the equation has multiple roots, to find the others, you must run the
program with different guesses closer to the others.
"Diyalektik materyalizm tarihsel gelişim sürecinde birçok realistik ve skolastik yaklaşımla karşılaşmıştır ve bu yaklaşımlardan avantgart kültür döngüsü içerisinde birçok pozitivistik akım doğmuştur."

Çevrimdışı Aykut Önol

  • OTOKON Üyesi
  • *
  • İleti: 194
Ynt: Yardım
« Yanıtla #1 : Nisan 02, 2010, 12:42:02 ÖÖ »
Bu kodun neresinde yanlışlık var sizce?
Kod: [Seç]
#include<stdio.h>
#include<math.h>
double fonks(int x)
{
int denklem,t;
double equation;
printf("Enter the right equation\n");
printf("1 for the first equation\n");
printf("2 for the second equation\n");
printf("3 for the third equation\n");
printf("4 fot the fourth equation\n");
printf("5 for the fifth equation\n");
scanf("%d",&denklem);
t=x*3,141593/180;

    switch(denklem)
    {
    case 1:
    {
    equation=pow(x,7)+4*pow(x,3)+12;
    break;
    }
    case 2:
    {
    equation=log(x)-exp(-3*x);
    break;
    }
    case 3:
    {
    equation=cos(x)-pow(x,2);
    break;
    }
    case 4:
    {
    equation=exp(sin(t))+x;
    break;
    }
    case 5:
    {
    equation=log10(1+x)-pow(x,2);
    break;
    }
    default:
    {
    printf("Undefined equation.");
    break;
    }
    }

return equation;
}

int main()
{
    int i;
    double h=0.001,epsilon=0.0000001,x_initial=0.5;
    double x[50];
    for(i=0;i<=49;i++)
    {
    x[0]=0.5;
    x[i+1]=x[i]-((fonks(x[i])*h)/(fonks(x[i]+h)-fonks(x[i])));
       if(fabs(x[i+1]-x[i])<epsilon)
       {
       printf("%.10f\n",x[i]);
       break;
       }

    }
    return 0;
}



"Diyalektik materyalizm tarihsel gelişim sürecinde birçok realistik ve skolastik yaklaşımla karşılaşmıştır ve bu yaklaşımlardan avantgart kültür döngüsü içerisinde birçok pozitivistik akım doğmuştur."

Çevrimdışı Onur Varol

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 3029
Ynt: Yardım
« Yanıtla #2 : Nisan 02, 2010, 01:49:15 ÖÖ »
Ne hata aldıgını söylersen daha kolay yardımcı olunur sanırım

Çevrimdışı Aykut Önol

  • OTOKON Üyesi
  • *
  • İleti: 194
Ynt: Yardım
« Yanıtla #3 : Nisan 02, 2010, 02:07:10 ÖÖ »
Ya sürekli böyle yapıyor ne yaparsam yapayım.


Fakat şimdi de böyle bir şey yazdım doğru çalışıyor mu çalışmıyor mu emin değilim ama en azından sonuç veriyor. :D
Kod: [Seç]
#include<stdio.h>
#include<math.h>

float function(float x)
{
  float equation;
  equation=pow(x,7)+4*pow(x,3)+12;
  /*  equation=log(x)-exp(-3*x);
      equation=cos(x)-pow(x,2);
      equation=exp(sin(t))+x;
      equation=log10(1+x)-pow(x,2);*/
  return equation;
}

int main()
{
int i;
double h=0.001,epsilon=0.0000001,x_initial=0.5;
double x[50];
  for(i=0;i<=49;i++)
  {
   x[0]=0.5;
   x[i+1]=x[i]-((function(x[i])*h)/(function(x[i]+h)-function(x[i])));
   if (fabs(x[i+1]-x[i])<epsilon)
   {
   printf("%.10f\n",x[i]);
   break;
   }
  }
return 0;
}
"Diyalektik materyalizm tarihsel gelişim sürecinde birçok realistik ve skolastik yaklaşımla karşılaşmıştır ve bu yaklaşımlardan avantgart kültür döngüsü içerisinde birçok pozitivistik akım doğmuştur."

Çevrimdışı Onur Varol

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 3029
Ynt: Yardım
« Yanıtla #4 : Nisan 02, 2010, 02:31:18 ÖÖ »
Ben olsam swtch-case ifadesini zaten fonksiyon içinde kullanmam. Fonksiyona 2 parametre yollarım. Bide öyle dene istersen hataya bakamadım ama en azından nasıl daha güzel olur onu söleyebilirim

Çevrimdışı Aykut Önol

  • OTOKON Üyesi
  • *
  • İleti: 194
Ynt: Yardım
« Yanıtla #5 : Nisan 02, 2010, 09:20:32 ÖÖ »
Fonksiyona parametre nasıl yollayabilirim peki? :-[
"Diyalektik materyalizm tarihsel gelişim sürecinde birçok realistik ve skolastik yaklaşımla karşılaşmıştır ve bu yaklaşımlardan avantgart kültür döngüsü içerisinde birçok pozitivistik akım doğmuştur."

Çevrimdışı Arif İçke

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 354
Ynt: Yardım
« Yanıtla #6 : Nisan 02, 2010, 10:18:18 ÖÖ »
 x[i+1]=x-((function(x)*h)/(function(x+h)-function(x)));

mesela şu koyu şeyler parametre, fonksiyona yollanan veriler yani, bilmediğin şey değil.

fonksiyona f( x , y ) şeklinde virgül kullanarak 2 parametre de yollayabilirsin.