410

Исследование таблично заданной функции

Реферат

Экономическая теория и математическое моделирование

Дана система линейных алгебраических уравнений шестого порядка. Найти ее решение методом простых итераций с заданной точностью E. Выполнить проверку истинности полученного решения. Метод простых итераций.

Русский

2013-01-06

669.5 KB

18 чел.

Санкт-Петербургский государственный морской

технический университет

Кафедра вычислительной техники и информационных технологий

Реферат

По информатике

Темы: Исследование таблично заданной функции

Выполнила

Студент гр. 1111

А. А. Щукин

Принял преподаватель

А.Ф. Высицкий

Санкт-Петербург

2011
Алгоритм и кодирование

Задача 1.

Дана система линейных алгебраических уравнений шестого порядка. Найти ее решение методом простых итераций с заданной точностью E. Выполнить проверку истинности полученного решения.

Математическая модель

Метод простых итераций  - метод, принципиально не позволяющий получить точный результат за конечное число шагов. Применяется только в том случае, когда выполняется условие преобладания диагональных элементов матрицы коэффициентов. Метод простых итераций дает возможность обеспечения комплексного решения задач управления, совершенствования организационной структуры объекта, а также однократного сбора и регистрации данных, используемых несколькими информационными подсистемами.

Расчетные зависимости.

Метод простых итераций характеризуется следующей расчетной схемой:

Условие сходимости процесса итераций:

Результаты: тесты, итоги, доказательство истинности.

При решении поставленной задачи использован метод простых итераций.

На одном из этапов работы программы необходимо вводить коэффициенты и свободные члены (их матрицы представлены ниже), а также ввести желаемую точность. Например:

Точность: 5

Коэффициенты:             10 1 1 1 1 1

                               1 20 1 1 1 1

                               1 1 30 1 1 1

                               1 1 1 40 1 1

                               1 1 1 1 50 1

                               1 1 1 1 1 60 

Свободные члены:       21

                                       56

                                       81

                                      10

                                        6

                                      73

При данной комбинации последовательность сходится, и мы получаем такие значения X:

X[1]=2.1

X[2]=2.8

X[3]=2.7

X[4]=0.25

X[5]=0.12

X[6]=1.21666666666667


Разработка алгоритма



Листинг программы

