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

Текст клиентского кода (программы)

Читайте также:
  1. Clear (Стерти) – видаляє обраний фрагмент тексту, але не заносить його в текстовий буфер.
  2. V. Текст лекции
  3. А) источники эпоса и их реализация в тексте
  4. А. Социальный контекст
  5. Авторизация текста: пример экспертизы
  6. Амфиболиты – породы темно-зеленого цвета, среднезернистые, мигматизированные, полосчатой текстуры
  7. Ассортимент текстильной галантереи

Решение дифференциального уравнения методом Рунге-Кутта

Вариант 1

Выполнил студент гр. СТ-11

Матушкин Д.М.

Постановка задачи

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

 

Дифференциальное уравнение:

dy/dx = sin(3y/1+x2)+1

Начальные условия: .

 

Текст клиентского кода (программы)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsFormsApplication2

{

public partial class Form1: Form

{

double[] x, y, y1; int n = 50;

double h, x0, y0;

int i = 0;

Double My = 0, MaxY = 0, Mx = 0, MaxX = 0, My1 = 0, MaxY1 = 0;

 

Bitmap myBmp, myBmp2;

 

public Form1()

{

InitializeComponent();

}

 

private void button2_Click(object sender, EventArgs e)

{

//Решение

dataGridView1.Rows.Clear();

x = new double[n + 1];

y = new double[n + 1];

y1 = new double[n + 1];

x0 = Convert.ToDouble(textBox1.Text);

y0 = Convert.ToDouble(textBox2.Text);

h = Convert.ToDouble(textBox3.Text);

x[0] = x0;

y[0] = y0;

y1[0] = dydx(x[0], y[0]);

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

{

x[i] = x0 + h * i;

y[i] = y[i - 1] + dy(x[i - 1], y1[i - 1]);

y1[i] = dydx(x[i], y[i]);

 

}

 

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

{

// Заполнение таблицы

dataGridView1.Rows.Add();

dataGridView1.Rows[i].Cells[0].Value = i;

dataGridView1.Rows[i].Cells[1].Value = x[i];

dataGridView1.Rows[i].Cells[2].Value = y[i];

dataGridView1.Rows[i].Cells[3].Value = y1[i];

 

 

}

if (checkBox1.Checked)

{

postroenie();

}

}

 

double dydx(double D, double S)

{

//Выражение для производной

return Math.Sin((3*S)/(1+(D*D))) + 1;

}

 

 

double dy(double D, double S)

{

//Коэффициенты k1,k2,k3,k4

double k1, k2, k3, k4;

k1 = h * dydx(x[i - 1], y[i - 1]);

k2 = h * dydx(x[i - 1] + h / 2, y[i - 1] + k1 / 2);

k3 = h * dydx(x[i - 1] + h / 2, y[i - 1] + k2 / 2);

k4 = h * dydx(x[i - 1] + h, y[i - 1] + k3);

 

return 1.0 / 6 * (k1 + 2 * k2 + 2 * k3 + k4);

}

void postroenie()

{

// Построение графика

int[] yint, y1int, xint;

if (x == null || y == null || y1 == null) return;

MaxY = 0;

MaxY1 = 0;

MaxX = 0;

myBmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);

Graphics gr1 = Graphics.FromImage(myBmp);

Pen P1 = new Pen(Color.Red, 2);

gr1.DrawRectangle(P1, 1, 1, pictureBox1.Width - 2, pictureBox1.Height - 2);

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

{

if (System.Math.Abs(y[i]) > MaxY)

{

MaxY = System.Math.Abs(y[i]);;

}

if (System.Math.Abs(x[i]) > MaxX)

{

MaxX = System.Math.Abs(x[i]);

}

if (System.Math.Abs(y1[i]) > MaxY1)

{

MaxY1 = System.Math.Abs(y1[i]);

}

}

My = (pictureBox1.Height) / 2.2 / MaxY;

My1 = (pictureBox1.Height) / 2.2 / MaxY1;

Mx = (pictureBox1.Width) / 2.2 / MaxX;

yint = new int[n + 1];

y1int = new int[n + 1];

xint = new int[n + 1];

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

{

yint[i] = (pictureBox1.Height) / 2 - Convert.ToInt32(y[i] * My);

y1int[i] = (pictureBox1.Height) / 2 - Convert.ToInt32(y1[i] * My1);

xint[i] = pictureBox1.Width / 2 + Convert.ToInt32(x[i] * Mx);

 

}

Pen P2 = new Pen(Color.Green, 6);

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

{

gr1.DrawLine(P2, xint[i], yint[i], xint[i + 1], yint[i + 1]);

}

Pen P3 = new Pen(Color.Brown, 6);

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

{

gr1.DrawLine(P3, xint[i], y1int[i], xint[i + 1], y1int[i + 1]);

}

 

Pen P4 = new Pen(Color.Black, 3);

//Кисть для шрифта на рисунке

Brush B2 = new SolidBrush(Color.Black);

System.Drawing.Font E = new Font("time new roman", 14);

// Вывод надписей на рисунке

gr1.DrawString("y dy/dx", E, B2, pictureBox1.Width / 2 - 20, 0);

gr1.DrawString("x", E, B2, pictureBox1.Width - 20, pictureBox1.Height / 2);

gr1.DrawLine(P4, 10, (pictureBox1.Height) / 2, pictureBox1.Width - 10, (pictureBox1.Height) / 2);

gr1.DrawLine(P4, pictureBox1.Width / 2, (pictureBox1.Height) - 10, pictureBox1.Width / 2, 10);

pictureBox1.Image = myBmp;

legenda();

}

 

void legenda()

{

// Вывод легенды

myBmp2 = new Bitmap(pictureBox2.Width, pictureBox2.Height);

Graphics gr1 = Graphics.FromImage(myBmp2);

Pen P1 = new Pen(Color.Green, 6);

gr1.DrawLine(P1, pictureBox2.Width / 2, 20, pictureBox2.Width - 10, 20);

Pen P2 = new Pen(Color.Brown, 6);

gr1.DrawLine(P2, pictureBox2.Width / 2, 50, pictureBox2.Width - 10, 50);

 

Brush B2 = new SolidBrush(Color.Black);

System.Drawing.Font E = new Font("time new roman", 14);

gr1.DrawString("y(x)", E, B2, 7, 7);

gr1.DrawString("dy/dx", E, B2, 7, 37);

pictureBox2.Image = myBmp2;

}

 

private void button1_Click(object sender, EventArgs e)

{

Close();

}

}

}


Дата добавления: 2015-07-26; просмотров: 75 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Расчет нормы времени| Профилактика ПК

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