Нелинейные уравнения
Добавлено: 06 июн 2009, 21:51
Здравствуйте программисты! Дали решить 2 нелинейных уравнения,фото ниже. Нужно отделить графически или аналитически корни уравнений(найти отрезок [a,b] на котором находится только один корень) и уточнить по одному корню для каждого уравнения с точностью E=0.001 c помощью:
-метода половинного деления;
-метода хорд;
-метода касательной;
-комбинированного метода;
-метода итераций.
Я попробывал методом половинного деления, проверьте пожалуйста, просто, мне нужно чтоб выдавало результат 2-х интегралов, а выдаёт одного, и не находит корня.
Вот исходник:
Вот 2 уравнения,которые нужно решить:
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Вот так,получилось:
подскажите пожалуйста,как реализовать теперь методом хорд,касательной,комбинированого и итераций. Зараннее благодарю.
-метода половинного деления;
-метода хорд;
-метода касательной;
-комбинированного метода;
-метода итераций.
Я попробывал методом половинного деления, проверьте пожалуйста, просто, мне нужно чтоб выдавало результат 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;
}
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Вот так,получилось:
Код: Выделить всё
#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;
}