Решение системы 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д