我設計的算法來定義在區間[a,b]上問題找到一個函數的局部最大值用C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.141592653
float funtion_(float a, float x){
float result=0;
result = a * (sin (PI*x));
return result;
}
int main(){
double A = 4.875; //average of the digits of the identification card
double a = 0.0, b =1.0; //maximum and minimum values of the interval [a, b]
double h=0;
double N;
double Max, x;
double sin_;
double inf;
printf ("input the minux value: ");
scanf ("%lf", &inf);
printf ("input the N value: ");
scanf ("%lf", &N);
h= (b-a)/N;
printf("h = %lf\n", h);
x=a-h;
Max = -inf;
do {
x = x+h;
sin_ = funtion_(A, x);
if (sin_>=Max){
Max = sin_;
}
}while (x==b);
printf ("Maximum value: %lf.5", Max);
return 0;
}
給出能夠找到一個函數f(x)的局部最大值的簡單方法
該算法實現函數f(x)= A * sin(pi * x),其中A是我的ID的數字的平均值,並且inf變量被賦予一個數值,該數值遠大於區間[a,b] = [0.1]中的函數。
該算法必須找到該函數的局部最大值,但它的最大回報總是爲零。不明白爲什麼。我的解決方案的邏輯可能是什麼問題?,這個問題可以通過這個簡單的算法來解決,或者通過回溯來進行一些優化是必要的?感謝您的迴應。
'int A = 4.875;'?哎呀:) – sarnold 2011-04-07 00:42:09
yeap一個簡單的錯誤...但是無關緊要..變量A可以取任何值 – franvergara66 2011-04-07 00:56:40
在某些時候,你會考慮減少'funtion _()',所以你不要初始化結果爲0,然後再次設置它。但編譯器/優化器也可能會這樣做。 – 2011-04-07 01:51:46