Автор работы: Пользователь скрыл имя, 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
{
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}
Console.WriteLine("f(X{0})={1:
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, очевидно, что корни найдены верно.
Условие задачи: Вычислить определенный интеграл методом трапеции.
-Сделать проверку в 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();
}
}
}
Проверка в Excel
Вывод: Исходя из результатов, полученных в ходе решения в С#, а также решения при помощи Excel, очевидно, что значение интеграла найдено верно.
Условие задачи: Для функции y=F3(x), заданной таблично на отрезке [200,500]:
Таблица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.
Условие задачи: Для функции 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.
Информация о работе Применение программных средств для анализа и обработки данных