Решение системы 6 уравнений методом Рунге-Кутта 4 порядка - C#
Формулировка задачи:
Подскажите пожалуйста, как переделать мою программу для решения системы 6 уравнений методом рунге кута 4 порядка? Переделать на язык С#?
Проблема в том, что я не понимаю, как в моей программе реализовать систему заданных уравнений.
dQ/dt = g/V*(N*cosj-cosQ)
dH/dt = V*sinQ
dP/dt=(-g/V*cosQ)*N*sinj
dX/dt=V*cosQ*cosP
dZ/dt=V*cosQ*sinP
g,N,j, V– задаутся с клавы
Начальные условия:
Qo , Ho,Po,Xo,Zo – задаются с клавы
Программа для другого уравнения на с++
Листинг программы
- #include <cstdlib>
- #include <iostream>
- #include <math.h>
- using namespace std;
- double myfunc(const double& x, const double& y)
- {
- return 6*x*x+5*x*y+y*y+4*x+2*y-3;
- }
- int main(int argc, char *argv[])
- {
- int i, n;
- double x, y, h,py, fy,k,k0,k1,k2,k3;
- cout<< " h = "; cin>>h;
- cout<< " n = "; cin>>n;
- cout<< " x0 = "; cin>>x;
- cout<< " y0 = "; cin>>y;
- for (i = 0; i <= n; i++)
- {
- fy = myfunc(x, y);
- k0=h*fy;
- k1=h*myfunc(x+h/2, y+k0/2);
- k2=h*myfunc(x+h/2, y+k1/2);
- k3=h*myfunc(x+h, y+k2);
- k=(k0+2*k1+2*k2+k3)/6;
- y += k;
- cout << "y = " << y;
- cout << " x = " << x << "\n";
- x += h;
- }
- system("PAUSE");
- return EXIT_SUCCESS;
- }
Решение задачи: «Решение системы 6 уравнений методом Рунге-Кутта 4 порядка»
textual
Листинг программы
- using System;
- using System.Windows.Forms;
- using System.Collections.Generic;
- namespace рас1
- {
- public partial class Form1 : Form
- {
- // Здесь будут храниться наши данные.
- private List<MyData> list;
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- list = new List<MyData>();
- // Создаем связь между DataGridView, BindingSource и нашим списком.
- dataGridView1.AutoGenerateColumns = true;
- dataGridView1.DataSource = bindingSource1;
- bindingSource1.DataSource = list;
- button1.Click += new EventHandler(button1_Click);
- }
- private void button1_Click(object sender, EventArgs e)
- {
- double h, n, t, Q, V, ny, j;
- if (!double.TryParse(textBox1.Text, out h)) h = 0;
- if (!double.TryParse(textBox2.Text, out n)) n = 0;
- if (!double.TryParse(textBox3.Text, out t)) t = 0;
- if (!double.TryParse(textBox4.Text, out Q)) Q = 0;
- if (!double.TryParse(textBox5.Text, out V)) V = 0;
- if (!double.TryParse(textBox6.Text, out ny)) ny = 0;
- if (!double.TryParse(textBox7.Text, out j)) j = 0;
- double fy, k, k0, k1, k2, k3;
- for (int i = 0; i < n; i++)
- {
- fy = MyFunc(t, Q);
- k0 = h * fy;
- k1 = h * MyFunc(t + h / 2.0, Q + k0 / 2.0);
- k2 = h * MyFunc(t + h / 2.0, Q + k1 / 2.0);
- k3 = h * MyFunc(t + h, Q + k2);
- k = (k0 + 2.0 * k1 + 2.0 * k2 + k3) / 6.0;
- Q += k;
- // Заносим данные в наш список.
- list.Add(new MyData(t, Q));
- t += h;
- }
- // Отображаем результат (наш список) в DataGridView
- bindingSource1.ResetBindings(true);
- }
- // функция.
- private double MyFunc(double t, double Q,double V, double ny, double j)
- {
- return Q = 9.81 / V * (ny * Math.Cos(j) - Math.Cos(Q));
- }
- private void button2_Click(object sender, EventArgs e)
- {
- Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
- Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
- Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
- //Книга.
- ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);
- //Таблица.
- ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
- //Значения [y - строка,x - столбец]
- ObjWorkSheet.Cells[2, 1] = label1.Text;
- ObjWorkSheet.Cells[2, 2] = label2.Text;
- ObjWorkSheet.Cells[2, 3] = label3.Text;
- ObjWorkSheet.Cells[2, 4] = label4.Text;
- ObjWorkSheet.Cells[3, 1] = textBox1.Text;
- ObjWorkSheet.Cells[3, 2] = textBox2.Text;
- ObjWorkSheet.Cells[3, 3] = textBox3.Text;
- ObjWorkSheet.Cells[3, 4] = textBox4.Text;
- for (int i = 0; i < list.Count; i++)
- {
- ObjWorkSheet.Cells[i + 3, 1] = list[i].T;
- ObjWorkSheet.Cells[i + 3, 2] = list[i].Q;
- }
- //Вызываем нашу созданную эксельку.
- ObjExcel.Visible = true;
- ObjExcel.UserControl = true;
- }
- }
- }
- // Класс, в котором хранятся данные.
- class MyData
- {
- public double T { get; set; }
- public double Q { get; set; }
- public MyData(double t, double Q)
- {
- this.T = t;
- this.Q = Q;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д