Реализации различных алгоритмов на Си / поиск метод случайного поиска
.doc
-
Задание
Написать программу, осуществляющую поиск оптимального значения функции или решение уравнения заданным методом. Интервал поиска (или начальную точку – в зависимости от метода) вводит пользователь. На экране пользователю должен отображаться ход решения, т.е. все промежуточные точки и значения функции в этих точках. Начальные условия (функция, интервал/начальная точка) и ход поиска должны дублироваться в текстовый файл. Имя файла вводит пользователь.
7- Метод случайного поиска
Функция: .
Интервал/начальную точку выбирать в пределах [-10;10].
-
Листинг программы
#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;
}
float diff(float x)
{
float exp=2.718281,y;
y=((-x*cos(x*x/10)*pow(exp,x/10)/5 +sin(x*x/10)*pow(exp,x/10)/10)*(x*x+1)-2*x*(sin(x*x/10)*pow(exp,x/10)))/pow((x*x+1),2);
return y;
}
void main()
{
setlocale(LC_ALL,"Rus");
float x1, x2, a, b,e,len,f, n,m;
char name[30];
srand(0);
FILE *fl;
printf("Введите имя файла: ");
scanf("%s", &name);
fl=fopen(name, "a+");
printf("Введите интервал поиска минимума функции [a,b] (a > -10 , b < 10): ");
scanf("%f %f",&a,&b);
printf("Введите погрешность е: ");
scanf("%f",&e);
printf("Начальные условия:\na= %f\nb= %f\ne= %f\n",a,b,e);
fprintf(fl,"Интервал поиска[%f;%f]\nПогрешность:%f\nФункция (sin(x^2/10)*e^(x/10))/(x^2+1)\n",a,b,e);
n=5;
while(abs(n)>e)
{
m=(float)rand()/10000.0;
while(m>b)
m=m-abs(a-b);
while(m<a)
m=m+abs(a-b);
f=diff(m);
printf("точка%f\tзначение в произв%f\n",m,diff(m));
if(abs(f)<n)
n=f;
}
printf("решение значение%f точка%f", function(n),m);
fprintf(fl,"решение %f %f", function(n),m);
getch();
}