Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реализации различных алгоритмов на Си / поиск метод фибоначчи

.doc
Скачиваний:
19
Добавлен:
20.06.2014
Размер:
70.14 Кб
Скачать

2

  1. Задание

Написать программу, осуществляющую поиск оптимального значения функции или решение уравнения заданным методом. Интервал поиска (или начальную точку – в зависимости от метода) вводит пользователь. На экране пользователю должен отображаться ход решения, т.е. все промежуточные точки и значения функции в этих точках. Начальные условия (функция, интервал/начальная точка) и ход поиска должны дублироваться в текстовый файл. Имя файла вводит пользователь.

Алгоритм оптимизации

Функция

2 – метод Фибоначчи


Функция: .

Интервал/начальную точку выбирать в пределах [-10;10].

  1. Листинг программы

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <locale.h>

#include <math.h>

float function(float x)

{

float exp=2.718281, y;

y=(sin(x*x/10)*pow(exp,x/10))/(x*x+1);

return y;

}

void main()

{

setlocale(LC_ALL,"Rus");

float x1, x2, a, b, P1=1.0, P2=1.0;

char name[30];

int i=0,n;

FILE *fp;

printf("Введите имя файла: ");

scanf("%s",&name);

printf("Введите интервал поиска минимума функции [a,b] (a > -10 , b < 10): ");

scanf("%f",&a);

scanf("%f",&b);

printf("Введите количество итераций n: ");

scanf("%f",&n);

fp=fopen(name,"a+");

fprintf(fp,"Начальные условия:\na= %f\nb= %f\ne= %f",a,b,e);

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

{

x1=b-(P1/P2)*(b-a);

x2=a+(P1/P2)*(b-a);

if(function(x1)>function(x2))

a=x1;

else if(function(x1)<function(x2))

b=x2;

P2=P1+P2;

P1=P2-P1;

printf("\nШаг %d: \nТекущий интервал поиска:%f %f\nЗначения в этих точках: %f %f",i,a,b,function(a),function(b));

fprintf(fp,"\nШаг %d: \nТекущий интервал поиска:%f %f\nЗначения в этих точках: %f %f",i,a,b,function(a),function(b));

}

printf("\nl* %f %f\n",a,b);

if(function(a)<function(b))

printf("\nx= %f\ny= %f",a,function(a));

else

printf("\nx= %f\ny= %f",b,function(b));

fclose(fp);

getch();

}