
C#
Найдите минимум методом дихотомии
Найдите минимум методом дихотомии. Сделать нужно с помощью exel либо c#. Картинка прилагается


Как известно, C# - язык довольно тухлый, а на C++ было бы примерно так:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double f(double x)
{ return 1. - x * x * exp(-x); }
int main()
{
int i = 0;
double a = 0., b = 5., c = b - a, e = 1e-5, ep = e / 2, x;
while (c > e)
{
++i;
x = (a + b) * 0.5;
if (f(x + ep) < f(x - ep)) a = x;
else b = x;
c = b - a;
cout << setw(2) << i << ") " << setprecision(12)
<< fixed << setw(16) << a << setw(16) << b
<< setw(16) << c << endl;
}
system("pause > nul");
return 0;
}
Первые два столбца - это диапазоны [a, b] на i-ом итерационном шаге, а третий столбец - ширина диапазона. Как видно, в методе дихотомии с заданной точностью ε=1e-5 нужно 19 итераций.
Теперь на C#:
using System;
namespace CSharp_Shell
{ class Program
{ double f(double x)
{ return 1.0 - x * x * Math.Exp(-x); }
void Main()
{ double a=0.0, b=5.0, c=5.0, x,
e=1e-5, ep = e/2.0; int i = 0; while (c > e)
{
i++; x = (a + b) * 0.5;
if (f(x + ep) < f(x - ep)) a = x; else b = x;
c = b - a;
Console.WriteLine(i+") "+a+" "+b+" "+c);
} } } }
Вывод вот только можно сделать покрасивее, а то (на правом скрине !) как-то не очень, хотя и те же результаты!. ʘ‿ʘ

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double f(double x)
{ return 1. - x * x * exp(-x); }
int main()
{
int i = 0;
double a = 0., b = 5., c = b - a, e = 1e-5, ep = e / 2, x;
while (c > e)
{
++i;
x = (a + b) * 0.5;
if (f(x + ep) < f(x - ep)) a = x;
else b = x;
c = b - a;
cout << setw(2) << i << ") " << setprecision(12)
<< fixed << setw(16) << a << setw(16) << b
<< setw(16) << c << endl;
}
system("pause > nul");
return 0;
}
Первые два столбца - это диапазоны [a, b] на i-ом итерационном шаге, а третий столбец - ширина диапазона. Как видно, в методе дихотомии с заданной точностью ε=1e-5 нужно 19 итераций.
Теперь на C#:
using System;
namespace CSharp_Shell
{ class Program
{ double f(double x)
{ return 1.0 - x * x * Math.Exp(-x); }
void Main()
{ double a=0.0, b=5.0, c=5.0, x,
e=1e-5, ep = e/2.0; int i = 0; while (c > e)
{
i++; x = (a + b) * 0.5;
if (f(x + ep) < f(x - ep)) a = x; else b = x;
c = b - a;
Console.WriteLine(i+") "+a+" "+b+" "+c);
} } } }
Вывод вот только можно сделать покрасивее, а то (на правом скрине !) как-то не очень, хотя и те же результаты!. ʘ‿ʘ


Ринат Тляумбетов
Спасибо огромное)
Похожие вопросы
- Задание. В классе Program напишите следующие методы и вызовите их в главном методе Main:
- Учитывая целое число n (n>2), напишите метод, который возвращает простые числа из диапазона [2, n].
- Как реализовать данный метод?
- Как можно найти одинаковые элементы массива? С#
- Найти два неотрицательных вещественных числа a и b, такие что a+b=d и a⋅b=d.
- Задайте значения M и N. Напишите программу, которая найдёт сумму натуральных элементов в промежутке от M до N.,
- Дана матрица 4x5 . Найти минимальный элемент в строке, номер которой вводится с клавиатуры.
- [c#] как найти все простые делители числа, ответ в массиве int
- Пожалуйста помогите Я написал скрипт и 2 часа не могу найти там ошибку
- Есть кто разбирается в C# или в ПаскальABC? нужно найти сумму ряда