Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2022, 19:22   #1
kuberbager
 
Регистрация: 18.10.2022
Сообщений: 5
Печаль Метод Ньютона C++

Всем привет, мне необходимо довести код до того, чтобы он мог выдавать решение уравнения, приведённого на изображении, методом Ньютона. f(x)=0. И как я понял, уравнение с изображения можно приравнять к y=a0+(a1*x^1)+(a2*x^2) ...

Есть два кода для осуществления этого метода решения уравнения.
В первом коде уравнение уже вклинено, так что для пользователя он не удобен. В моём случае нужно реализовать как ввод данных из текстового файла, так и вывод (Но это я уже сам думаю смогу).
И ещё условием для работы кода является то, что коэффициенты полинома и начальная точка являются аргументами функции.

Код:
#include <iostream>
using namespace std;
const int N=20;
//Функция для полинома:
double F(double x){
return x*x-9*x+14;}
//Функция поиска корня:
double FindRoot(double (*f)(double),double x0,int n){
double x=x0,df,h=0.00001;
df=(f(x+h)-f(x))/h;
for(int i=1;i<=n;i++)
   x=x-f(x)/df;
return x;}
int main(){
//Начальное приближение и корень:
double x0,x;
cout<<"initial x0 = ";
cin>>x0;
//Поиск решения:
x=FindRoot(F,x0,N);
cout<<"x = "<<x<<endl;
return 0;}
Ниже представлен пример выполнения программы:
initial x0 = 12
x = 7.00048

Код:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
//Порядок полинома:
const int N=3;
//Индексные переменные и число итераций:
int i,k,n=10;
//Аргумент, функция и производная:
double x,f,df;
//Массив коэффициентов полинома-функции:
double a[N+1];
//Массив коэффициентов полинома-производной:
double b[N];
//Ввод коэффициентов функции-полинома:
cout<<"Function: ";
cin>>a[0];
for(i=1;i<N+1;i++){
   cin>>a[i];
   //Вычисление коэффициентов для производной:
   b[i-1]=i*a[i];
}
//Начальное приближение:
cout<<"Enter x0 = ";
cin>>x;
//Последовательные итерации:
for(k=1;k<=n;k++){
   f=a[0];
   df=0;
   for(i=1;i<N+1;i++){
      f+=a[i]*pow(x,i);
      df+=b[i-1]*pow(x,i-1);
   }
   x-=f/df;
}
//Результат:
cout<<"x = "<<x<<endl;
cout<<"f("<<x<<") = "<<f<<endl;
return 0;
}
Для проверки работы программы нужно найти один из корней полинома.
f(x)=(x^3)-(10x^2)+27x-18=(x-1)(x-3)(x-6) Вводим коэффициенты полинома и начальное приближение x0 = 0 , в результате чего находим корень x = 1:
Function: -18 27 -10 1
Enter x0 = 0
x = 1
f(1) = -4.21885e-015
Изображения
Тип файла: jpg функ.JPG (11.0 Кб, 11 просмотров)
kuberbager вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод ньютона и метод простых итераций Igor1997 Помощь студентам 0 12.05.2020 07:06
метод итераций и метод Ньютона Gordan007 Microsoft Office Excel 3 09.06.2013 18:29
Метод простой итерации. Метод Ньютона. woltoe Общие вопросы C/C++ 2 05.06.2013 13:47
Метод касательных(Метод Ньютона) Fat_Tony Помощь студентам 0 22.01.2013 22:30
Методы оптимизации: метод Ньютона и метод наискорейшего спуска ruslanGacurap Помощь студентам 0 30.01.2012 13:54