⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 steep1.c~

📁 c code for steepest decent method
💻 C~
字号:
#include<stdio.h>#include<math.h>#include<stdlib.h>#define N 1000 /* ITERATIONS */    	double  grad1,grad2,grad3;double gradient (double x1,double x2,double x3,int i);double main_function(double a,double x1,double grad1,double x2,double grad2,double x3,double grad3);double alfa(double x1,double grad1,double x2,double grad2,double x3,double grad3);double alfa(double x1,double grad1,double x2,double grad2,double x3,double grad3){        double a[100], b[100], fxa, fxb, minimum;        int i=0;        a[0]=-10;	b[0]=10;                do{                          i++;        		   a[i] = a[i-1]+0.3819*(b[i-1]-a[i-1]);                   b[i] = b[i-1]-0.3819*(b[i-1]-a[i-1]);		 fxa = main_function(a[i],x1,grad1,x2,grad2,x3,grad3);                 fxb = main_function(b[i],x1,grad1,x2,grad2,x3,grad3);        	if(fxa < fxb){	                    a[i]=a[i-1];    b[i]=b[i];                            if(fabs(b[i]-a[i]) < 0.0000001){                            	minimum=a[i];			   	break;			    	}                }	        else{    		            a[i] = a[i]; b[i]=b[i-1];                                          if(fabs(b[i]-a[i]) < 0.0000001){                            	minimum=b[i];			    	break;			    	}                }    }       while(fabs(b[i]-a[i]) > 0.0000001);       printf("Alfa =%lf\n", minimum);       return minimum;}double main_function(double a,double x1,double grad1,double x2,double grad2,double x3,double grad3){        double s = x1 -a*grad1 - 4;        double t = x2 -a*grad2 - 3;        double u = x3 -a*grad3 + 5;        return (pow(s,4) + pow(t,2) + 4*pow(u,4));}double gradient(double x1,double x2,double x3, int i){	if (i == 0)  {	  return (4*pow((x1- 4),3));	}else if (i == 1) { 	  return (2*(pow((x2-3),1)));	}else if (i ==  2) {	  return (16*pow((x3+5),3));	}	return i;}int main (int argc,char*argv[]){	double a;    /* ALFA*/	int i,j, k;	double x[N][3];	double eps = 0.0001;	double grad[3];	if (argc != 3+1) {		printf("Please enter the initial 3 guesses.\n");		exit(0);	}		for (i=0;i<1;i++) {		for (j=0;j<=(2);j++) {		       sscanf(argv[j+1],"%lf",&x[i][j]);			printf("\nThe intial guess x[%d][%d] is %lf",i,j,x[i][j]);		}	}	printf("\n");	j = 0;	for (i=0; i<=N;i++) {	       for(k=0;k<=2;k++){	                         grad[k]= gradient ((x[i][j]),(x[i][j+1]),(x[i][j+2]),k);	        }	                       			a = alfa(x[i][j],grad[0],x[i][j+1],grad[1],x[i][j+2],grad[2]);			printf("%lf\t%lf\t%lf\t\n",grad[0],grad[1],grad[2]);					x[i+1][j]   = x[i][j]   - a * grad[0];			x[i+1][j+1] = x[i][j+1] - a * grad[1];			x[i+1][j+2] = x[i][j+2] - a * grad[2];			printf("\nx[%d][%d]:%lf\t,x[%d][%d]:%lf\t,x[%d][%d]:%lf\n",i+1,j+1,(x[i+1][j]),i+1,j+2,(x[i+1][j+1]),i+1,j+3,(x[i+1][j+2]));						if (fabs(x[i+1][j] - x[i][j]) < eps && fabs(x[i+1][j+1] - x[i][j+1]) < eps && fabs(x[i+1][j+2] - x[i][j+2]) < eps) {				printf("\nx1: %lf\t,x2: %lf\t,x3: %lf\n",(x[i][j]),(x[i][j+1]),(x[i][j+2]));				exit(0);									}		}		return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -