Автор работы: Пользователь скрыл имя, 25 Ноября 2015 в 16:10, курсовая работа
Очень часто в различных областях экономики приходится встречаться с математическими задачами, для которых не удается найти решение классическими методами или решения выражены громоздкими формулами, которые не приемлемы для практического использования. Поэтому большое значение приобрели численные методы. В большинстве случаев численные методы являются приближенными, так как с их помощью обычно решаются задачи, аппроксимирующие исходные. В ряде случаев численный метод строится на базе бесконечного процесса, который в пределе сводится к искомому решению. Однако реально предельный переход не удается осуществить, и процесс, прерванный на некотором шаге, дает приближенное решение.
Текст задания …………………………………………………………………………..
3
Введение………………………………………………………………………………...
4
Метод хорд……………………………………………………………………………...
5
Метод итераций………………………………………………………………………...
7
методом Горнера (уточнение корней)………………………………………………...
11
Алгоритм выполнения задания в виде блок-схемы……………………………….....
12
Исходный текст программы…………………………………………………………...
13
Сеансы работы программы…………………………………………………………….
18
Заключение……………………………………………………………………………...
19
Список источников....................................................
}
double find(double infinum, double supremum, double epsilon)
{
while (fabs(supremum - infinum) > epsilon)
{
infinum = supremum - (supremum - infinum) * func(supremum) / (func(
supremum) - func(infinum));
supremum = infinum - (infinum - supremum) * func(infinum) / (func(
infinum) - func(supremum));
}
return supremum;
}
int main()
{
double a = -5, b = 5;
std::cout << find(a, b, 0.0001) << std::endl;
return 0;
}
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <math.h>
using namespace std;
double f1(double c)//новая функция фи
{
double z=7/(2*c+6);
return(pow(10, z));
}
int main()
{
int n=0;
double a,b,E,x,z,g;
cout<<"vvedite a"<<endl;
cin>>a;
cout<<"vvedite b"<<endl;
cin>>b;
cout<<"vvedite E"<<endl;
cin>>E;
x=(a+b)/2;
do
{
z=x;
x=f1(x);
n++;
}
while ((fabs(x-z))>=E);
cout<<endl;
cout<<"x="<<x<<endl;
cout<<"n="<<n<<endl;
getch ();
}
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
#include <list>
typedef std::list<long> CoefList;
typedef CoefList RootList;
/* getRoots() возвращает список корней многочлена.
В строке inputStr задаются коэффициенты многочлена - целые числа,
разделенные пробельными символами */
RootList getRoots(const std::string& inputStr);
// а сюда передается список
коэффициентов от самого
RootList getRoots(const CoefList& coefList);
// возвращает остаток от деления многочлена с коэффициентами coefList на (x - x0)
long getRest(const CoefList& coefList, const long& x0);
int main()
{
std::string coefStr;
RootList rootList;
int n = 0;
std::cout << "введите коэфициенты при неизвестных: ";
std::getline(std::cin, coefStr);
rootList = getRoots(coefStr);
if (rootList.empty())
{
std::cout << "Целых корней нет." << std::endl;
}
n = 0;
for (RootList::const_iterator i = rootList.begin(); i != rootList.end(); ++i)
{
n++;
std::cout << "x" << n << " = " << *i << std::endl;
}
return 0;
}
RootList getRoots(const std::string& inputStr)
{
std::istringstream strStream(inputStr);
CoefList coefList;
long tmp;
while (strStream >> tmp)
{
coefList.push_back(tmp);
}
// избавляемся от лидирующих нулей
while (!coefList.empty() && coefList.front() == 0)
coefList.pop_front();
return getRoots(coefList);
}
RootList getRoots(const CoefList& coefList)
{
RootList rootsList; // список корней
long a0 = abs(coefList.back()); // модуль свободного члена
const long MAX_A0_DIVISOR = a0 / 2; // максимальный делитель свободного члена
if (coefList.empty())
// если пустое уравнение
return RootList();
for (long a0_divisor = 1; a0_divisor <= MAX_A0_DIVISOR; ++a0_divisor)
{
if (a0 % a0_divisor != 0)
// если не делится нацело, то это не корень
continue;
// проверка корней
if (getRest(coefList, a0_divisor) == 0)
rootsList.push_back(a0_
if (getRest(coefList, -a0_divisor) == 0)
rootsList.push_back(-a0_
}
// проверка на корень
самого коэффициента
if (getRest(coefList, a0) == 0)
rootsList.push_back(a0);
if (getRest(coefList, -a0) == 0)
rootsList.push_back(-a0);
return rootsList;
}
long getRest(const CoefList& coefList, const long& x0)
{
long rest = 0;
for (CoefList::const_iterator i = coefList.begin(); i != coefList.end(); ++i)
{
rest = x0 * rest + (*i);
}
return rest;
}
Сеансы работы программы
Заключение
При выполнении данной работы были рассмотрены теоретически и практически основные характеристики методов простой хорд, итерации и методом Горнера для решения систем нелинейных уравнений.
Результаты наших исследований таковы:
- метод простой итерации проще
в реализации, чем метод Ньютона
– он не требует, в частности,
расчета матрицы Якоби на каждом шаге;
- методы сходятся за небольшое количество
итераций, если начальное приближение
взято близко к точному решению
- при отдалении начального
- при очень сильном отдалении
от начального решения
- при уменьшении допустимой ошибки вычислительные затраты метода простой итерации значительно больше, чем метода Ньютона, но не так велики, как при увеличении начальных приближений на тот же порядок – то есть изменение точности имеет меньшее влияние на параметры сходимости, чем изменение начального приближения;
Метод хорда для решения систем двух нелинейных уравнений оказался более эффективным, чем метод простой итерации по всем рассматриваемым параметрам.
Список источников
Информация о работе Решение нелинейных алгебраических уравнений