Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Hellston
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 16
1

Решение системы нелинейных уравнений.

16.11.2011, 20:28. Просмотров 2175. Ответов 2
Метки нет (Все метки)

Нужно решить систему уравнений, методом ньютона.
Решаю задачу на СИ, все по блок схеме.
Пересел с паскаля буквально месяц. Возможно где то накосячил, помогите с ошибкой.
При запуске программы пишет Floating Point error: Domain.
Прикрепил блок схему и саму задачу. Неделю парюсь(


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
double fun1(double x1,double x2)
{
double f;
f=x1+3*(log(x1)/log(10))-x2*x2;
return f;
}
 
double fun2(double x1,double x2)
{
double f;
f=2*x1*2*x1-x1*x2-5*x1+1;
return f;
}
 
double fun1x1(double x1)
{
double f;
f=1+3/x1;
return f;
}
 
double fun1x2(double x2)
{
double f;
f=2*x2;
return f;
}
 
double fun2x1(double x1, double x2)
{
double f;
f=4*x1-x2-5;
return f;
}
 
double fun2x2(double x1)
{
double f;
f=-x1;
return f;
}
 
void main()
{
    double x1,x2,e,x10,x20,a[3][3],b[3],dx1,dx2;
        clrscr();
        //  printf ("vvedite x1 ");
        //scanf ("%f", &x1);
        //printf ("vvedite x2 ");
        //scanf ("%f", &x2);
        x1=3.4;
        x2=2.2;
        e=0.00001;
        do
        {
            x10=x1;
                x20=x2;
                b[1]=-fun1(x10,x20);
                b[2]=-fun2(x10,x20);
                a[1][1]=fun1x1(x10); a[1][2]=fun1x2(x20);
                a[2][1]=fun2x1(x10,x20); a[2][2]=fun2x2(x10);
                dx1=(b[1]*a[2][2]-a[1][2]*b[2])/(a[1][1]*a[2][2]-a[1][2]*a[2][1]);
                dx2=(a[1][1]*b[2]-b[1]*a[2][1])/(a[1][1]*a[2][2]-a[1][2]*a[2][1]);
                x1=x10+dx1;
                x2=x20+dx2;
        } while ((fabs(dx1)>=e) || (fabs(dx2)>=e));
        printf ("x1 = %f\n",x1);
        printf ("x2 = %f\n",x2);
        getch();
}
0
Миниатюры
Решение системы нелинейных уравнений.   Решение системы нелинейных уравнений.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 20:28
Ответы с готовыми решениями:

Решение избыточной системы нелинейных и трансцендентных уравнений обобщенным методом Ньютона
нужна помощь в написании программы на СИ, тема &quot;Решение избыточной системы нелинейных и...

Решение нелинейных уравнений
Доброго времени суток,возникла проблемка с заданием, прошу вас помочь) A=0.195; B=0.12;...

Решение систем нелинейных уравнений.
Дана система уравнений: x=x^2-y^2+0.1 y=2xy+0.1 Решить методом простой итерации. вот что у...

Решение системы уравнений
Необходимо решить данную систему уравнений. Неизвестными являются коэффициенты m. Значения...

Найти решение системы линейных уравнений
Даны действительные числа a1, b1, c1, a2, b2, c2. Выяснить, верно ли, что |a1*b2-a2*b1|&gt;0.0001, и...

2
sdwvit
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 3
17.11.2011, 21:49 2
Привет , нашел твой пост в гугле, понравилась блоксхема, мне помогла
выкладываю код что работает, производные и начальные данные подставь свои:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <cstdlib>
#include <iostream>
#include <math.h>
 
 
#if 0  // код в этом блоке компилятор не воспринимает, так как препроцессор его сьедает, можно здесь писать всякую чепуху не по делу и ничего не бояться
xy-tg(x-y)=0
0,5x^2+2y^2-1=0
 
x=0,975247
y=0,512078     
#endif
 
double fun1(double x,double y)
{
    double f;
    f=x*y-tan(x-y); //здесь твоя функция №1
    return f;
}
 
double fun2(double x,double y)
{
    double f;
    f=0.5*x*x+2*y*y-1; //здесь твоя функция №2
    return f;
}
 
double dfun1_dx(double x,double y)
{
    double f;
    f=(y-1)*x-(tan(x-y)*tan(x-y)+1); //здесь твоя производная от функции №1 по х
    return f;
}
 
double dfun1_dy(double x,double y)
{
    double f;
    f=(x-1)*y+(tan(x-y)*tan(x-y)+1);  //здесь твоя производная от функции №1 по y
    return f;
}
 
double dfun2_dx(double x, double y)
{
    double f;
    f=x;   //здесь твоя производная от функции №2 по х
    return f;
}
 
double dfun2_dy(double x,double y)
{
    double f;
    f=4*y;   //здесь твоя производная от функции №2 по y
    return f;
}
 
using namespace std;
 
int main()
{
    double x,y,e,x0,y0,a,b,c,d,lick,suck,dx,dy; // переменные, все те же что и у тебя только без массивов ( массивов в с++ нету как таковых, но можно сделать но это надо отдельно обьяснять)
    
    x=0.9; // (приближенное х)
    y=0.5; // (приближенное у)
    e=0.000001; //точность
 
    do
    {
        x0=x;
        y0=y;
        lick=-fun1(x0,y0);
        suck=-fun2(x0,y0);
        a=dfun1_dx(x0,y0);
        b=dfun1_dy(x0,y0);
        c=dfun2_dx(x0,y0);
        d=dfun2_dy(x0,y0);
        dx=(lick*d-b*suck)/(a*d-b*c);
        dy=(a*suck-lick*c)/(a*d-b*c);
        x=x0+dx;
        y=y0+dy;
    } while (((dx<e && dx>(-e)) || (dy<e && dy>(-e)))==false);  // в этом цикле все абсолютно в точности как у тебя, ничего менять не нужно (кстати в твоем коде ошибки, здесь исправлены)
 
    printf ("x = %f\n",x);
    printf ("y = %f\n",y);
    system("PAUSE");
    return 1;
}
0
Hellston
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 16
18.11.2011, 16:10  [ТС] 3
оок, благодарность тебе)
Правда вчера во всем разобрался, косяк был с логарифмами в моей системе уравнений.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2011, 16:10

Решение системы линейных уравнений n порядка
Нужно составить решение системы линейных уравнений n-го порядка.

Решение системы из n линейных уравнений с n неизвестными
Имя входного файла: input.txt Имя выходного файла: output.txt Ограничение по времени: 2 секунды...

Найти решение системы линейных уравнений
РЕШИТЕ,ПОЖАЛУЙСТА 1. Найти решение системы линейных уравнений вида В системе(A1*x+B1*y=C1 и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru