Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Решение дифференциального уравнения Риккати методом Эйлера - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ программа вычисления значений функции в указанном промежутке http://www.cyberforum.ru/cpp-beginners/thread19696.html
завтра уже надо сдавать лабу, а она у меня не пашет( программа вычисления значений функции в указанном промежутке. #include <stdlib.h> #include <string.h> #include <stdio.h> long double...
C++ Описать рекурсивную функцию, находящая максимум из разницы элементов, которые симметричны средине вектора В общем на Си нужно сделать следующее: Описать рекурсивную функцию max_sim(x,n), которая находит максимум из разницы элементов, которые симметричны средине (x - целочисленный, вектор длины n) С... http://www.cyberforum.ru/cpp-beginners/thread19688.html
Нужно добавить сортировку по афавиту C++
Не могу сделать сортировку по алфавиту , остальная часть работает, есть отдельно сортировка но что то не получается у меня их соеденить. Нужно сделать сортировку по именам пунктов назначения ...
Вычислить значение ряда по заданным x и N, в трех вариантах C++
cos(x)=x–x^2/2!+x^4/4!-x^6/6!+x^8/8!+...x^N/N! Вычислить значение ряда по заданным x и N, в трех вариантах: с циклами for, while, dowhile
C++ Почему не выполняется один из операторов ввода,помеченые * http://www.cyberforum.ru/cpp-beginners/thread19656.html
Один из операторов ввода при повторной работе практически всегда пропускается #include <stdio.h> #include <iostream> using namespace std; void main () { int i=2,k; char s,s1;
C++ Класс вектор У меня есть задача: Разработать пользовательский тип “ вектор в n-мерном пространстве”. Для разрабатываемого типа обязательно определить: конструктор (или несколько, если необходимо) набор... подробнее

Показать сообщение отдельно
Fanker
Сообщений: n/a

Решение дифференциального уравнения Риккати методом Эйлера - C++

25.12.2008, 18:43. Просмотров 4083. Ответов 1
Метки (Все метки)

----------------------------------------
Это так сказать задание.
Решить дифференциального уравнения Риккати методом Эйлера
Само уравнение:
p(t)=p(t)*A+Atr*p(t)-p(t)*B*Btr*p(t)+Q
Atr и Btr - траспонированные матрицы
p(t)-симметричная матрица n*n
Критерий окончания решения - выполнение следующего условия:
[(pij(t+h)-pij(t))/pij(t+h)]<=E (i,j=1..n)
Контрольный пример:
A:n*n; B:n*m; Q:n*n
n=4;m=2
A= -0.95 | -0.27 | -22 | 0
-0.009 | -0.11 | -7.1 | 0
0 | 1 | -0.074 | 0.02
1 | 0 | 0 | 0

B= -5.8 | 1
0.35 | -2.13
0 | 0
0 | 0

Q= 1 | 0 | 0 | 0
0 | 2 | 0 | 0
0 | 0 | 0.5 | 0
0 | 0 | 0 | 1

----------------------------------------
Пишу на BorlandC 3.1 - это условие
Условия будут браться из файла input.txt
Peзультат будет писаться в output.txt
Уже написал процеды чтения, записи, копирования, сложения, умножения, деления матриц.
Сейчас буду писать процедуру траспонирования. Исходник вроде был на сайте.
Пишу не себе, срок завтра.
Проблема в том, что я пока не нашел кто этот рикатти и что из себя представляет метод Эйлера.
Читать документацию умею.
Буду рад любой помощи.

Добавлено через 30 минут 23 секунды
Собственно что есть на данный момент.
Код
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
FILE *f1;
FILE *f2;

//Читает матрицу из файла
void ReadMass(float mass[10][10], int n, int m);
//Пишет матрицу в файл (пока что в stdout)
void PrintMass(float mass[10][10], int n, int m);
//Складывает матрицу mass1 c mass2, результат mass3
void SumMass(float mass1[10][10],float mass2[10][10],float mass3[10][10], int n, int m);
//Вычитает матрицу mass1 из mass2, результат mass3
void SubMass(float mass1[10][10],float mass2[10][10],float mass3[10][10], int n, int m);
//Умножает матрицу mass1 на число k, результат mass2
void MultKMass(float mass1[10][10],float mass2[10][10],int n, int m,int k);
//Делит матрицу mass1 на число k, результат mass2
void DivKMass(float mass1[10][10],float mass2[10][10],int n, int m,int k);

float masA[10][10];
float masB[10][10];
float masQ[10][10];
float masP[10][10];
int n,m,i,j;
float f;

void main()
{
  clrscr();

  if ((f1=fopen("\input.txt","r")) == NULL )
  {
   printf("Error open file");
  };
  f2=fopen("output.txt","w");

  fscanf(f1, "%d",&n);
  fscanf(f1, "%d",&m);
  printf("%d ",n);
  printf("%d \n",m);
//4itaem massiv A
  ReadMass(masA,n,n);
//Pe4ataem massiv A
  PrintMass(masA,n,n);
}


void ReadMass(float mass[10][10], int n, int m)
{
  for (i=0; i<n; i++)
  {
    for (j=0; j<m; j++)
    {
      fscanf(f1, "%f",&mass[i][j]);
    };
  };
  return;
}

void PrintMass(float mass[10][10], int n, int m)
{
  for (i=0; i<n; i++)
  {
    for (j=0; j<m; j++)
    {
      printf("%4.3f ",mass[i][j]);
    };
    printf(" \n");
  };
  printf(" \n");
  return;
}

void SumMass(float mass1[10][10],float mass2[10][10],float mass3[10][10], int n, int m)
{
  for (i=0; i<n; i++)
  {
    for (j=0; j<m; j++)
    {
      mass3[i][j]=mass1[i][j]+mass2[i][j];
    };
  };
  return;
}

void SubMass(float mass1[10][10],float mass2[10][10],float mass3[10][10], int n, int m)
{
  for (i=0; i<n; i++)
  {
    for (j=0; j<m; j++)
    {
      mass3[i][j]=mass1[i][j]-mass2[i][j];
    };
  };
  return;
}

void MultKMass(float mass1[10][10],float mass2[10][10],int n, int m,int k)
{
  for (i=0; i<n; i++)
  {
    for (j=0; j<m; j++)
    {
      mass2[i][j]=mass1[i][j]*k;
    };
  };
  return;
}

void DivKMass(float mass1[10][10],float mass2[10][10],int n, int m,int k)
{
  for (i=0; i<n; i++)
  {
    for (j=0; j<m; j++)
    {
      mass2[i][j]=mass1[i][j]/k;
    };
  };
  return;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru