• Nenhum resultado encontrado

implementalucas

N/A
N/A
Protected

Academic year: 2021

Share "implementalucas"

Copied!
35
0
0

Texto

(1)

PICME

OBMEP - CNPq

Algoritmo GCMRC Gradiente Conjugado Modificado com Região de Confi-ança

//Implementado por Lucas Frank Hollmann como parte do projeto PICME orientado por Paulo Conejo

#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> double Cdouble(char *s) {

int i, mult = 1, dec=0, k=0, neg = 0, j, lul; double val=0, lult = 0.1;

char h[100], l[100]; memset(h, 0, 100); memset(l, 0, 100); j=0; for(i=0;i<strlen(s);i++) { if(s[i] == ’-’) { neg = 1; i++; } if(s[i]==’,’) { dec = 1; i++; } if(dec)

(2)

{ l[k] = s[i]; k++; } else { h[j] = s[i]; j++; } } //printf("h %s\n", h); //printf("l %s\n", l); for(i=strlen(h)-1;i>=0;i--) { h[i] -= 48; val += h[i]*mult; mult = mult*10; } for(i=0;i<strlen(l);i++) { lul = l[i] - 48; val += lul*lult; lult = lult/10; //printf("%lf\n", lult); //printf("%lf\n", val); } //printf("%lf\n \n", val); if(neg) { val = val*-1; } return val; } char *Cchar(double d) {

(3)

int dneg=0, jota; if(d<0) { dneg = 1; d = -1*d; } int i, y, j=0;

double low, high, x, ife=0; char s[100], *s1; s1 = malloc(100*sizeof *s1); high = (int)d; low = d - high; low = low*1000000; //printf("dd %lf\n \n", d); i=0; if(low) { for(jota=1;jota<=6;jota++) { x = (int)low%10; low = low/10; y*=10; ife = 1; s[i] = (int)x+48; i++; } } if(ife) { s[i]=’,’; i++; } y = 10; int first=1; while((int)high || first)

(4)

{ first=0; x = (int)highhigh -= x; x = x/y*10; y = y*10; s[i] = (int)x+48; i++; } s[i] = 0; j=strlen(s)-1; if(dneg) { s1[0] = ’-’; for(i=1;i<=strlen(s);i++) { s1[i] = s[j]; j--; } } else { for(i=0;i<strlen(s);i++) { s1[i] = s[j]; j--; } } //printf("string %s\n", s1); return s1; }

double Rfunction(char *fu, double *x) {

int i, j, k, w, cont, ii, jj, xx, menosvar, notfirst=0, kkk, l, li, ROCKET; double a, oper, oper2;

(5)

strcpy(f,fu);

//printf("ffffffffffff %s\n", f);

//printf("%s\n", f);

//substitui os números nas variáveis { j=0; for(i=0;i<strlen(f);i++) { kkk=i-2; aux[j] = f[i]; j++; if(f[i] == ’x’) { menosvar = 0; if(i>0) { if(f[i-1]==’-’) { menosvar = 1; //printf("%c\n", f[i-1]); } } k=0; i++; while(f[i] >= 48 f[i] <= 57) {

(6)

num[k] = f[i]; //printf("%c\n", num[k]); i++; k++; } num[k]=0; //printf("num %s\n", num); xx = Cdouble(num); //printf("x[xx] %d\n", xx); if(menosvar) { x[xx-1]*=-1; } //printf("x[xx] %lf\n", x[xx-1]); strcpy(num, Cchar(x[xx-1])); //printf("a\n"); //printf("num %s\n", num); j--; if(menosvar) { aux[j-1]=’+’; //printf("j %d\n", j-1); }

else if(menosvar (notfirst || f[kkk] == ’(’)) { j--; } /*else if(menosvar) { aux[j-1]=’+’; //printf("j %d\n", j-1); }*/ for(k=0;k<strlen(num);k++) { aux[j] = num[k]; j++; //printf("aassfdss %d\n", j);

(7)

} i--; //printf("fff %s\n", aux); memset(num, 0, 1000); notfirst = 1; if(menosvar) { x[xx-1]*=-1; } } } aux[j] = 0; //printf("aux %s\n", aux); strcpy(f, aux); //printf("ffffffffffff %s\n", f); memset(aux, 0, 1000); j=0; } //printf("%s\n", f); //printf("%s\n", f);

//resolve o que está entre parênteses { w=0; for(i=0;i<strlen(f);i++) { aux[w] = f[i]; w++; if(f[i] == ’(’) { cont = 1; ii = i; i++; while(cont) { if(f[i] == ’(’) {

(8)

cont++; } if(f[i] == ’)’) { cont--; } i++; } i--; jj = i; k=0; for(j=ii+1;j<=jj;j++) { if(j==jj) { new[k] = 0; } else { new[k++] = f[j]; } if(j==jj) { a = Rfunction(new, x); } } strcpy(num, Cchar(a)); w--; for(k=0;k<strlen(num);k++) { aux[w] = num[k]; w++; //printf("aassfdss %d\n", j); } } }

(9)

w++; aux[w] = 0; strcpy(f, aux); }