Module Module1

   Sub Main()

       ' программист Сидорова 

       ' Зададим начальные коэффициенты

       Dim a(6, 6) As Double

       Dim b(6) As Double

       Dim c(6) As Double

       Dim at(6, 6) As Double

       Dim bt(6) As Double

       Dim toch As Double

       Dim str As String

       Dim var As Boolean

       Console.Write("Введите точность: ")

       toch = Convert.ToDouble(Console.ReadLine()) 'введение параметра точности

       Console.WriteLine()

       Console.Write("Введите коэффиценты: ")

       Console.WriteLine()

       For i = 1 To 6

           For j = 1 To 6

               Console.Write("A[" & i & "," & j & "]=")

               a(i, j) = Convert.ToDouble(Console.ReadLine())

           Next

       Next

       For i = 1 To 6

           Console.Write("B[" & i & "]=")

           b(i) = Convert.ToDouble(Console.ReadLine())

       Next

       ' Вывод на экран начальных коэффициентов

       Console.WriteLine()

       Console.WriteLine("Начальные коэффициенты:")

       Console.WriteLine()

       For i = 1 To 6

           For j = 1 To 6

               If (a(i, j) = 1) Then

                   Console.Write("X" & j & " ")

               End If

               If (a(i, j) = -1) Then

                   Console.Write("- X" & j & " ")

               End If

               If ((a(i, j) <> 1) And (a(i, j) <> -1)) Then

                   Console.Write(a(i, j) & "X" & j & " ")

               End If

               If (j < 6) Then

                   If a(i, j + 1) >= 0 Then

                       Console.Write("+ ")

                   End If

               End If

           Next

           Console.Write("= " & b(i))

           Console.WriteLine()

       Next

       Console.WriteLine()

       Console.WriteLine("====")

       'Проверяем диагональные элементы на близость к единице

       var = False

       If ((a(1, 1) > 1.5) And (a(2, 2) > 1.5) And (a(3, 3) > 1.5) And (a(4, 4) > 1.5) And (a(5, 5) > 1.5) And (a(6, 6) > 1.5)) Then

           var = True

       End If

       'Если диагональные коэффиценты далеки от единицы

       If (var) Then

           For i = 1 To 6

               For j = 1 To 6

                   If i = j Then at(i, j) = 0

                   If i <> j Then at(i, j) = a(i, j) / (a(i, i) * (-1))

               Next

           Next

           For i = 1 To 6

               bt(i) = b(i) / a(i, i)

           Next

       End If

       'Если диагональные элементы близки к единице

       If (Not var) Then

           For i = 1 To 6

               For j = 1 To 6

                   If i = j Then

                       at(i, j) = (a(i, j) - 1) * (-1)

                   End If

                   If i <> j Then

                       at(i, j) = a(i, j) * (-1)

                   End If

               Next

           Next

           For i = 1 To 6

               bt(i) = b(i)

           Next

       End If

       Dim sb As Double

       Dim shod As Double

       ' Проверка сходимости

       shod = 0

       For i = 1 To 6

           sb = 0

           For j = 1 To 6

               If at(i, j) < 0 Then sb = sb + at(i, j) * (-1)

               If at(i, j) >= 0 Then sb = sb + at(i, j)

           Next

           If sb < 1 Then shod = 1

       Next

       If shod = 1 Then Console.WriteLine("Сходится! :)")

       If shod = 0 Then Console.WriteLine("Не сходится! :(")

       If shod = 1 Then

           Dim x(6, 10000) As Double

           For i = 1 To 6

               x(i, 1) = bt(i)

           Next

           Dim sum As Double

           Console.WriteLine("=======")

           For i = 1 To 6

               sum = 0

               For j = 1 To 6

                   If (i = j) Then

                       sum = sum

                   End If

                   If (i <> j) Then

                       sum = sum + a(i, j) * x(j, 1)

                   End If

                   x(i, 2) = (1 / a(i, i)) * (b(i) - sum)

               Next

           Next

           Dim gckl As Double

           Dim uslv As Integer

           uslv = 0

           gckl = 3

           While (uslv = 0)

               gckl = gckl + 1

               For i = 1 To 6

                   sum = 0

                   For j = 1 To 6

                       If (i = j) Then

                           sum = sum

                       End If

                       If (i <> j) Then

                           sum = sum + a(i, j) * x(j, gckl - 1)

                       End If

                       x(i, gckl) = (1 / a(i, i)) * (b(i) - sum)

                   Next

               Next

               'Производим проверку, достигли мы желаемой точности или нет

               Dim zmod As Double

               uslv = 1

               For i = 1 To 6

                   zmod = x(i, gckl) - x(i, gckl - 1)

                   If (zmod < 0) Then

                       zmod = zmod * (-1)

                   End If

                   If (zmod > toch) Then

                       uslv = 0

                   End If

               Next

               If gckl = 9999 Then uslv = 1

           End While

           'Выводим ответ

           Console.WriteLine("FINISH")

           Console.WriteLine()

           Console.WriteLine()

           For j = 1 To 6

               Console.WriteLine("X[" & j & "]=" & x(j, gckl) & " ")

           Next

           Console.WriteLine()

           Console.WriteLine()

       End If

       Console.Write("Press any key")

       Console.ReadKey()

   End Sub

End Module

На этом изображении –  начало программы, в среде Visual Basic.

На данном изображении – консольное окно программы после окончания ее выполнения

Задача 2.

Найти число тонн на 1 см осадки Т для случая плавания судна при осадке по ГВЛ в пресной и соленой воде (Rв = 1.025 т/м^3), если известны длина судна L м, ширина B м и коэффициент полноты площади ГВЛ α.

Математическая модель

Для решения данной задачи я использую формулы из учебника В.Б Жинкина «Теория и устройство корабля».

Расчетные зависимости.


Осадка судна вычисляется по формуле:
Т=P/Rв*S
где
P – число тонн, Rв – плотность воды, S – площадь судна.


Площадь ватерлинии вычисляется по формуле:

Swl= α*L*B,

где α - коэффициент полноты площади грузовой ватерлинии, L - длина судна, B - ширина судна.

Выводим формулу для нахождения Р:
P=Т/Rв*α*L*B
где P – число тонн, T – осадка судна, Rв – плотность воды, α - коэффициент полноты площади грузовой ватерлинии, L - длина судна, B - ширина судна.
Т.к. Т и Rв даны нам в задаче и являются постоянными, можно записать формулу так:
P=0.01/1.025*α*L*B

Результаты: тесты, итоги, доказательство истинности.

При решении поставленной задачи использованы формулы, применяемые для вычисления численных  характеристик судна.

Разработано приложение с графическим интерфейсом, позволяющее вводить необходимые числовые значения в соответствующие окна.

Пример:

