Применение программных средств для анализа и обработки данных

Автор работы: Пользователь скрыл имя, 11 Июня 2013 в 12:42, курсовая работа

Описание работы

В данной курсовой работе описываются решение нелинейных уравнений с одним неизвестным, численное интегрирование, интерполяция и аппроксимация таблично заданных функций с использованием как алгоритмов программирования на языке С#, так и с использованием математического пакета MathCad и табличного редактора Exсel.

Содержание работы

1 Теоретическая часть 2
1.1 Решение нелинейных уравнений с одним неизвестным 2
1.2 Метод половинного деления 2
1.3 Метод Ньютона (касательных) 3
1.4 Численное интегрирование 3
1.5 Задача интерполяции функций 4
1.6 Задачи аппроксимации функций методом наименьших квадратов 5
2 Практическая часть 7
2.1 Задание 1. Решение функции методом Ньютона 7
2.2 Задание 2. Вычисление определенного интеграла методом трапеции 11
2.3 Задание 3. Квадратичное интерполирование 15
2.3 Задание 4. Апроксимация функции методом Гаусса-Жордана 18
Список использованной литературы 23

Файлы: 1 файл

Kursovaya_Ermakova.docx

— 738.94 Кб (Скачать файл)

            {

                a = pred[i];

                b = pred1[i];

                if (f(a) * f2(a) > 0)

                {

                    c = a;

                }

                else

                {

                    c = b;

                }

                do

                {

                    c = c - f(c) / f1(c);

                }

                while (Math.Abs(f(c)) >= eps);

                Console.WriteLine("X{0}={1:f4}", i + 1, c);

                Console.WriteLine("f(X{0})={1:f4}", i + 1, f(c));

                Console.WriteLine();

 

            }

            Console.ReadKey();

        }

static double f(double x)

        {

            // функция

            return Math.Pow(x, 5) - 3 * Math.Pow(x, 4) - 77 * Math.Pow(x, 3) + 111 * Math.Pow(x, 2) + 976 * x - 1006.5;

        }

static double f1(double x)

        {

            // первая производная функции

            return 5 * Math.Pow(x, 4) - 12 * Math.Pow(x, 3) - 77 * 3 * Math.Pow(x, 2) + 111 * 2 * x + 976;

        }

  static double f2(double x)

        {

        // вторая производная функции

            return 20 * Math.Pow(x, 3) - 36 * Math.Pow(x, 2) - 77 * 3 * 2 * x + 222;

        }    
   } 

}

 

 

 

Результаты С#.

 

 

 

Проверка в Matchcad


 

 

 

Вывод: Исходя из результатов, полученных в ходе решения в С#, а также решения при помощи MathCad, очевидно, что корни найдены верно.

 

    1. Задание 2. Вычисление определенного интеграла методом трапеции

 

Условие задачи: Вычислить определенный интеграл методом трапеции.


-Сделать проверку в Matchcad.

 

 

Решение задачи в С#

 using System;

using System.Collections.Generic;

using System.Text;

public delegate double fx(double i);//  делегат

namespace ConsoleApplication10

{

  

 class Integral

    {

        public double a;// поля для пределов

        public double b;

        int n;// число разбиений

        public Integral(double a, double b, int n)// конструктор

        {

            this.a = a;

            this.b = b;

            this.n = n;

        }

        public double trap(fx f)//  метод трапеций, параметром которого является функция fx

        {

            double sum = f(a) + f(b), x = a, h = (b - a) / n;

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

            {

                x += h; sum += 2 * f(x);

            }

            sum = sum * h / 2;

 

            return sum;

        }

    }

    class Program

    {

        static double fp(double x)

        {

  return Math.Pow(Math.E, 2 * x) / 2 - Math.Pow(Math.E, x) + x + 0.5;// первообразная

        }

        static double f1(double x)

        {

            return (Math.Pow(Math.E, 3 * x) + 1) / (Math.Pow(Math.E, x) + 1);// интеграл

        }

        static void Main(string[] args)

        {

Integral myintegral = new Integral(0, 2, 1500);// экземпляр класса Integral

            Console.WriteLine("Значение интеграла, вычисленного методом трапеции: {0:f4}", myintegral.trap(f1));

            double A = 0, B = 2;

            double result = fp(B) - fp(A);

            Console.WriteLine("Значение интеграла, вычисленного методом Ньютона-Лейбница: {0:f4}", result);

            Console.ReadKey();

            Console.ReadKey();

 

        }

   }

}

                                              Результаты, полученные в C#.       

 

 

 

 

Проверка в Excel

 

 

Вывод: Исходя из результатов, полученных в ходе решения в С#, а также решения при помощи Excel, очевидно, что значение интеграла найдено верно.

 

2.3 Задание 3. Квадратичное интерполирование

 

Условие задачи: Для функции y=F3(x), заданной таблично на отрезке [200,500]:

  1. Найти приближенные значения функции в заданных точках отрезка [200, 500] с использованием метода квадратичной интерполяции.
  2. Сделать проверку в Excel.

 

Таблица1.

Х

200

250

300

325

350

375

400

425

450

475

500

У

1

5

8

9

11

12

13

7

1

0,8

0,5


Решение задачи в С#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication2