//printf("ffffffffffff %s\n", f);

//resolve as funções trigonométricas, logarítmicas e raízes { memset(aux, 0, 1000); memset(num, 0, 1000); l=0; for(i=0;i<strlen(f);i++) { aux[l]=f[i]; l++; //cosseno

if(f[i]==’c’ f[i+1]==’o’ f[i+2]==’s’) { k=i+3; j=0; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } i = k-1; //printf("num1 %s\n", num); oper = Cdouble(num); oper = oper*0.017453278; //printf("oper %lf\n", oper); memset(num, 0, 1000); oper = cos(oper); //printf("oper2 %lf\n", oper);

(10)

strcpy(num,Cchar(oper)); //printf("num %s\n", num); l--; for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++; } memset(num, 0, 1000); } //seno

if(f[i]==’s’ f[i+1]==’e’ f[i+2]==’n’) { k=i+3; j=0; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } i = k-1; //printf("num1 %s\n", num); oper = Cdouble(num); oper = oper*0.017453278; //printf("oper %lf\n", oper); memset(num, 0, 1000); oper = sin(oper); //printf("oper2 %lf\n", oper); strcpy(num,Cchar(oper)); //printf("num %s\n", num); l--; for(j=0;j<strlen(num);j++) {

(11)

aux[l] = num[j]; l++; } memset(num, 0, 1000); } //tangente if(f[i]==’t’ f[i+1]==’g’) { k=i+2; j=0; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } i = k-1; //printf("num1 %s\n", num); oper = Cdouble(num); oper = oper*0.017453278; //printf("oper %lf\n", oper); memset(num, 0, 1000); oper = tan(oper); //printf("oper2 %lf\n", oper); strcpy(num,Cchar(oper)); //printf("num %s\n", num); l--; for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++; } memset(num, 0, 1000);

(12)

}

//logaritmo natural

if(f[i]==’l’ f[i+1]==’o’ f[i+2]==’g’ f[i+3]==’n’) { k=i+4; j=0; //printf("cccc %c\n", f[k]); while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } i = k-1; //printf("num1 %s\n", num); oper = Cdouble(num); //oper = oper*0.017453278; //printf("oper %lf\n", oper); memset(num, 0, 1000); oper = log(oper); //printf("oper2 %lf\n", oper); strcpy(num,Cchar(oper)); //printf("num %s\n", num); l--; for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++; } memset(num, 0, 1000); }

//logaritmo com base 10

if(f[i]==’l’ f[i+1]==’o’ f[i+2]==’g’) {

(13)

k=i+3; j=0; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } i = k-1; //printf("num1 %s\n", num); oper = Cdouble(num); //oper = oper*0.017453278; //printf("oper %lf\n", oper); memset(num, 0, 1000); oper = log10(oper); //printf("oper2 %lf\n", oper); strcpy(num,Cchar(oper)); //printf("num %s\n", num); l--; for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++; } memset(num, 0, 1000); }

//raiz com qualquer índice

if(f[i]==’r’ f[i+1]==’a’ f[i+2]==’i’ f[i+3]==’z’ f[i+4]==’’) {

k=i+5; j=0;

(14)

while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } num[k]=0; if(f[k]==’;’) { k++; j=0; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { new[j] = f[k]; k++; j++; } new[j]=0; } i = k-1; //printf("num1 %s\n", new); oper = Cdouble(num); oper2 = Cdouble(new); //printf("oper %lf\n", oper2); oper2 = 1/oper2; //oper = oper*0.017453278; //printf("oper %lf\n", oper2); memset(num, 0, 1000); memset(new, 0, 1000); oper = pow(oper,oper2); //printf("oper2 %lf\n", oper); strcpy(num,Cchar(oper)); //printf("num %s\n", num); l--; for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++;

(15)

} memset(num, 0, 1000); memset(new, 0, 1000); i++; } } strcpy(f,aux); //printf("ff:: %s\n", f); } //resolve potências { memset(aux, 0, 1000); memset(num, 0, 1000); memset(new, 0, 1000); l=0; for(i=0;i<strlen(f);i++) { aux[l]=f[i]; l++; if(f[i]==’ˆ’) { k=i+1; j=0; while((f[k]==’-’ k==(i+1))|| f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } li=i;

