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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2011, 01:54   #1
Killep
Новичок
Джуниор
 
Регистрация: 18.05.2011
Сообщений: 2
По умолчанию Решение уравнения

Подскажите как решать (или где посмотреть теорию) такую задачу:

Нужно именно на "c"
Заранее спасибо
Killep вне форума Ответить с цитированием
Старый 18.05.2011, 22:59   #2
Killep
Новичок
Джуниор
 
Регистрация: 18.05.2011
Сообщений: 2
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define Q (1+sqrt(5))/2;
#define EPS 0.001

double posle(double alpha, double x);
double podint(double t);
double proizvod(double alpha, double x);
double newton(double alpha);
double integral(double a, double b);
double pogr(double a, double b);
double max(double a,double b, double (*f)(double x));
double proizvod2(double x);

int main(void)
{
    double alpha, result;
    printf("alpha = \t");
        scanf("%lf",&alpha);
    result=newton(alpha);
    printf("Result: %.5lf.\n,%.5lf\n", result,posle(alpha,result));
    scanf("%lf",alpha);
    return 0;
}

double posle(double alpha,double x)
{
       return alpha + x - integral(alpha,x);
}




double podint(double t)
{
       return sqrt((1+t*t*t)/(10+t*t));
}




double proizvod(double alpha, double x)
{
       return((1+x*x*x)/(10+x*x)-(1+alpha*alpha*alpha)/(10+alpha*alpha)-x - alpha);
}


double newton(double alpha)
{
int i;
double res, x1, x2,f,eps=EPS,tg;
if(alpha<0) x1=-0.01; 
else x1=0.01;
f=posle(alpha,x1);
while(fabs(f)>eps)
{
do {
    tg=proizvod(alpha,x1);
     if(fabs(tg)<=eps)
     x1=x1+eps;
        } 
while(fabs(tg)<=EPS);
x2=x1- f/tg;
x1=x2;
f=posle(alpha, x1);
}

res=x2;
return res;
}





double integral(double a, double b)
{
 double aa=a, bb=b,h,p2, p1,x1=aa,x2, integ=0,s,eps=EPS, k=1;
 double (*y)(double x);
 y=&podint;
 if(a>b) {
         k=-1;
         integ=integral(b,a);
         }
else{
h=eps; 
x2=x1+h;
p1=pogr(x1,x2);
integ=((x2)+y(x1))*h/2+p1;
x1=x2; 
x2=x2+h;
{
        while(x2<bb)
{
        s=(y(x2)+y(x1))*h/2;
        p2=pogr(x1,x2);
        if((fabs(p2-p1)<eps)||(h<eps/10)) {
                                          h=2*h;
                                          x1=x2;
                                          x2=x2+h;
                                          integ=integ+s+p2;
                                          p1=p2;
                                          }
        else {
             h=h/2;
             x2=x2-h;
             }    
}

if(x2>bb)
   {h=eps;
    while((x1+h)<bb)
    {
                    p1=pogr(x1,x1+h); 
                    s=(y(x1+h)+y(x1))*h/2;
                    integ=integ+s+p1; 
                    x1=x1+h;
                    }
}
}
}
return k*integ;
}





double pogr(double a, double b)
{ double M2, p,eps;
eps=EPS;
M2=max(a,b,proizvod2);
p=(b-a)*(b-a)*fabs(b-a)*fabs(M2)/12;
return p; }

double max(double a,double b, double (*f)(double x))
{double x1,x2,y1,y2,k,q,eps;
q=Q;
eps=EPS;

 x1=b-(b-a)/q;
 x2=a+(b-a)/q;
y1=f(x1);
y2=f(x2);

while(fabs(b-a)>eps)
{if(y1>y2) {
           b=x2;
            x2=x1;
            x1=b-(b-a)/q;
            y2=y1;
            y1=f(x1);
           }  
 else    { 
              a=x1;
              x1=x2;
              x2=a+(b-a)/q;
              y1=y2;
              y2=f(x2);
         }
}
if(y1>y2) k=y1;
else k=y2;

return k;}

double proizvod2(double x)
{
return (sqrt(x*x+10)*(x*x*x*x+30*x*x-2*x)/(sqrt(x+1)*sqrt(x*x-x+1)*(2*x*x*x*x+40*x*x+200))) ;
}
Вот решение, где косяк, точность вроде не высокая((



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 19.05.2011 в 08:45.
Killep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение матричного уравнения Fataller Помощь студентам 5 29.05.2010 20:41
Решение уравнения Патагон3000 Помощь студентам 0 04.03.2010 19:22
Решение уравнения Datrav Паскаль, Turbo Pascal, PascalABC.NET 2 06.06.2008 08:23
Решение уравнения вида ax+by=1 :)) Solny6ko YasnoE Помощь студентам 4 14.06.2007 14:38