#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<stdio.h>
#include<fstream>
using namespace std;
#define F(x) x*x*x-2*x+1//修改函数
int main()
{
double epison = 0.05;
double a[10] = { 0 };
double b[10] = { 0 };
double p[10] = { 0 };
double q[10] = { 0 };
a[0] = 0;
b[0] = 3;
p[0] = a[0] + 0.382 * (b[0] - a[0]);
q[0] = a[0] + 0.618 * (b[0] - a[0]);
int j = 1;
printf("a[0]=%.6lf\t b[0]=%.6lf\t p[0]=%.6lf\t q[0]=%.6lf\n", a[0], b[0], p[0], q[0]);
while (1 && j<10)
{
if (F(p[j - 1]) <= F(q[j - 1]))
{
if (abs(q[j - 1] - a[j - 1]) < 0.15)//修改精度
{
cout <<"STOP!!!!!!!"<<endl;
break;
}
else
{
b[j] = q[j-1];
a[j]= a[j-1];
p[j] = a[j] + 0.382 * (b[j] - a[j]);
q[j] = a[j] + 0.618 * (b[j] - a[j]);
}
}
else
{
if (abs(b[j - 1] - p[j - 1]) < 0.15)//修改精度
{
cout << "STOP!!!!!!!" << endl;
break;
}
else
{
b[j] = b[j - 1];
a[j] = p[j - 1];
p[j] = a[j] + 0.382 * (b[j] - a[j]);
q[j] = a[j] + 0.618 * (b[j] - a[j]);
}
}
printf("a[%d]=%.6lf\t b[%d]=%.6lf\t p[%d]=%.6lf\t q[%d]=%.6lf\n", j, a[j], j, b[j], j, p[j], j, q[j]);
j++;
}
system("pause");
return 0;
}
0.618法迭代求近似极小点
猜你喜欢
转载自blog.csdn.net/yoonaanna/article/details/128956929
今日推荐
周排行