(16)

i=k; k=li-1; j=0; l--; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { new[j] = f[k]; aux[l] = 0; k--; l--; j++; if(f[k]==’-’) break; } //printf("num %s\n", num); //printf("new %s\n", new); l=k+1; oper2 = Cdouble(num); memset(num, 0, 1000); li = strlen(new)-1; for(j=0;j<strlen(new);j++) { num[j] = new[li]; li--; } //printf("num %s\n", num); oper = Cdouble(num); //printf("oper %lf\n", oper); oper = pow(oper,oper2); memset(num, 0, 1000); strcpy(num, Cchar(oper)); //printf("num %s\n", num); for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++;

(17)

} //printf("aux %s\n", aux); //i--; for(i=i;i<strlen(f);i++) { //printf("aaaaaaaaaaaaaa\n"); aux[l]=f[i]; l++; } i=-1; strcpy(f,aux); memset(aux, 0, 1000); memset(num, 0, 1000); memset(new, 0, 1000); l=0; //printf("fff-> %s\n", f); } } //printf("aux %s\n", aux); //strcpy(f,aux); } //resolve multiplicação { memset(aux, 0, 1000); memset(num, 0, 1000); memset(new, 0, 1000); l=0; for(i=0;i<strlen(f);i++) { aux[l]=f[i]; l++; //printf("aux-> %s\n", aux); if(f[i]==’*’) {

(18)

k=i+1; j=0; while((f[k]==’-’ k==(i+1))|| f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } li=i; i=k; k=li-1; j=0; l--; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { new[j] = f[k]; aux[l] = 0; k--; l--; j++; if(f[k]==’-’) break; } //printf("num %s\n", num); //printf("new %s\n", new); l=k+1; oper2 = Cdouble(num); memset(num, 0, 1000); li = strlen(new)-1; for(j=0;j<strlen(new);j++) { num[j] = new[li]; li--; } //printf("num %s\n", num); oper = Cdouble(num);

(19)

oper = oper*oper2; memset(num, 0, 1000); strcpy(num, Cchar(oper)); //printf("oper %lf\n", oper); //printf("num %s\n", num); for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++; } //printf("aux %s\n", aux); for(i=i;i<strlen(f);i++) { //printf("aaaaaaaaaaaaaa\n"); aux[l]=f[i]; l++; } i=-1; strcpy(f,aux); memset(aux, 0, 1000); memset(num, 0, 1000); memset(new, 0, 1000); l=0; //printf("fff*-> %s\n", f); } } //printf("aux %s\n", aux); //strcpy(f,aux); } //resolve divisões { memset(aux, 0, 1000); memset(num, 0, 1000); memset(new, 0, 1000); l=0;

(20)