{

    class Program

    {

        static double lindouble(double[] x, double[] y, int n, double xt)

        {

            double yt = 0.0;

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

            {

                if (xt >= x[i] && xt <= x[i + 1])

                {

                    yt = ((xt - x[i + 1]) * (xt - x[i + 2])) / ((x[i] - x[i + 1]) * (x[i] - x[i + 2])) * y[i] + ((xt - x[i]) * (xt - x[i + 2])) / ((x[i + 1] - x[i]) * (x[i + 1] - x[i + 2])) * y[i + 1] + ((xt - x[i]) * (xt - x[i + 1])) / ((x[i + 2] - x[i]) * (x[i + 2] - x[i + 1])) * y[i + 2];

                    break;

                }

   }

            return yt;

        }

        static void Main()

        {

            double g;

            double yt;

            int n = 11;

            double[] x = new double[] { 200, 250, 300, 325, 350, 375, 400, 425, 450, 475, 500 };

            double[] y = new double[] { 1, 5, 8, 9, 11, 12, 13, 7, 1, 0.8, 0.5 };

            Console.Write(" Массив x: \t");

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

            {

                Console.Write("{0:f1} ", x[i]);

            }

            Console.WriteLine();

            Console.WriteLine();

            Console.Write("массив y: \t");

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

            {

                Console.Write("{0:f1} ", y[i]);

            }

            Console.WriteLine();

            for (int i = 0; i < 10; i++)

            {

                Console.Write("Введите значение х ");

                g = double.Parse(Console.ReadLine());

                double xt = g;

                Console.WriteLine();

                yt = lindouble(x, y, n, xt);

                Console.Write("В точке x={0:f1}", xt);

                Console.WriteLine();

                Console.WriteLine("Значение y={0:f1}", yt);

                Console.WriteLine();

                }

            Console.ReadKey();    

      }  
    }     
}

Результаты, полученные в С#.

 

Проверка значений, полученных в С#, при помощи Excel.

    Вывод:  Данные, полученные  в C#, отображаются на графике Excel.

    1. Задание 4. Апроксимация функции методом Гаусса-Жордана

 

Условие задачи: Для функции y=F4(x), заданной таблично на отрезке [А, В] и заданной аппроксимирующей зависимости:

Таблица 2.


-Сделать проверку в  Matchcad.

 

 

Решение задачи в С#

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication25

{ class Program

    { static double f2(double x)

        {

            double f = Math.Sqrt(x);

            return f;

       }

        static double f3(double x)

        {

            double f = Math.Sqrt(x) * x;

            return f;

        }

        static void Main(string[] args)

        {

            Console.WriteLine(" Матрица");

            Console.WriteLine();

            double[] x = new double[] { 0.1, 0.4, 1.0, 2.0, 6.0, 10.0, 20.0, 40.0 };

            double[] y = new double[] { 6.6, 7.0, 7.5, 7.9, 8.4, 8.8, 9.3, 10.1, };

            double a = 0;

            double b = 0;

            double c = 0;

            double[,] k = new double[3, 4];

            for (int i = 0; i < 3; i++)

                for (int j = 0; j < 4; j++)

                    k[i, j] = 0;

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

            {

               k[0, 0] = i + 1;

                k[0, 1] = k[0, 1] + f2(x[i]);

                k[0, 2] = k[0, 2] + f3(x[i]);

                k[0, 3] = k[0, 3] + y[i];

                k[1, 0] = k[0, 1];

                k[1, 1] = k[1, 1] + f2(x[i]) * f2(x[i]);

                k[1, 2] = k[1, 2] + f2(x[i]) * f3(x[i]);

                k[1, 3] = k[1, 3] + y[i] * f2(x[i]);

                k[2, 0] = k[0, 2];

                k[2, 1] = k[1, 2];

                k[2, 2] = k[2, 2] + f3(x[i]) * f3(x[i]);

                k[2, 3] = k[2, 3] + y[i] * f3(x[i]);

            }

            for (int i = 0; i < 3; i++)

            {

                for (int j = 0; j < 4; j++)

                    Console.Write("{0:f4} ", k[i, j]);

                Console.WriteLine();

            }

            for (int i = 0; i < 3; i++)

            {

                double q = k[i, i];

                for (int j = i; j < 4; j++)

                {

                    k[i, j] = k[i, j] / q;

                }

 

                for (int l = i + 1; l < 3; l++)

                {

                    double g = k[l, i];

                    for (int j = i; j < 4; j++)

                    {

                        k[l, j] = k[l, j] - k[i, j] * g;

                    }

                }

            }

            for (int i = 2; i != 0; i--)

            {

                for (int j = 0; j < i; j++)

                {

                    k[j, 3] = k[j, 3] - k[j, i] * k[i, 3];

                    k[j, i] = 0;

                }

            }

            a = k[0, 3];

            b = k[1, 3];

            c = k[2, 3];

            Console.WriteLine();

            Console.WriteLine("Коэффициенты данной матрицы");

            Console.WriteLine("a={0:f4}, b={1:f4}, c={2:f4}", a, b, c);

            Console.ReadKey();

        }

    }

}

Результаты, полученные в С#.

 

Проверка результатов в Excel.

 

 

 

 


 

 

Вывод: Решение задачи было одним из самых тяжелых. Решение в С# было не полным и не сошлось с ответами в Excel, так как было плохо разобрана проверка в Excel.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список использованной литературы

 

    1. Куренкова Т.В., Светозарова Г.И. Основы алгоритмизации и объектно-ориентированного программирования – М. :МИСиС, 2011.
    2. Сигитов Е.В. Информатика: Электронные таблицы EXCEL. – М.: МИСиС, 2008.
    3. Гопенгауз В.И., Кудрявцев Ю.А. Информатика: Прикладные программы в пакете Mathcad   2000 – М.: МИСиС, 2002.
    4. Microsoft Visual Basic 6.0 для профессионалов. Шаг за шагом. – СПб.: Эком, 2005.
    5. Информатика. Базовый курс / Симонович С.В. и др. – СПб.: Питер, 2000.
    6. Колесников А.П. Методы численного анализа, изложенные на языке формул и алгоритмическом языке С#. М.: ЛИБРОКОМ, 2013.

 


Информация о работе Применение программных средств для анализа и обработки данных