Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛБ4 / Лабораторная работа4 Лена

.docx
Скачиваний:
6
Добавлен:
27.12.2015
Размер:
48.63 Кб
Скачать

Министерство образования РБ

УО «Брестский государственный университет имени А.С. Пушкина»

Математический факультет

Кафедра информатики и прикладной математики

Лабораторная работа № 4

Тема: «Метод последовательных приближений решения интегрального уравнения Фредгольма»

Выполнила:

студентка ПМ–31

Гордийчук Е.М.

Проверила:

Силаева З. Н.

Брест, 2012

Задание

Методом последовательных приближений найти приближенное решение интегрального уравнения Фредгольма второго рода, положив n =4. Проверить выполнение условий сходимости этого метода.

Решение:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace MCHA4lb

{

class Program

{

public static double GetNorm(double a, double b)

{

return Math.Pow(a, 2) + Math.Pow(b, 2);

}

public static double[] MultMn(double[] X, double[] Y)

{

double[] result = new double[X.Length + Y.Length - 1];

for (int i = 0; i < result.Length; i++)

{

result[i] = 0;

}

for (int i = X.Length - 1; i >= 0; i--)

{

for (int j = Y.Length - 1; j >= 0; j--)

{

result[i + j] += X[i] * Y[j];

}

}

return result;

}

public static double[] PervObr(double[] X)

{

double[] result = new double[X.Length + 1];

for (int i = 0; i < result.Length; i++)

result[i] = 0;

for (int i = X.Length - 1; i >= 0; i--)

{

result[i + 1] = X[i] / (i + 1);

}

return result;

}

public static double ResIteg(double[] X, double a, double b)

{

double sum = 0;

for (int i = 0; i < X.Length; i++)

{

sum += X[i] * Math.Pow(b, i);

sum -= X[i] * Math.Pow(a, i);

}

return sum;

}

public static double[] SumMn(double[] X, double[] Y)

{

double[] result = new double[X.Length];

for(int i = 0; i < result.Length; i++)

{

result[i] = X[i];

}

for (int i = 0; i < Y.Length; i++)

{

result[i] += Y[i];

}

return result; }

public static double[] SkalMultMn(double[] X, double a) {

double[] result = new double[X.Length];

for (int i = 0; i < result.Length; i++) {

result[i] = X[i] * a; }

return result; }

static void Main(string[] args) {

FileStream s = File.Open("MCHA4input.txt", FileMode.Open, FileAccess.Read);

StreamReader sr = new StreamReader(s);

int n = Convert.ToInt32(sr.ReadLine());

double labda = Convert.ToDouble(sr.ReadLine());

string[] str = sr.ReadLine().Split(' ');

double a = 0, b = 1;

str = sr.ReadLine().Split(' ');

List<double[]> listFi = new List<double[]>();

double[] tempFi = new double[str.Length];

Console.WriteLine("{0} < 1 условия сходимости выполняются", labda * (b - a) * GetNorm(a, b));

for (int i = 0; i < tempFi.Length; i++) {

tempFi[i] = Convert.ToDouble(str[i]); }

listFi.Add(tempFi);

str = sr.ReadLine().Split(' ');

double[] kerX = new double[str.Length];

for (int i = 0; i < kerX.Length; i++) {

kerX[i] = Convert.ToDouble(str[i]); }

str = sr.ReadLine().Split(' ');

double[] kerY = new double[str.Length];

for (int i = 0; i < kerY.Length; i++)

{

kerY[i] = Convert.ToDouble(str[i]); }

sr.Close();

s.Close();

for (int i = 1; i <= n; i++)

{

listFi.Add(new double[kerX.Length]);

listFi[i][kerX.Length - 1] = ResIteg(PervObr(tempFi), a, b);

listFi[i][0] = ResIteg(PervObr(MultMn(tempFi, kerY)), a, b);

tempFi = listFi[i];

}

for (int i = 1; i <= n; i++)

{

listFi[i] = SkalMultMn(listFi[i], Math.Pow(labda, i));

listFi[0] = SumMn(listFi[0], listFi[i]);

}

for (int i = listFi[0].Length - 1; i >= 0; i--)

{

if (i != 0)

{

Console.Write("{0} * х ^ {1} + ", Math.Round(listFi[0][i], 4), i);

}

else {

Console.Write("{0} * х ^ {1}", Math.Round(listFi[0][i], 4), i); }

}

Console.ReadKey();

}

}

}

Соседние файлы в папке ЛБ4