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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2011, 13:53   #1
Anubys
Форумчанин
 
Регистрация: 08.05.2010
Сообщений: 177
По умолчанию проблема с системой дифференциальных уравнений методом Эйлера

Я уже неделю себе ломят голову над этой задачей, у меня возникли некоторые вопросы:
У меня есть готовая функция для диф. уравнения первого порядка
Код:
void euler(double x0, double y0, double h, double y[], int ny, double (*fn)(double,double))
{
 int i;
 double xi = x0;
 double yi = y0;
 for(i=0; i < ny; ++i, xi += h)
 {
 yi = y = yi + h*fn(xi,yi);
 }
}
Так вот у меня возник вопрос как с его помощью решить систему уравнений. Мы такого с мат. анализа не проходили поэтому решил обратиться к вам
Условие задачи ниже

Я уже все нашел только не знаю как начать финальною задачу
Код всей программы
Код:
void MultiplyMatrix(int a[N][N],int b[N][N],int c[N][N],int h,int w)
{
        int i,j;
        for(i=0;i<h;i++)
        {
                for(j=0;j<w;j++)
                {
                        c[i][j] = a[i][j]*b[j][i];
                }
        }
}
int minElement(int a[N][N],int &y,int &x,int h,int w)
{
        int temp;
        temp = a[0][0];
        y = 0;
        x = 0;
        int i,j;
        for(i=0;i<h;i++)
        {
                for(j=0;j<w;j++)
                {
                        if(temp > a[i][j])
                        {
                                temp = a[i][j];
                                x = j;
                                y = i;
                        }
                }
        }
        return temp;
}
void Transpon(int a[N][N],int b[N][N],int h,int w)
{
        int i,j;
	for(i = 0; i < h;i++)
	{
		for(j = 0; j < w; j++)
		{
                        b[j][i] = a[i][j];
      		}
	}
}

float f(float x)
{
	return pow(pow(x,2),1./3.) - cos(x);
}

float Nuton(float x1, float x2,float eps)
{
	float x = (x2 - x1)/2;
	while (fabs(f(x)) > eps)
		{
			if (f(x) > 0)
			{
				x2 = x;
			}
				else
				{
					x1 = x;
				}
			x = (x2+x1)/2;
		}
	return x;
}
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        Button1->Enabled=false;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
        float x0,xk,x,epsilon;
        int i,j,x1=0,y=0;
        int min_element;
        if(ComboBox1->Text == "Вручну")
        {
                
                x0 = StrToFloat(LabeledEdit1->Text);
                xk = StrToFloat(LabeledEdit2->Text);
                epsilon =  StrToFloat(LabeledEdit3->Text);
        }
        x = Nuton(x0,xk,epsilon);
        LabeledEdit4->Text = FloatToStr(x);
        int G[4][4];
        int Z[4][4];
        int Gt[4][4];
        int A[4][4];
        int W[4][4];
        int Wt[4][4];
        int inval=0;
        if(ComboBox1->Text == "Вручну")
        {
                
                for(i=0;i<3;i++)
                {
                        for(j=0;j<4;j++)
                        {
                                G[i][j]=StrToInt(StringGrid1->Cells[j][i]);
                                Z[i][j]=StrToInt(StringGrid2->Cells[j][i]);
                        }
                }
        }
        Transpon(G,Gt,4,4);
        int temp;
        if(ComboBox1->Text == "Вручну")
        {
        	for(int i = 0; i < 4;i++)
	        {
		        for(int j = 0; j < 3; j++)
        		{
                               	StringGrid3->Cells[j][i]=Gt[i][j];
                        }
                }
         }
        MultiplyMatrix(Z,Gt,A,3,4);
        if(ComboBox1->Text == "Вручну")
        {
                for(int i = 0; i < 3;i++)
        	{
	        	for(int j = 0; j < 4; j++)
		        {
                                StringGrid4->Cells[j][i]=A[i][j];
	        	}
                }
	}
        min_element=minElement(A,y,x1,3,4);
        Label6->Caption = "Мінімальний елемент матриці A "+IntToStr(min_element);
        int tmp;
        for(int z=3;z>0;z--)
        {
                for(int i=0;i<3-1;i++)
                {
                        if(A[i][x1]>A[i+1][x1])
                        {
                                tmp = A[i][x1];
                                A[i][x1] = A[i+1][x1];
                                A[i+1][x1] = tmp;
                        }
                }
        }
        for(int i = 0; i < 3;i++)
	{
		for(int j = 0; j < 4; j++)
		{
                        W[i][j] = A[i][j];
			StringGrid5->Cells[j][i]=W[i][j];
		}
	}
        Transpon(W,Wt,4,4);
        for(int i = 0; i < 4;i++)
	{
		for(int j = 0; j < 3; j++)
		{
                        StringGrid6->Cells[j][i]=Wt[i][j];
		}
	}


}
Проверку объектов на предмет ввода данных убрал
Еще не реализовал программно матрицу D (A), но уже есть на листе

Последний раз редактировалось Anubys; 24.04.2011 в 14:04.
Anubys вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ методом Эйлера ruslan 91 Паскаль, Turbo Pascal, PascalABC.NET 1 10.01.2011 22:12
решение систем диф.уравнений методом Эйлера??? в VisualBasic goog2 Помощь студентам 0 14.12.2010 21:50
Решение обыкновенных дифференциальных уравнений Craz Помощь студентам 0 28.11.2009 21:25
Система обыкновенных дифференциальных уравнений Anarki Помощь студентам 1 05.11.2009 00:19