for(i=0;i<strlen(f);i++) { aux[l]=f[i]; l++; if(f[i]==’/’) { k=i+1; j=0; while((f[k]==’-’ k==(i+1))|| f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } li=i; i=k; k=li-1; j=0; l--; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { new[j] = f[k]; aux[l] = 0; k--; l--; j++; if(f[k]==’-’) break; } //printf("num %s\n", num); //printf("new %s\n", new); l=k+1; oper2 = Cdouble(num); memset(num, 0, 1000); li = strlen(new)-1; for(j=0;j<strlen(new);j++) {

(21)

num[j] = new[li]; li--; } //printf("num %s\n", num); oper = Cdouble(num); oper = oper/oper2; memset(num, 0, 1000); strcpy(num, Cchar(oper)); //printf("oper %lf\n", oper); //printf("num %s\n", num); for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++; } //printf("aux %s\n", aux); //i--; for(i=i;i<strlen(f);i++) { //printf("aaaaaaaaaaaaaa\n"); aux[l]=f[i]; l++; } i=-1; strcpy(f,aux); memset(aux, 0, 1000); memset(num, 0, 1000); memset(new, 0, 1000); l=0; //printf("fff-> %s\n", f); } } //printf("aux %s\n", aux); //strcpy(f,aux); }

(22)

//resolve somas { memset(aux, 0, 1000); memset(num, 0, 1000); memset(new, 0, 1000); l=0; for(i=0;i<strlen(f);i++) { aux[l]=f[i]; l++; if(f[i]==’+’) { k=i+1; j=0; while((f[k]==’-’ k==(i+1))|| f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } li=i; i=k; k=li-1; j=0; l--; ROCKET=0; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { new[j] = f[k]; aux[l] = 0; k--; l--; j++; if(f[k+1]==’-’) { // printf("xD\n");

(23)

if((k+1)!=0) { ROCKET=1; } break; } } //printf("num %s\n", num); //printf("new %s\n", new); l=k+1; oper2 = Cdouble(num); //printf("oper2 %lf\n", oper2); memset(num, 0, 1000); li = strlen(new)-1; for(j=0;j<strlen(new);j++) { num[j] = new[li]; li--; } //printf("num %s\n", num); oper = Cdouble(num); oper = oper+oper2; if(oper<0) { ROCKET=0; } memset(num, 0, 1000); strcpy(num, Cchar(oper)); //printf("oper %lf\n", oper); //printf("num %s\n", num); if(ROCKET) { aux[l]=’+’; l++; }

(24)

for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++; } //printf("aux %s\n", aux); //i--; for(i=i;i<strlen(f);i++) { //printf("aaaaaaaaaaaaaa\n"); aux[l]=f[i]; l++; } i=-1; strcpy(f,aux); memset(aux, 0, 1000); memset(num, 0, 1000); memset(new, 0, 1000); l=0; //printf("fff +-> %s\n", f); } } //printf("aux %s\n", aux); //strcpy(f,aux); } //resolve subtrações { memset(aux, 0, 1000); memset(num, 0, 1000); memset(new, 0, 1000); l=0; for(i=0;i<strlen(f);i++) { aux[l]=f[i]; l++;

(25)

if(f[i]==’-’ i!=0) { k=i+1; j=0; while((f[k]==’-’ k==(i+1)) || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { num[j] = f[k]; k++; j++; } li=i; i=k; k=li-1; j=0; l--; while(f[k]==’-’ || f[k]==’,’ || (f[k]>=48 f[k]<=57)) { new[j] = f[k]; aux[l] = 0; k--; l--; j++; if(f[k+1]==’-’) { break; } } //printf("num %s\n", num); //printf("new %s\n", new); l=k+1; oper2 = Cdouble(num); //printf("oper2 %lf\n", oper2); memset(num, 0, 1000); li = strlen(new)-1; for(j=0;j<strlen(new);j++) { num[j] = new[li]; li--;

(26)

} //printf("num %s\n", num); oper = Cdouble(num); oper = oper-oper2; memset(num, 0, 1000); strcpy(num, Cchar(oper)); //printf("oper %lf\n", oper); //printf("num2 %s\n", num); for(j=0;j<strlen(num);j++) { aux[l] = num[j]; l++; } //printf("aux %s\n", aux); //i--; for(i=i;i<strlen(f);i++) { //printf("aaaaaaaaaaaaaa\n"); aux[l]=f[i]; l++; } i=-1; strcpy(f,aux); memset(aux, 0, 1000); memset(num, 0, 1000); l=0; //printf("fff-> %s\n", f); } } //printf("aux %s\n", aux); //strcpy(f,aux); } //printf("ff %s\n", f); a = Cdouble(f);

(27)

return a; }

int ndim;

double *MGC(double n, double regconf, double e, double **a, double yi[]) {

int i, j,jj;

double *x0, *gradiente, *d0, beta, *da, dad, pd, tal, dn, xn, *xa, *r, z, z1, alpha; x0 = malloc(1000 * sizeof *x0);

gradiente = malloc(1000 * sizeof *gradiente); d0 = malloc(1000 * sizeof *d0);

da = malloc(1000 * sizeof *da); xa = malloc(1000 * sizeof *xa); r = malloc(1000 * sizeof *r); for(i=0;i<n;i++)//x0 = 0,0,0,... { x0[i]=0; } z = 0; for(i=0;i<n;i++)//r0 = -gc d0 = r0 z = r*r { r[i] = -1*yi[i]; //printf("r1: %lf\n", r[i]); d0[i] = r[i]; z+=r[i]*r[i]; } //início da repetição for(jj=0;jj<n;jj++) { for(i=0;i<n;i++) //dA { da[i]=0; for(j=0;j<n;j++) { da[i] += a[j][i]*d0[j];

(28)

} } dad = 0; for(i=0;i<n;i++) //dAd { dad += da[i]*d0[i]; } //printf("dad: %lf\n", dad); if(dad <= 0) { tal = 0; dn=0; pd=0; for(i=0;i<n;i++) { pd+=x0[i]*d0[i]; } xn=0; for(i=0;i<n;i++) { xn+=x0[i]*x0[i]; } for(i=0;i<n;i++) { dn+=d0[i]*d0[i]; } tal = (-2*pd+sqrt(4*pd*pd-4*(xn-regconf*regconf)*dn))/(2*dn); for(i=0;i<n;i++) {

x0[i] = x0[i] + tal*d0[i]; }

(29)

return x0; } alpha = z/dad; xn = 0; for(i=0;i<n;i++) //xk+1 = xk + d0*alpha {

xa[i] = x0[i] + alpha*d0[i]; xn+=xa[i]*xa[i];

//printf("x1: %lf\n", xa[i]); }

//printf("xn: %lf\n", xn); xn = sqrt(xn);

if(xn > regconf) // ponto fora da região de confiança { tal = 0; dn=0; pd=0; for(i=0;i<n;i++) { pd+=x0[i]*d0[i]; } xn=0; for(i=0;i<n;i++) { xn+=x0[i]*x0[i]; } for(i=0;i<n;i++) { dn+=d0[i]*d0[i]; } tal = (-2*pd+sqrt(4*pd*pd-4*(xn-regconf*regconf)*dn))/(2*dn);

(30)

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

x0[i] = x0[i] + tal*d0[i]; }

return x0; }

z1=0;

for(i=0;i<n;i++) //ri+1 = ri - alpha*da || z1 = r1*r1 {

r[i] = r[i] - alpha*da[i]; z1 += r[i]*r[i]; } if(sqrt(z1) < e) { return xa; } beta = z1/z; for(i=0;i<n;i++) {

d0[i] = r[i] + beta*d0[i]; x0[i] = xa[i]; } z = z1; } return x0; }

double **a, b[1000], *p, somgrad=1, ared, pred, b1[1000], mk[1000], mk1, grads[1000], RC=2, g0, iter=0;

int k;

(31)

int i, j;

