Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- #include <stdlib.h>
- #include <math.h>
- using namespace std;
- #define n 2
- double f(double *x)
- {
- int i;
- double output=0;
- for (i=0; i<n;i++)
- {
- output +=(x[i]-2)*(x[i]-2);
- }
- return output;
- }
- int coorddescent (double pas, double alfa, double epsilon, double *x)
- {
- int i;
- float out;
- int steps=0;
- double dist = 10*epsilon;
- int directie=1;
- int x1[n];
- int x2[n];
- while (dist>=epsilon)
- {
- for(i=0;i<n;i++)
- {
- x1[i]=x[i];
- out=f(x);
- directie=1;
- x[i]=x[i]+directie*pas;
- steps++;
- if (out<f(x))
- {
- directie= -1;
- x[i]=x[i]+directie*pas;
- steps++;
- }
- printf ("out=%f, f=%f, directie=%d\n",out, f(x),directie);
- while (out >= f(x))
- {
- out= f(x);
- x[i]=x[i]+directie*pas;
- steps++;
- printf ("out=%f, f=%f, dist=%f\n",out, f(x),dist);
- }
- x2[i] = x[i];
- printf("x[%d]=%f\n",i,x[i]);
- }
- for(int j=0;j<n;j++)
- {
- dist += (x1[j]-x2[j])*(x1[j]-x2[j]);
- }
- dist = sqrt(dist);
- pas=pas*alfa;
- printf("pas=%f\n\n",pas);
- dist = 0;
- }
- return steps;
- }
- int main ()
- {
- int i;
- double pas=1;
- double alfa=0.5;
- double epsilon=0.0001;
- double x[n]={10.5 , 10};
- printf("steps= %d\n ", coorddescent(pas, alfa,epsilon,x));
- for (i=0; i<n;i++)
- {
- printf("x[%d] =%2.5f\n",i , x[i]);
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement