Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 8
1

Задача Коши, метод Эйлера , разделить на несколько параллельных потоков

14.12.2013, 15:47. Показов 1951. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, народ. Я тут уже задавал этот вопрос, но как-то ответы не решили проблемы.

Вот мой код решения задачи Коши методом Эйлера:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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();
        }
    }
}
Мне посоветовали заменить цикл for на такую часть:
C#
1
2
3
4
5
Parallel.For(0, m, () => {
    y += h * fun(x, y);
    Console.WriteLine("x = " + (x + h) + " y = " + y);
    x += h;
});
Заменяя, начинаются просто кавардак.
Пишет, что данный метод не может конвертировать double в long (Parallel.For использует только long), синтаксических ошибок ("=>", ";" - не воспринимает) и т.п.

Кто-то может подсказать, как же все-таки мне окончательно и правильно разложить решение задачи коши на два параллельных потока?

Спасибо, за внимание. Буду ждать советов.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2013, 15:47
Ответы с готовыми решениями:

Задача Коши, метод Эйлера, разделить на несколько параллельных потоков
Вечер добрый, уважаемые. Не могли бы Вы мне помочь? Мне нужно сделать задачу Коши, методом Эйлера...

Метод Эйлера (задача Коши)
Помогите пожалуйста решить задачу Коши методом Эйлера: y' = (y − 5x)^2 − (x + 3)^2...

Метод Эйлера и метод Эйлера-Коши нужно найти ошибку?
Нужно решить дифур методом Эйлера и Эйлера-Коши,я решил все работает но по идее метод Эйлера менее...

Задача Коши для дифференциального уравнения второго порядка методом Эйлера- Коши
Решить задачу Коши для дифференциального уравнения второго порядка методом Эйлера- Коши....

1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.12.2013, 16:01 2
AlexisWhite, как ты собираешься параллелить метод, в котором n+1-е значение зависит от n-го?? Это физически нереализуемо.

Добавлено через 4 минуты
Ужас, почему вы не выбираете нормально типы данных? Счетчик цикла - double, число разбиений - double. Да, можно написать в одну строчку, но думать головой-то надо...

Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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();
        }
ничего тут больше не сделать...
0
14.12.2013, 16:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2013, 16:01
Помогаю со студенческими работами здесь

Задача Коши для дифференциального уравнения первого порядка методом Эйлера-Коши
Всем привет! Такая проблема: прописал решение задачи Коши в маткаде, а при нахождении игрека выдает...

Метод трапеций (неявный метод Эйлера-Коши второго порядка)
Имеется уравнение y`=-2ky^2 при k=500. найти y(x) методом трапеций (неявный метод эйлера-коши...

Метод Эйлера-Коши
Здравствуйте, скажите пожалуйста, что я сделал в этом методе не так?

Метод Эйлера-Коши
y=2xy y(0)=1 h=0.1 x(0)=0 Решить усовершенствованным методом Эйлера , методом Эйлера-Коши...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru