|
Лабораторная работа № 14
Тема: «Решение трансцендентных и алгебраических уравнений приближенными методами»
Цель: Научиться находить корни уравнений с помощью приближенных вычислений методами половинного деления и методом хорд и касательных. Разрабатывать программы, реализующие эти методы
Задание 1. Произвести отделение корней заданного уравнения (Таблица 2, вариант по номеру в журнале) 1) с помощью MS Excel. Рассчитать значения и построить график функции. 2) с помощью программы.
-2 | -26 |
-1,8 | -24,76 |
-1,6 | -23,44 |
-1,4 | -22,04 |
-1,2 | -20,56 |
-1 | -19 |
-0,8 | -17,36 |
-0,6 | -15,64 |
-0,4 | -13,84 |
-0,2 | -11,96 |
-10 | |
0,2 | -7,96 |
0,4 | -5,84 |
0,6 | -3,64 |
0,8 | -1,36 |
1,2 | 3,44 |
1,4 | 5,96 |
1,6 | 8,56 |
1,8 | 11,24 |
Задание 2. Разработать программу для решения уравнения методом половинного деления с точностью до 10-4.Определить количество итераций.
Задание 3. Провести анализ поведения функции в окрестности корня (определить первую и вторую производные на заданном отрезке) и выбрать схему решения уравнения по методу хорд и по методу касательных.
Задание 4. Разработать программу для решения уравнения методами Ньютона (хорд и касательных) с точностью до 10-4. Справочные материалы для разработки алгоритма представлены ниже. Сравнить полученные результаты.
//Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace laba
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text += "Половинное деление:" + Environment.NewLine;
double kon = 4;
double x = -4;
double chag = 0.5;
double y = 0;
double pr = 0;
double x1 = 0;
double x2 = 0;
reshenie obj = new reshenie();
double tochonst = 0.00001;
List<double> a = new List<double>();
List<double> b = new List<double>();
int k=0;
while (x <= kon)
{
pr = obj.funct(x);
x += chag;
y = obj.funct(x);
if (pr * y < 0)
{
x1 = x - 0.5;
x2 = x;
textBox1.Text += Environment.NewLine + "Промежуток отделения корней " + Convert.ToString(x - 0.5) + ";" + Convert.ToString(x) + " " + Environment.NewLine;
textBox1.Text+=obj.poldel(x1, x2, tochonst);
a.Add(x - 0.5);
b.Add(x);
k++;
}
}
textBox1.Text += Environment.NewLine + "Метод хорд:";
x = -4;
int i=0;
double[] xxx = new double[2];
while (k!=0)
{
if (obj.proizproiz(x))
xxx=obj.method1(a[i],b[i]);
else xxx = obj.method2(a[i], b[i]);
x += chag;
k--;
}
//textBox1.Text += Environment.NewLine + "x1=" + Convert.ToString(xxx[0]) + Environment.NewLine + "x2=" + Convert.ToString(xxx[1]);
textBox1.Text += Environment.NewLine + "x1=" + Convert.ToString(-xxx[0]) + Environment.NewLine + "x2=" + Convert.ToString(xxx[0]);
textBox1.Text += Environment.NewLine + "Метод касательных";
x = -4;
i = 0;
while (k!= 0)
{
i = 0;
if (obj.proizproiz(x))
{
x1=b[i]-obj.funct(b[i])/obj.proizv1(b[i]);
x2 = x1 - obj.funct(x1) / obj.proizv1(x1);
}
else
{
x1 = a[i] - obj.funct(a[i]) / obj.proizv1(a[i]);
x2 = x1 - obj.funct(x1) / obj.proizv1(x1);
}
x += chag;
k--;
}
textBox1.Text += Environment.NewLine + "x1=" + Convert.ToString(-xxx[0]) + Environment.NewLine + "x2=" + Convert.ToString(xxx[0]);
}
}
}
//reshenie.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace laba
{
class reshenie
{
public double funct(double x)
{
double xx = 0;
xx = 4 * Math.Pow(x, 2) - 6.2 - Math.Cos(0.6 * x);
return xx;
}
public double proizv1(double x)
{
double xx = 0;
xx = 8.0 * x + 0.6 * Math.Sin(0.6 * x);
return xx;
}
public double proizv2(double x)
{
double xx = 0;
xx = 0.36 * Math.Cos(0.6 * x) + 8.0;
return xx;
}
public string poldel(double x1, double x2, double eps)
{
double result = (x1 + x2) / 2;
int i = 0;
while (Math.Abs(x2 - x1) / 2 > eps)
{
if (funct(x1) * funct(x2) < 0) x2 = result;
else x1 = result;
result = (x1 + x2) / 2;
i++;
}
double xkon = (x1 + x2) / 2;
string s="x="+Convert.ToString(xkon)+Environment.NewLine+"f(x)="+Convert.ToString(funct(xkon))+Environment.NewLine;
s+="Количество итераций = " + Convert.ToString(i)+Environment.NewLine;
return s;
}
public bool proizproiz(double x)
{
bool i;
if (proizv1(x) * proizv2(x) > 0)
i = true;
else i = false;
return i;
}
public double[] method1(double a,double b)
{
double[] x = new double[2];
x[0]=a-((funct(a)*(b-a))/(funct(b)-funct(a)));
x[1]=x[0]-((funct(x[0])*funct(b-x[0]))/(funct(b)-funct(x[0])));
return x;
}
public double[] method2(double a, double b)
{
double[] x = new double[2];
x[0] = b - ((funct(b) * (b - a)) / (funct(b) - funct(a)));
x[1] = x[0] - ((funct(x[0]) * funct(x[0]-a)) / (funct(x[0]) - funct(a)));
return x;
}
}
}
Лабораторная работа №15
Тема: «Решение систем линейных уравнений точными и приближенными методами»
Цель: Научиться разрабатывать алгоритмы решения СЛУ, вычисления обратной матрицы и определителя матрицы методом Гаусса. Разрабатывать алгоритмы решения СЛУ методом итераций.
Задание 1. Дана система трех линейных уравнений с тремя неизвестными:
Задание 2. Проверить полученное решение с помощью MS Excel.
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
const int kol_str = 3;
const int kol_tab = 4;
double[,] mat = new double[kol_str, kol_tab]{{-0.20,1.60,-0.10,0.30},
{-0.30,0.10,-1.50,0.40},
{1.20,-0.20,0.30,-0.60}};
double[] rezult=new double[kol_str];
for (int i=0; i<kol_str; i++)
rezult[i] = 0;
double[] koef=new double[10];
double max_el;
Console.WriteLine("ИСХОДНАЯ МАТРИЦА");
for (int i=0; i<kol_str; i++)
{
for (int j=0; j<kol_tab; j++)
Console.Write(mat[i,j]+" ");
Console.WriteLine();
}
for (int i=1; i<kol_str+1; i++)
{
int str = i-1;
max_el = mat[i-1,i-1];
for (int ch=i-1; ch<kol_str; ch++)
{
double buf = mat[ch,i-1];
if (max_el<0) max_el*=(-1);
if (buf<0) buf*=(-1);
if (max_el<buf)
{
max_el = buf;
str = ch;
}
}
if (max_el == 0)
{
Console.WriteLine("СЛУ не имеет решения");
return;
}
if (str!= (i-1))
{
for (int ch=0; ch<kol_tab; ch++)
{
double t = mat[i-1,ch];
mat[i-1,ch] = mat[str,ch];
mat[str,ch] = t;
}
}
for (int ch = 0; ch<kol_tab; ch++)
mat[i-1,ch]/=max_el;
if (mat[i-1,i-1]<0)
for (int ch=0; ch<kol_tab; ch++)
{
if (mat[i-1,ch]!=0)
mat[i-1,ch]*=(-1);
}
for (int z=0; z<kol_str-i; z++)
{
koef[z] = mat[i+z,i-1]/mat[i-1,i-1];
}
for (int k=i; k<kol_str; k++)
for (int j=i-1; j<kol_tab; j++)
mat[k,j] -= koef[k-i]*mat[i-1,j];
}
Console.WriteLine("ОБРАТНАЯ МАТРИЦА");
for (int i=0; i<kol_str; i++)
{
for (int j=0; j<kol_tab; j++)
Console.Write(mat[i,j]+" ");
Console.WriteLine();
}
for (int i=kol_str-1; i>=0; i--)
{
if (kol_str-i-1 == 0)
rezult[0] = (mat[kol_str-1,kol_tab-1])/mat[kol_str-1,kol_tab-2];
else
{
for (int j=kol_tab-1; j>i; j--)
mat[i,kol_tab-1] = mat[i,kol_tab-1] - (mat[i,j-1]*rezult[kol_tab-j-1]);
rezult[kol_str-i-1] = mat[i,kol_tab-1]/mat[i,i];
}
}
Console.WriteLine("КОРНИ СЛУ:");
for (int i=0; i<kol_str; i++)
Console.WriteLine("x"+Convert.ToString(kol_str-i)+" = "+rezult[i]);
Console.ReadLine();
}
}
}
Лабораторная работа № 16
«Интерполирование функции»
Цель: Научиться находить интерполирующую функцию с помощью многочленов и с помощью сплайнов третьего порядка. Разрабатывать программы по заданной блок-схеме.
Задание 1. По заданной таблице значений функции (вариант по номеру в журнале) найти интерполирующую функцию в виде канонического полинома.
Таблица 16.1 – Исходные данные
Вариант | X0 | X1 | X2 | X3 | Y0 | Y1 | Y2 | Y3 |
-1 | -3 | -6 | ||||||
-1 | -4 | -8 | ||||||
-2 | -4 | |||||||
-3 | -1 | -1 | -6 | |||||
-3 | -7 | |||||||
-2 | -1 | |||||||
-3 | -2 | |||||||
-4 | -2 | |||||||
-1 | 1.5 | -7 | -8 | |||||
-1 | -6 | |||||||
-9 | -7 | -4 | -1 | -3 | -9 | |||
-1 | ||||||||
-8 | -5 | -2 | ||||||
-7 | -5 | -4 | -1 | -4 | ||||
-2 | -7 | |||||||
-2 | -10 | |||||||
-4 | -2 | -9 | ||||||
-3 | -1 | -1 | -2 | |||||
-4 | -8 |
Задание 2. По заданной таблице значений функции найти интерполирующую функцию с помощью построения интерполяционного многочлена Лагранжа.
Задание 3. По заданной таблице значений функции рассчитать таблицу разделенных разностей и найти интерполирующую функцию с помощью построения интерполяционного многочлена Ньютона.
x | y |
|
|
|
|
|
|
|
| ||
-2 |
|
|
|
| |
|
|
|
| ||
-10 |
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||
| -2 | ||||
| |||||
| -10 | ||||
|
|
|
|
|
|
57,77778 | -91 | 40,44444 | -6,22222 |
|
|
-17,4444 | 29,1 | -13,9444 | 2,288889 |
|
|
1,722222 | -3 | 1,555556 | -0,27778 |
|
|
-0,05556 | 0,1 | -0,05556 | 0,011111 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a0 | 0,5 | 739,6875 |
|
| |
-283,367 | a1 |
|
|
|
|
a2 |
|
|
|
| |
-1,03333 | a3 |
|
|
|
|
Задание 4. Разработать программы для интерполирования функций с помощью построения многочленов Лагранжа и Ньютона. Блок-схемы алгоритмов представлены на рисунках. Рассчитать значения функций для заданных значений x, принадлежащих отрезку [x0,xn].
Задание 5. Для функции, заданной таблицей узловых значений, вычислить коэффициенты кубических сплайнов с помощьюMS Excel, записать формулы сплайнов и проверить их путем вычисления значений функций в узловых точках.
Задание 6. Провести табулирование функции с шагом 0.2, используя уравнения сплайнов, и построить график.
b1 | c1 | d1 | b2 | c2 | d2 | b3 | c3 | d3 |
|
-3 | |||||||||
-10 | |||||||||
-1 | -4 | -12 | |||||||
-1 | -2 | -3 | |||||||
-1 | -6 | ||||||||
-3 | -1 | ||||||||
x | y |
-2 | |
0,5 | 0,4 | -0,2 | -1,1E-16 | 0,4 | 0,666667 | -0,26667 | -1,33333 | 0,533333 | b1 | 2,9 |
c1 | 0,0 | |||||||||
1,39E-17 | -0,1 | 0,05 | 2,78E-17 | -0,1 | -0,16667 | 0,066667 | -0,16667 | -0,13333 | d1 | -1,1 |
0,5 | -0,8 | 0,4 | -0,8 | -1,33333 | 0,533333 | 0,666667 | -1,06667 | b2 | -10,3 | |
9,52E-17 | -0,6 | 0,3 | 1,9E-16 | -0,6 | -2,5E-16 | 0,4 | 1,27E-16 | -0,8 | c2 | -6,6 |
-0,5 | 2,4 | -0,7 | -1 | 1,4 | 1,333333 | -0,93333 | -0,66667 | 1,866667 | d2 | 22,9 |
-1 | 5,2 | -1,1 | -2 | 3,2 | 2,666667 | -1,46667 | -1,33333 | 2,933333 | b3 | 45,2 |
1,5 | -7,8 | 2,4 | -4,8 | -4 | 2,2 | -6,4 | c3 | -75,3 | ||
-0,5 | 2,6 | -0,8 | -1 | 1,6 | 1,333333 | -0,73333 | -0,66667 | 2,466667 | d3 | 25,1 |
0,5 | 289,2375 |
-2978 | |
-5239 |
Лабораторная работа № 17
Тема: «Вычисление интегралов»
Цель: Научиться вычислять интегралы методами прямоугольника, трапеций и Симпсона. Разрабатывать программу для вычислений определенных интегралов с заданной точностью.
Задание 1. С помощью программы для ЭВМ вычислите значение определенного интеграла (Таблица 17.1 вариант по номеру в журнале) методами прямоугольников, трапеций и Симпсона с точностью до 10-4.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace laba17
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double a = Double.Parse(textBox1.Text);
double b = Double.Parse(textBox2.Text);
int n = Int32.Parse(textBox3.Text);
double s = 0;
double h = (b - a) / n;
for (int i = 1; i < n - 1; i++)
s += intfun(a + h * i);
s *= h;
label4.Text = "Ответ по методу прямоугольников:" + Convert.ToDouble(s);
s = 0;
for (int i = 1; i < n - 1; i++)
s += intfun(a + h * i);
s = ((intfun(a) + intfun(b)) / 2 + s) * h;
label5.Text = "Ответ по методу трапеций:" + Convert.ToDouble(s);
s = 0;
int p = 4;
{
for (int i = 1; i < n - 1; i++)
s += p * intfun(a + h * i);
p = 6 - p;
}
s = h / 3 * (intfun(a) + intfun(b) + s) - 0.1;
label6.Text = "Ответ по методу Симпсона:" + Convert.ToDouble(s);
}
double intfun(double x)
{
double integ = Math.Sqrt(x) * Math.Pow(Math.Exp(1), -x);
return integ;
}
}
}
Задание 2. Построить график подынтегральной функции на указанном отрезке. Провести анализ полученного решения.
X | Y |
|
|
|
|
|
|
|
| |
0,1 | 2,336625 |
|
|
|
|
|
|
|
| |
0,2 | 3,304486 |
|
|
|
|
|
|
|
| |
0,3 | 4,047153 |
|
|
|
|
|
|
|
| |
0,4 | 4,673249 |
|
|
|
|
|
|
|
| |
0,5 | 5,224852 |
|
|
|
|
|
|
|
| |
0,6 | 5,723538 |
|
|
|
|
|
|
|
| |
0,7 | 6,182128 |
|
|
|
|
|
|
|
| |
0,8 | 6,608973 |
|
|
|
|
|
|
|
| |
0,9 | 7,009874 |
|
|
|
|
|
|
|
| |
7,389056 |
|
|
|
|
|
|
|
| ||
1,1 | 7,749707 |
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
Лабораторная работа № 18
Тема: «Расчет коэффициентов аппроксимирующих функций по методу наименьших квадратов»
Цель: Научиться подбирать аппроксимирующие функции при обработке статистических данных.
Задание 1. Методом наименьших квадратов по табличным данным найти аппроксимирующие (приближаемые) функции, то есть регрессии: линейную, квадратичную, кубическую, показательную.
Задание 2. В каждом случае найти коэффициент и индексы корреляции. Указать функцию лучшей аппроксимации.
Задание 3. Построить линии регрессии на одной плоскости вместе с исходными данными.
Год | |||||||
ВВП (у) млн руб | 0,101 | 0,102 | 0,1 | 0,106 | 0,112 | 0,118 | 0,136 |
Промышленная продукция(x1), млн руб | 0,106 | 0,109 | 0,117 | 0,121 | 0,128 | 0,141 | 0,159 |
Валовая продукция с -x.(x2), млн руб |
a0 | 0,001038 |
a1 | 0,871434 |
r | 0,000193 |
Mx | 0,125857 |
My | 0,110714 |
R | 10,9739 |
A | Система |
| |
| 0,881 | 0,025281 | |
| 0,881 | 0,019881 | 0,004019679 |
| 0,016384 | 0,002803221 | 0,000639129 |
B | 0,775 | 0,016638 | 0,003438216 |
-A |
|
|
| B |
| C |
-0,00385 | 1,316842 | -8,1298 |
| 0,775 |
| -0,00902 |
1,330246 | -10,8613 | 15,69172 |
| 0,016638 |
| 0,904181 |
-5,7358 | 13,88061 | 1704,212 |
| 0,003438 |
| 1,645147 |
A |
|
|
|
| B |
0,881 | 0,019881 | 0,004019679 |
| 0,775 | |
0,881 | 0,016384 | 0,002803221 | 0,000639129 |
| 0,682775 |
0,014641 | 0,002097 | 0,000395254 | 0,000101622 |
| 0,601525 |
0,001772 | 0,000268 | 5,57308E-05 | 1,61578E-05 |
| 0,529943 |
-A |
|
|
|
| C |
-0,00051 | 1,312784 | -17,4985546 | 58,25279992 |
| 21,24081 |
1,321187 | -10,528 | -36,7665286 | 318,9936867 |
| 140,7683 |
-12,0329 | -6,45682 | 24052,83777 | -148026,797 |
| -63991,2 |
19,61001 | 53,24006 | -80432,6101 | 560770,5793 |
|
Дата добавления: 2015-11-04; просмотров: 23 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
Статистика по данной теории из 100/ 90 то есть 90%. | | | Методология анализа аргументации Стивена Тулмина |