PDA

Просмотр полной версии : Нелинейные уравнения



prikolist
06.06.2009, 21:51
Здравствуйте программисты! Дали решить 2 нелинейных уравнения,фото ниже. Нужно отделить графически или аналитически корни уравнений(найти отрезок [a,b] на котором находится только один корень) и уточнить по одному корню для каждого уравнения с точностью E=0.001 c помощью:
-метода половинного деления;
-метода хорд;
-метода касательной;
-комбинированного метода;
-метода итераций.

Я попробывал методом половинного деления, проверьте пожалуйста, просто, мне нужно чтоб выдавало результат 2-х интегралов, а выдаёт одного, и не находит корня.
Вот исходник:



#include <vcl>
#include <iostream>
#include <cmath>
using namespace std;
const double epsilon = 1e-2;

double f(double x)
{
return 9.25*pow(x,4)-3*x*x+6.25*x;
}

int main()
{
double a, b, c;
a = 0;
b = 2;
while (b - a > epsilon){
c = (a + b) / 2;
if(f(b) * f(c) < 0)
a = c;
else
b = c;
}
cout << (a + b) / 2 << endl;
system("pause");
return 0;
}

Вот 2 уравнения,которые нужно решить:
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Вот так,получилось:



#include <vcl>
#include <iostream>
#include <cmath>
using namespace std;
const double epsilon = 1e-3;
double f1(double x);
double f2(double x);
void integral(double (*f) (double), double start, double end);
int main()
{
cout<<" --------Metod leviyx priamoygolnikov---------"<<endl<<endl;
integral(&f1,0,2);
integral(&f2,0.001,8);
system("pause");
}
double f1(double x )
{
return 9.25*pow(x,4)-3*x*x+6.25*x;
}
double f2(double x)
{
return 2*x-log10(x)-7;
}
void integral(double (*f) (double), double start, double end )
{
double a, b, c;
a = start;
b = end;
while (fabs(b - a) >= epsilon)
{
c = (a + b) / 2;
if(f(a) * f(c) < 0)
a = c;
else
b = c;
}
cout << (a + b) / 2 << endl;
//cout<<f((a+b)/2)<<endl;
}


подскажите пожалуйста,как реализовать теперь методом хорд,касательной,комбиниро ваного и итераций. Зараннее благодарю.

azrael
07.06.2009, 16:08
Вы у себя последнюю строку раскомментируйте и посмотрите что получится - точность одна тысячная, а значение функции f1 отлично от нуля на три тысячных.
В f2 вообще считает один раз.
Проблема в условии выхода из цикла.