Задача Коши, метод Эйлера , разделить на несколько параллельных потоков - C#
Формулировка задачи:
Привет, народ. Я тут уже задавал этот вопрос, но как-то ответы не решили проблемы.
Вот мой код решения задачи Коши методом Эйлера:
Мне посоветовали заменить цикл for на такую часть:
Заменяя, начинаются просто кавардак.
Пишет, что данный метод не может конвертировать double в long (Parallel.For использует только long), синтаксических ошибок ("=>", ";" - не воспринимает) и т.п.
Кто-то может подсказать, как же все-таки мне окончательно и правильно разложить решение задачи коши на два параллельных потока?
Спасибо, за внимание. Буду ждать советов.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Koshi
{
class Program
{
public static double fun(double x, double y)
{
return x + y;
}
static void Main(string[] args)
{
double b, h, x, y, i, m;
string input;
string[] par;
Console.WriteLine("Введите значения а, b, y0 и число значений функции(m) через пробел: ");
input = Console.In.ReadLine();
par = input.Split(' ');
try
{
x = Convert.ToDouble(par[0]);
b = Convert.ToDouble(par[1]);
y = Convert.ToDouble(par[2]);
m = Convert.ToDouble(par[3]);
}
catch (Exception e)
{
Console.WriteLine("Вы ввели неверное значение");
return;
}
h = (b - x) / m;
Console.WriteLine("~~~~~~~~~~Метод Эйлера~~~~~~~~~~");
for (i = 0; i < m; i++)
{
y += h * fun(x, y);
Console.WriteLine("x = " + (x + h) + " y = " + y);
x += h;
}
Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
Console.ReadLine();
}
}
}Parallel.For(0, m, () => {
y += h * fun(x, y);
Console.WriteLine("x = " + (x + h) + " y = " + y);
x += h;
});Решение задачи: «Задача Коши, метод Эйлера , разделить на несколько параллельных потоков»
textual
Листинг программы
static void Main(string[] args)
{
int m;
double b, h, x, y;
Console.WriteLine("Введите значения а, b, y0 и число значений функции(m) через пробел: ");
try
{
string[] par = Console.ReadLine().Split(' ');
x = Convert.ToDouble(par[0]);
b = Convert.ToDouble(par[1]);
y = Convert.ToDouble(par[2]);
m = Convert.ToInt32(par[3]);
}
catch (Exception e)
{
Console.WriteLine("Вы ввели неверное значение");
return;
}
h = (b - x) / m;
Console.WriteLine("~~~~~~~~~~Метод Эйлера~~~~~~~~~~");
for (int i = 0; i < m; i++)
{
y += h * fun(x, y);
x += h;
Console.WriteLine("x = {0} y = {1}", x, y);
}
Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
Console.ReadLine();
}