Quyidagi transsendent tenglamani Nyuton va Vatarlar usuli yordamida yechimini aniqlovchi dastur tuzing:
x(x+1)2=2
Dastur kodi: #include
#include
double f(double x) {
return x * pow(x + 1, 2) - 2;
}
double df(double x) {
return 3 * pow(x, 2) + 4 * x + 1;
}
double solveEquationNewtonRaphson(double x0, double epsilon, int maxIterations) {
double x = x0;
int iterations = 0;
double error = std::numeric_limits::max();
while (error >= epsilon && iterations < maxIterations) {
double dx = f(x) / df(x);
x = x - dx;
error = std::abs(dx);
iterations++;
}
return x;
}
double solveEquationSecant(double x0, double x1, double epsilon, int maxIterations) {
double x2;
int iterations = 0;
double error = std::numeric_limits::max();
while (error >= epsilon && iterations < maxIterations) {
x2 = x1 - f(x1) * (x1 - x0) / (f(x1) - f(x0));
error = std::abs(x2 - x1);
x0 = x1;
x1 = x2;
iterations++;
}
return x2;
}
int main() {
double x0, x1, epsilon;
int maxIterations;
std::cout << "Dastlabki taxminni x0 kiriting: ";
std::cin >> x0;
std::cout << "Kerakli aniqlikni kiriting (epsilon): ";
std::cin >> epsilon;
std::cout << "Maksimal takrorlash sonini kiriting: ";
std::cin >> maxIterations;
double solutionNewtonRaphson = solveEquationNewtonRaphson(x0, epsilon, maxIterations);
double solutionSecant = solveEquationSecant(x0, x0 + 0.01, epsilon, maxIterations);
std::cout << "Nyuton-Rafson usuli yordamida taxminiy yechim: " << solutionNewtonRaphson << std::endl;
std::cout << "Sekant usuli yordamida taxminiy yechim: " << solutionSecant << std::endl;
return 0;
}
Algoritm murakkabligini static va dinamik o’lchovlari.
Do'stlaringiz bilan baham: |