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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2008, 19:43   #1
Tina
 
Аватар для Tina
 
Регистрация: 24.05.2008
Сообщений: 6
Восклицание Решение нелинейного уравнения методом Ньютона

Необходимо решить уравнение

x^3+2x^2+3x+5=0

взяв в качестве начального приближения x0=-2 и задав точность е=0.000001

я уже обращалась по этому вопросу. Только написала программу на Pascale. Преподавателю программа не понравилась. Поэтому возвращаюсь к коду на С++.


Программа работает,но с ошибкой. Ответ должен быть x=-1.843734
Программа выдает -1

Подскажи пожалуйста--- как сделать так,чтобы ответ был с нужной точностью и что обозначает n (где n=5)

Код:
#include <iostream.h>
#include <math.h>
double Nuton(double*p,int n,double*x,double X)
{
	double s=p[n-1];
	for(int i=n-2;i>=0;i--) s=p[i]+(X-x[i])*s;
	return s;
}
void Nuton1(double*x,double*y,int n,double*p)
{
	for(int j=0;j<n-1;j++) {
		p[j]=(y[j+1]-y[j])/(x[j+1]-x[j]);
//		cout<<p[j]<<"\t";
    }
//	cout<<"\n";
	int m=n-1;
	int l=2;
	int k;
	for(int i=n-2;i>=1;i--)
	{
		k=0;
		for(j=1;j<=i;j++) 
		{
			p[m]=(p[m-i]-p[m-i-1])/(x[k+l]-x[k]);
//          cout<<p[m]<<"\t";
			m++;
			k++;
        }
//		cout<<"\n";
    l++;
	}
	j=0;
	for(i=1;i<n;i++)
	{
		y[i]=p[j];
		j=j+(n-i);
	}

}
void main()
{
	int const n=5,N=(n-1)*n/2;
    double x[]={1,2,3,4};
	double y[n];
	for(int i=0; i<n; i++) y[i]=pow(x[i],3)+2*pow(x[i],2)+3*x[i]+5;
	double *p=new double[N];
	Nuton1(x,y,n,p);
	//for (i=0;i<n;i++) cout<<y[i]<<'\t';
	double z=-2;
	cout<<Nuton(y,n,x,z)<<'\t'<<pow(z,3)+2*pow(z,2)+3*z+5<<'\n';
	
}
moderator: используйте тег <CODE>

Последний раз редактировалось merax; 05.06.2008 в 07:28.
Tina вне форума Ответить с цитированием
Старый 04.06.2008, 21:41   #2
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Если я правильно понимаю, то метод Ньютона - это тот же метод касательных.
А реализоваваеться он очень просто
Код:
#include <iostream>
#include <iomanip>
#include <math.h>

using namespace std;
double Rech1(double x)
{
	return pow(x,3)+2*pow(x,2)+3*x+5;
}
double Rech2(double x)
{
	return 3*pow(x,2)+4*x+3;           //Производная
}
void main()
{
	double x = -2, x0 = -2;
	double e = 0.000001;
	do
	{
		x0 = x;
		x = x0 - Rech1(x)/Rech2(x);
	}
	while (fabs(x0-x)>e);
	cout << setprecision (6)<<x;
	cin.get();
}
Ответ: -1.84373
Игорь007 вне форума Ответить с цитированием
Старый 04.06.2008, 21:48   #3
Tina
 
Аватар для Tina
 
Регистрация: 24.05.2008
Сообщений: 6
По умолчанию

большое спасибо..разобралась
Tina вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение нелинейного уравнения и построение графика xMass Помощь студентам 5 29.10.2012 19:42
Решение СНАУ методом Ньютона Tina Помощь студентам 7 09.04.2012 08:52
Решение уравнения Datrav Паскаль, Turbo Pascal, PascalABC.NET 2 06.06.2008 08:23
текст программы для решения нелинейного уравнения методом простых итераций Dyst Помощь студентам 2 14.05.2008 22:00
Решение нелинейного уровнения Delphi Luska Помощь студентам 2 28.05.2007 17:40