double **makemat(double **a, double *xis) { int i, j, k=0; /*for(i=0;i<ndim;i++) { for(j=0;j<ndim;j++) { //printf("s: %s\n", fun[k]); //a[i][j] = Rfunction(fun[k],xis); //printf("%lf ", a[i][j]);

//printf("jj %lf %lf\n", xis[0] ,xis[1]); //k++; } printf("\n"); }*/ a[0][0] = 2-400*b[1]+1200*b[0]*b[0]; a[0][1] = -400*xis[0]; a[1][0] = -400*xis[0]; a[1][1] = 200; return a; } int main() { ndim=2;

//aloca dinamicamente a matriz A e o vetor p; a = malloc(50 * sizeof *a);

p = malloc(1000 * sizeof *p); for(i=0;i<1000;i++)

{

a[i] = malloc(50 * sizeof *a[i]); }

(32)

//início

/*printf("Dimensão do problema: "); scanf("%d", ndim);

printf("Função a ser minimizada: "); scanf("%s", func); */ printf("Vetor X0:\n"); for(j=0;j<ndim;j++)//scanf vetor b { scanf("%lf", b[j]); } /* printf("Gradiente da função:\n"); for(j=0;j<ndim;j++) { scanf("%s", grad[j]); } //for(j=0;j<ndim;j++) //{ // printf("%lf ", p[j]); //} printf("Hessiana da função:\n"); for(j=0;j<ndim*ndim;j++) { scanf("%s", fun[j]); }*/ grads[0] = -400*b[0]*(b[1]-(b[0]*b[0]))-2*(1-b[0]); grads[1] = 200*(b[1]-(b[0]*b[0])); somgrad = 0; for(j=0;j<ndim;j++) { /*grads[j] = Rfunction(grad[j], b); printf("grad %d %lf\n", j+1 ,grads[j]);*/ somgrad=somgrad + (grads[j]*grads[j]); } //printf("Valor de f(x): %lf\n", Rfunction(func, b));

(33)

somgrad = sqrt(somgrad); //tomar ared g0 = somgrad; while(somgrad>0.000001) { a=makemat(a, b); p=MGC(ndim, RC, 0.1, a, grads); /*printf("Ponto p: "); for(j=0;j<ndim;j++) { printf("%.2lf ", p[j]); } printf("\n");*/ //ared = Rfunction(func, b); //printf("ared0 %lf\n", ared); for(j=0;j<ndim;j++) { b1[j] = b[j]+p[j]; }

//ared = ared - Rfunction(func,b1);

ared = 100*(b[1]-(b[0]*b[0]))*(b[1]-(b[0]*b[0]))+(1-b[0])*(1-b[0]); ared = ared - 100*(b1[1]-(b1[0]*b1[0]))*(b1[1]-(b1[0]*b1[0]))+(1-b1[0])*(1-b1[0]); //printf("b1 %lf\n", Rfunction(func,b1)); //=================================================================================================// mk1=0; for(j=0;j<ndim;j++) { mk[j] = 0; for(k=0;k<ndim;k++) { mk[j]+=a[j][k]*p[k]; } mk1+=mk[j]*p[j]/* + grads[j]*p[j]*/; } mk1=mk1/2; for(j=0;j<ndim;j++) {

(34)

mk1+=grads[j]*p[j]; } mk1=-1*mk1; //pred //printf("ared %lf\n", ared); //printf("pred %lf\n", mk1); if(ared > 0.2*mk1) { //printf("xD\n"); for(j=0;j<ndim;j++) { b[j] = b1[j]; } RC=RC*2; } else { RC=RC*0.5; } somgrad = 0; /*printf("Ponto de mínimo: "); for(j=0;j<ndim;j++) { printf("%.2lf ", b[j]); } printf("\n");*/ grads[0] = -400*b[0]*(b[1]-(b[0]*b[0]))-2*(1-b[0]); grads[1] = 200*(b[1]-(b[0]*b[0])); for(j=0;j<ndim;j++) { /*grads[j] = Rfunction(grad[j], b);

printf("jj %lf %lf\n", grads[0] ,grads[1]);*/ somgrad=somgrad + (grads[j]*grads[j]);

(35)

printf("Valor de f(x): %lf\n", 100*(b[1]-(b[0]*b[0]))*(b[1]-(b[0]*b[0]))+(1-b[0])*(1-b[0])); //memset(b1, 0, 1000); iter++; } printf("Ponto de mínimo: "); for(j=0;j<ndim;j++) { printf("%.2lf ", b[j]); } printf("\n"); printf("Valor minimo de f(x): %lf\n", 100*(b[1]-(b[0]*b[0]))*(b[1]-(b[0]*b[0]))+(1-b[0])*(1-b[0]));

printf("Numero de iteracoes: %.0lf\n", iter);

return 0; }

Referências

Documentos relacionados

tilápias em cubos empanados na farinha panko ao molho de alho divino 404 Picanha Acebolada com Fritas e Vinagrete.. deliciosas tiras de picanha acebolada, acompanhadas de

ARGAMASSA TRAÇO 1:4 E EMULSÃO POLIMÉRICA (ADESIVO) COM PREPARO MANUAL... TABELA CÓDIGO ITEM DESCRIÇÃO DOS

SMHS – Área Especial – Quadra 101 – Brasília – DF. O candidato PCD poderá ser eliminado do processo, em qualquer etapa, caso: a) não envielaudo médico;.. b) o parecer do

[r]

nos filmes da franquia e, a partir disso, executar uma pesquisa que mostrasse ou não o interesse do público pelas personagens em diferentes pontos da narrativa transmidiática

cubos de frango empanados na farinha panko, acompanhado do espetacular molho divino 104 Polenta Frita com Calabresa. polenta frita acompanhada de molho de calabresa defumada

Franco Montoro e Peixoto Advogados - Pagamento do escritório que atua na defesa dos autos da ação declaratória de nulidade proposta pelo estado de São. Paulo -

Numa determinada rodada, todos os jogadores apostaram em apenas 2 n´ umeros, todos eles venceram, e nenhum deles escolheu o mesmo par de n´ umeros que outro jogador... Utilize