Длина судна(L): 24

Ширина судна(B): 12

Коэффициент полноты площади ватерлинии (Альфа): 0,2

При нажатии кнопки «Рассчитать» выполняется вычисление, и выводится результат:

Число тонн(P): 0,000169376693766938

Отображается синим цветом.



Разработка алгоритма

P=0.01/1.025*α*L*B



Листинг программы

Public Class Form1

   ' программист Щукин

   ' Объявление переменных

   Dim L, B, T, r, Alpha As Double       ' Входные параметры

   Dim P As Double                           ' Выходные параметры

   Dim Err As Double                               ' Счетчик ошибок

   ' Обработка нажатия кнопки расчета

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       ' Обнуляем счетчик ошибок

       Err = 0

       ' Создаем массив AllText, содержащий все TextBox'ы формы

       Dim AllText As Control

       ' Начинаем проверку на то, что введенные в текстовые поля параметры - числа

       For Each AllText In Me.Controls

           If TypeOf (AllText) Is TextBox Then

               ' Если параметр - не число, а текст, то прибавляем к счетчику ошибок единицу и меняем цвет неверного поля на красный

               If Not IsNumeric(AllText.Text) Then

                   Err = Err + 1

                   AllText.ForeColor = Color.Red

               End If

               ' Если параметр - число, то меняем цвет верного поля на черный

               If IsNumeric(AllText.Text) Then

                   AllText.ForeColor = Color.Black

               End If

           End If

       Next

       ' Если все параметры - числа, то переходим к следующему шагу:

       ' Начинаем проверку на то, что Альфа - не более 1 (единицы) и не менее 0 (нуля)

       ' и остальные параметры (L, B,) - не отрицательные или ненулевые числа

       ' и делаем неверные значения красными

       If Err = 0 Then

           If Convert.ToDouble(TextBox4.Text) > 1 Or Convert.ToDouble(TextBox4.Text) <= 0 Then

               TextBox4.ForeColor = Color.Red

               Err = Err + 1

           End If

          

           If Convert.ToDouble(TextBox1.Text) <= 0 Then

               TextBox1.ForeColor = Color.Red

               Err = Err + 1

           End If

           If Convert.ToDouble(TextBox2.Text) <= 0 Then

               TextBox2.ForeColor = Color.Red

               Err = Err + 1

           End If

           

       End If

       ' После проверки всех полей, смотрим, если счетчик ошибок > 0, то не производим вычисления,

       ' а просим пользователя исправить данные. Если все данные верны, то производим вычисления

       If Err > 0 Then

           Label12.ForeColor = Color.Red

           Label12.Text = "Проверьте и исправьте входные данные!"

       End If

       ' Когда все ошибки исправлены,

       ' расчет:

       If Err = 0 Then

           ' Получаем значения формул из введенных пользователем данных

           L = TextBox1.Text

           B = TextBox2.Text

           Alpha = TextBox4.Text

          

           ' Считаем по формулам

           P = 0.01 / (Alpha * L * B * 1.025)

           ' Выводим результат

          

           Label11.Text = "Число тонн на 1 см осадки (P) = " & P

           Label12.ForeColor = Color.Green

           Label12.Text = "Расчет успешно произведен"

       End If

   End Sub

   ' Проверка, что вводимые пользователем данные - числа (чтобы "на лету" менять цвет при исправлении ошибки)

   Private Sub CheckUserInput(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged, TextBox4.TextChanged

       ' Если не число, то делаем цвет неверного значения красным

       If Not IsNumeric(sender.Text) Then

           sender.ForeColor = Color.Red

       End If

       ' Если число, то делаем цвет верного значения черным

       If IsNumeric(sender.Text) Then

           sender.ForeColor = Color.Black

       End If

   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

       Close()

   End Sub

End Class



На данном изображении – программа, по расчету характеристик судна, выполненная в среде Visual Basic.



На данном изображении – графическая составляющая программы, окно запроса параметров судна.


Литература

К. П. Курцева, Е. Г. Шешуков

« Методы вычислений. Часть 1. Численные методы алгебры. Конспекты лекций и задачи»

А. Ф. Высицкий, С. Н. Леора,  Г. В. Проценко,  А. В. Смольников, С. К. Шавинская

« Курсовая работа по информатике.  Учебное пособие » (12-16 стр., 188-200 стр.)

В.Б. Жинкин

« Теория и устройство корабля »

Свободна энциклопедия « Википедия »


начало

- - - - - - - - - -[ с клавиатуры

- - - - - - - - - -[  на экран

- - - - - - - - - -[  с клавиатуры

- - - - - - - - - -[  на экран

для i=1 до 6 с шагом 1

6 для j=1 до 6 с              шагом 1

с шагом 1

      

Aij

Введите коэффициенты

Ввод

Введите точность

нет

да

-                на экран ]- - - - - - - - - - --

- - - - - - - - - -[  на экран

Не сходится

сходится

- - - - - - - - - -[  с клавиатуры

конец

∆=0

пауза

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

Bi

начало

- - - - - - - - - -[  с клавиатуры

Ввод значений:

L, B, α.

1> α >0

L>0

B>0

нет

[  на экран

«Проверьте и исправьте входные данные»

да

пауза

конец


 

А также другие работы, которые могут Вас заинтересовать

12208. ИССЛЕДОВАНИЕ ПОГЛОЩЕНИЯ СВЕТА 114.5 KB
  ИССЛЕДОВАНИЕ ПОГЛОЩЕНИЯ СВЕТА Методические указания по выполнению лабораторной работы № 84 по оптике для студентов инженернотехнических специальностей Курск 2010 УДК 681.787.2 Составители: А.А. Родионов В.Н. Бурмистров Л.П. Пет...
12209. ИЗУЧЕНИЕ СВОЙСТВ ЛАЗЕРНОГО ПУЧКА СВЕТА 103 KB
  ИЗУЧЕНИЕ СВОЙСТВ ЛАЗЕРНОГО ПУЧКА СВЕТА Методические указания по выполнению лабораторной работы № 86 по оптике для студентов инженернотехнических специальностей Курск 2010 УДК 681.787.2 Составители: А.А. Родионов Л.П. Петрова В.Н. Бур
12210. ОПРЕДЕЛЕНИЕ МЕХАНИЧЕСКИХ НАПРЯЖЕНИЙ В ПРОЗРАЧНЫХ ТЕЛАХ МЕТОДОМ ФОТОУПРУГОСТИ 437 KB
  ОПРЕДЕЛЕНИЕ МЕХАНИЧЕСКИХ НАПРЯЖЕНИЙ В ПРОЗРАЧНЫХ ТЕЛАХ МЕТОДОМ ФОТОУПРУГОСТИ Методические указания по выполнению лабораторной работы № 94 по курсу Физика для студентов инженернотехнических специальностей Курск 2010 У...
12211. ФОТОУПРУГОСТЬ. ЧЕТВЕРТЬВОЛНОВАЯ И ПОЛУВОЛНОВАЯ ПЛАСТИНКИ 1.69 MB
  ФОТОУПРУГОСТЬ. Четвертьволновая и полуволновая пластинки Методические указания к выполнению лабораторной работы № 94а по оптике для студентов инженерно-технических специальностей Курск 2010 УДК 681.7.069.24 ...
12212. Расчет материальных затрат на изделия в стоимостном выражении по цехам 459.5 KB
  Часть 1. Постановка задачи 1. Постановка задачи 1.1. Наименование задачи: Расчет материальных затрат на изделия в стоимостном выражении по цехам. 1.2. Место решения задачи: Плановый отдел. 1.3. Цель решения задачи: Планирование расхода материалов. 1.4. Периодичность решен...
12213. Определение порядка реакции окисления йодид-ионов ионами трехвалентного железа 30.92 KB
  Лабораторная работа №2 Тема: определение порядка реакции окисления йодидионов ионами трехвалентного железа. Цель: определить частные и общий кинетический порядок реакции Fe3I→Fe2I Использованные формулы: 1 где: n1 – частный порядок реакции по ионам же
12214. Измерение электропроводности электролитов различной концентрации и определение температурного коэффициента электропроводности 230.5 KB
  Измерение электропроводности электролитов различной концентрации и определение температурного коэффициента электропроводности Цель работы: установить зависимость удельной и эквивалентной электропроводности электролита от концентрации и температуры. Определить т
12215. Определение константы скорости инверсии тростникового сахара (сахарозы) 185.5 KB
  Лабораторная работа: Определение константы скорости инверсии тростникового сахара сахарозы Цель работы: Ознакомиться с оптическим методом изучения кинетики реакции; определить порядок реакции по сахару и катализатору; определить средние константы скор
12216. Йодирование ацетона в кислой среде 33.62 KB
  Лабораторная работа №4 Йодирование ацетона в кислой среде. Цель работы: исследование кинетики реакции йодирования ацетона в кислой среде – определение порядка реакции константы скорости реакции. Кинетические эксперименты позволя