Программа (код) на С++ решения жесткой краевой задачи методом А.Ю.Виноградова

  • Просмотров 5907
  • Скачиваний 550
  • Размер файла 277
    Кб

06 сентября 2011 (расчет ЦИЛИНДРИЧЕСКОЙ ОБОЛОЧКИ) Алексей Юрьевич Виноградов Кандидат физико-математических наук (1996 года защиты) Дата рождения: 12 апреля 1970 (а то в интернете много моих полных тезок) Мои сайты по методам решения краевых задач в интернете: www.AlexeiVinogradov.narod.ru  www.VinogradovAlexei.narod.ru www.Vinogradov-Alexei.narod.ru  www.Vinogradov-Math.narod.ru   СОДЕРЖАНИЕ: Программа (код) на С++, написанная в среде MS Visual Studio 2010 (Visual C++), – программа решения

«жесткой» краевой задачи для системы обыкновенных дифференциальных уравнений с ПОСТОЯННЫМИ коэффициентами – ЦИЛИНДР. Страницы 2 – 12. Теория метода Алексея Юрьевича Виноградова «переноса краевых условий» для краевых задач, включая «жесткие» краевые задачи, для реализации которого написана приводимая программа. Страницы 12 - 26.                     //from_A_Yu_Vinogradov.cpp: главный файл проекта.

//Решение краевой задачи - цилиндрической оболочки. //Интервал интегрирования разбит на 100 участков: левый край - точка 0 и правый край - точка 100   #include "stdafx.h" #include <iostream> #include <conio.h>   using namespace std;   //Скалярное произведение векторов - i-й строки матрицы А и j-й строки матрицы С. double mult(double A[8][8], int i, double C[8][8], int j){        double result=0.0;        for(int k=0;k<8;k++){              result+=A[i][k]*C[j][k];

       }        return result; }   //Вычисление нормы вектора, где вектор это i-я строка матрицы А. double norma(double A[8][8], int i){        double norma_=0.0;        for(int k=0;k<8;k++){              norma_+=A[i][k]*A[i][k];        }        norma_=sqrt(norma_);        return norma_; }   //Выполнение ортонормирования. Исходная система A*x=b размерности 8х8 приводиться к системе

C*x=d, где строки матрицы С ортонормированы. void orto_norm_8x8(double A[8][8], double b[8], double C[8][8], double d[8]){        double NORM;        double mult0,mult1,mult2,mult3,mult4,mult5,mult6,mult7;          //Получаем 1-ю строку уравнения C*x=d:        NORM=norma(A,0);        for(int k=0;k<8;k++){              C[0][k]=A[0][k]/NORM;        }        d[0]=b[0]/NORM;