Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Тема: «Решение трансцендентных и алгебраических уравнений приближенными методами»



Лабораторная работа № 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%. | Методология анализа аргументации Стивена Тулмина

mybiblioteka.su - 2015-2024 год. (0.198 сек.)