Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [c++]Реш. лин. уравн. n-й степени методом Ньютона


Автор: Destrifer 11.12.2006, 14:53
Реализую на си. За основу взят метод Ньютона. Программа вроде работает, но только для уравнений имеющих n корней. Для уравнений с меньшим или вообще равным 0 числом корней программа уходит в бесконечный цикл, т.к. я не указал условие проверки - имеет корни вообще данное уравнение или нет. Подскажите какое это должно быть условие? Каким образом узнать имеет данное уравнение корни или нет (т.е. пересекает ли график функции ось х или нет)? Вообщем, вопрос больше из курса алгебры, но я в ней не особо силен  smile 
Спасибо.

Код

#include <stdio.h>
#include <math.h>
int t,n;
double g,h,f,s,a;
int mass[]={0,0,0,0,0,0,0,0,0,0,0};
int z[]={0,0,0,0,0,0,0,0,0,0};

void big_func(void)
{
    do
    {
    h=0;
    for(t=0;t<=n;t++){
    printf ("=%i\n", mass[t]);
    g=mass[t]*pow(a,n-t);
    h=h+g;}
    f=h;
    printf ("Uravn ravno %f\n",h);
        s=0;
        for(t=n;t>=0;t--){
        g=t*mass[n-t]*pow(a,t-1);
        s=s+g;}
        printf ("Proizv ravna %f\n",s);
            a=a-(h/s);
            printf ("interac koren %f\n",a);}
    while (abs(f)>=0.00000001);
    printf ("f ravno %f\n",f);

    z[0]=mass[0];
    for(t=0;t<n;t++){
    z[t+1]=mass[t+1]+z[t]*a;
    mass[t]=z[t];
    printf ("%i koef = %i\n",t+1,mass[t]);}
}
int main ()
{
puts ("Vvedite starshuu stepen");
scanf ("%i",&n);
printf ("Naivishaya stepen uravneniya = %i\n",n);
for(t=0;t<=n;t++){
printf ("vvedite %i koeficient\n",t+1);
scanf ("%i",&mass[t]);}
a=2;
for (t=n;t>0;t--){
big_func();
printf ("1 kor %f\n",a);
n=n-1;}
return(0);
}



M
alexeis1
Модератор: почитайте как подсветку делать http://forum.vingrad.ru/index.php?showtopic=126445

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)