Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решение нелинейного уравнения методом Ньютона, ошибка в коде 
:(
    Опции темы
Tinysik
  Дата 4.6.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



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

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';
    
}


M
JackYF
О кнопке "Код" не забываем.



Это сообщение отредактировал(а) JackYF - 4.6.2008, 23:22
PM MAIL   Вверх
bronislav
Дата 4.6.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Вопервых воспользуйся кнопкой КОД, для оформлени кода

Цитата(Tinysik @  4.6.2008,  17:42 Найти цитируемый пост)
что обозначает n (где n=5)


А программу разве не ты писала, что не знаешь что n обозначает?


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Tinysik
Дата 4.6.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



bronislav,    код писала я,но это было на занятиях, задачу делали тестовую. Поэтому забыла что n обозначает 
PM MAIL   Вверх
bronislav
Дата 4.6.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Писал на первом курсе. Вроде работает.

Код

#include <iostream>
#include <cmath>

double nuton( double x0, double eps, double (*f)(double), double (*df)(double), int max_count );

double f1( double x )
{
    return x*x*x + 2*x*x + 3*x + 5;
}

double df1( double x )
{
    return 3*x*x + 4*x + 3;
}

int main( int argc, char* argv[] )
{
    double eps;
    int max_count;
    std::cin >> eps >> max_count;
    std::cout << nuton( -2.0, eps, f1, df1, max_count ) << std::endl;
    return 0;
}

double nuton( double x0, double eps, double (*f)(double), double (*df)(double), int max_count )
{
    double x = x0;
    double x1;
    int count = 0;
    do
    {
        if( count >= max_count ) break;
        x1 = x - f(x) / df(x);
        ++count;
    }
    while( fabs(x1 - x) > eps );
    std::cout << "iter: " << count << std::endl;
    return x1;
}



Добавлено через 3 минуты и 8 секунд
Цитата(Tinysik @  4.6.2008,  18:41 Найти цитируемый пост)
Поэтому забыла что n обозначает 


Может количество корней?


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Tinysik
Дата 4.6.2008, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



bronislav,  большое вам спасибо. 
PM MAIL   Вверх
bronislav
Дата 4.6.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Цитата(Tinysik @  4.6.2008,  19:29 Найти цитируемый пост)
bronislav,  большое вам спасибо.  


Правильно работает?
Я там одну недоработку нашел.
Задачка из серии: "а вы найдете?"


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.