Определенный интеграл си шарп

Вычисление определенного интеграла функции F(x) (любой пример)

Здравствуйте. Помогите пожалуйста дописать программу вычисляющую определенный интеграл от любой введенной пользователем функции (на подобии онлайн калькуляторов определенных интегралов).

А именно я реализовал два метода: Метод Гаусса и Метод трапеций, а сложность заключается в том, что не могу ввести функцию заданную пользователем в программу для подстановки.

В ходе решения я прихожу к функции :

. static double f(double x) //интегрируемая функция { //тут должна быть формула введенная пользователем) return x * x; //вместо х*х - то что ввел пользователь } . 

Где х это уже посчитанное значение(цифра) (любым методом) (из точности , верхнего придела и нижнего). И в этой функции производится замена всех х введенной пользователем формулы — к примеру(не обязательно именно это) пользователь введет Math.Sin(x) — на цифру .
Так вот, не могу запихнуть в программу это самое Math.Sin(x) для последующей замены.
Выяснил , что необходимо парсинговать строку введенную в текстбокс. А вот справится не могу с этим.
Спасибо.

Вычисление определенного интеграла методом парабол
Доброго времени суток! Помогите пожалуйста в написание программы с блок-схемой алгоритма вычисления.

Вычисление определённого интеграла методом трапеции
Программа вычисляет определённый интеграл методом трапеции ->Не выводит значения переменных на.

Вычисление определенного интеграла методом парабол (Симпсона)
using System; using System.Collections.Generic; using System.Linq; using System.Text; .

Вычисление определенного интеграла методом криволинейных трапеций
Подскажите пожалуйста, написать консольную программу на C# для вычисления определенного интеграла.

Эксперт Python

Имхо, тут не надо писать своих велосипедов, воспользуйтесь готовым.
Я вижу три способа.
1. динамическая компиляция C#. Плюсы — самая высокая скорость, никаких сторонних компонентов (за рамками .net framework).
2. Воспользоваться готовым интерпретатором (IronPython, Boo, PowerShell). Минусы — нужны доп. компоненты, скорость ниже. Ну запрограммировать, думаю, будет проще.
3. Запускать интерпретатор Lua как отдельный процесс. Скорость самая маленькая, к тому же это тоже сторонний компонент, но маленький, таскать с собой ненапряжно.

Ну если из спортивного интереса — тогда можно и свой парсер написать.

Добавлено через 13 минут
А пардон, забыл — есть же еще Jscript. Тоже хороший вариант.

dondublon, Спасибо. Но я мало, что понял из вышеописанного. Т.к С# изучаю только 3 месяца. И буду очень признателен, если подробней опишите что к чему, как подключить итд. Спасибо)

int x = int.Parse(string s1) //string s1 - это та строка которую тебе надо парсить

Эксперт Python

Опишу подробнее.
1. Динамическая компиляция C# — т.е. в своей программе вы генерируете код класса (на C#) и подаете его компилятору (входит в .net framwork с самого начала). Тот компилирует, готовую длл-ку вы цепляете к вашей программе. Цепляете в run-time, не по правой кнопке.

2. Сторонние интерпретаторы. Из задача — выполнять код без компиляции, на то они и интерпретаторы. Их надо тащить с собой. У каждого свой способ подлючения к основной программе.
3. Lua (под windows, не под .net) — просто я с ней работал, очень простой и маленький интерпретатор. Общаться с программой через консоль, ты ей на вход print() — она тебе на выход результат. Будет относительно медленно.
4. JScript — описано тут http://www.codeproject.com/Art. ript-s-Eva .

Добавлено через 3 минуты
Вдогонку — насчет JScript посмотрите лучший ответ тут.
http://stackoverflow.com/quest. xpressions
Сам такие фишки не проворачивал.

Добавлено через 17 минут
и еще вдогонку: http://flee.codeplex.com/

Мне нужно из TextBox внести в программу строку Math.(лалала)*/+-x*x.. не важно какую подынтегральную функцию. И внеся её в программу заменить все символы х(переменные в интеграле) на те цифры , что получает функция. И выполнить расчет получившейся строки с математической токи зрения. Как если бы я прописал эту строку(Math.(лалала)*/+-x*x) в коде программы. Если я прописываю любую формулу в приведенном выше примере. То программа работает нормально. Иксы меняются на цифры и выводит ответ.

dondublon
1. Если я правильно понимаю, то я должен введенное пользователем подынтегральное выражение сохранить в файле с расширением длл. А в программе вызвать этот файл. Если да. То как мне тогда поменять там все Иксы? И вызвать тот самый файл.

2.»выполнять код без компиляции» Собственно что и нужно. Пытаюсь найти подходящее, пока чем глубже тем хуже)
3. Тут все плохо.
4. Попробую покапать в эту сторону. Спасибо.

Эксперт Python

по п.1. — выражение ты сохраняешь в файле с расширением .cs. А его компилируешь в dll.
по 2 и 3 — да не сцы, все через это проходят
по 4. Я, кстати, ща провернул. Ругается, что объект deprecated и вообще not recommended. Но работает.

Вот что склеил в консольке. Работает. Осталось доделать на Forms и внести свои данные.

sqrt, sin, cos, tan, atan, acos, asin, acotan, exp, ln, 10log, fac, sinh, cosh, tanh, abs, ceil, floor, sfac, round, fpart.

Hashtable в using System.Collections;

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
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using info.lundin.math; // needs a reference to Microsoft.JScript.dll namespace ConsoleApplication2 { class Program { static void Main(String[] args) { // Instantiate the parser ExpressionParser parser = new ExpressionParser(); // Create a hashtable to hold values Hashtable h = new Hashtable(); // Add variables and values to hashtable h.Add( "x", 1.ToString() ); h.Add( "y", 2.ToString() ); // Parse and write the result double result = parser.Parse(Console.ReadLine(), h); Console.WriteLine( "", result ); Console.Read(); } } }

к примеру ввел xcos(y) работает и тп. Значения менять думаю будет не сложно h.Add( «x», 1.ToString() );

Добавлено через 40 минут
Осталась одна проблема. Решив её думаю всё будет работать
в функции не получается сделать так к примеру

static double f(double x) { x = Double.Parse(textBox3.Text);//выделает textBox3 return x;

и сообщает что:
Ошибка 1 Для нестатического поля, метода или свойства «Kurs.Form1.textBox3» требуется ссылка на объект

как обойти это. Потому что ввод нужно организовать именно в функии.

Добавлено через 13 минут
Прописываю её в глобальную переменную

public partial class Form1 : Form { string ss = textBox3.Text;. 

Источник

Метод Симпсона

Метод Симпсона – один из приемов численного интегрирования.

Описание алгоритма

Суть метода заключается в приближении подынтегральной функции на отрезке [a, b] интерполяционным многочленом второй степени p2(x), то есть приближение графика функции на отрезке параболой.

Формула Симпсона:

Формула Симпсона

где f(a), f((a + b)/2) и f(b) – значения функции в соответствующих точках (на концах отрезка и в его середине).

Для более точного вычисления интеграла, интервал [a, b] разбивают на N = 2n элементарных отрезков одинаковой длины и применяют формулу Симпсона на составных отрезках. Каждый составной отрезок состоит из соседней пары элементарных отрезков. Значение исходного интеграла является суммой результатов интегрирования на составных отрезках:

Формула Симпсона

где h = (b — a)/N – шаг интегрирования, а xk = a + kh – чередующиеся границы и середины составных отрезков, на которых применяется формула Симпсона.

Реализация алгоритма

using System; class Program < //метод для вычисления значения интеграла по формуле Симпсона private static double Simpson(Funcdouble, double> f, double a, double b, int n) < var h = (b - a) / n; var sum1 = 0d; var sum2 = 0d; for (var k = 1; k var xk = a + k * h; if (k 1) < sum1 += f(xk); >var xk_1 = a + (k - 1) * h; sum2 += f((xk + xk_1) / 2); > var result = h / 3d * (1d / 2d * f(a) + sum1 + 2 * sum2 + 1d / 2d * f(b)); return result; > static void Main(string[] args) < //локальная функция double f(double x) => x / (x - 1); var result = Simpson(f, 4, 10, 1000); Console.WriteLine("S = ", result); Console.ReadKey(); > > 

Источник

Написать программу вычисления определенного интеграла

Написать программу вычисления определенного интеграла
Здравствуйте форумчане. Очень нужна помощь. Нужно: 1. Написать программу вычисления.

Написать программу вычисления определенного интеграла по методу прямоугольников
Люди добрые, может кто подсказать? \int_<\pi>^x\cdot \sin x dx Задание: Написать программу.

Лучший ответ

Сообщение было отмечено Памирыч как решение

Решение

Если бы Вы не ленились, то легко бы нашли решение на вики, там оно на C представлено.
Пару минут. и вот готовое решение на 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
public class Program { private static void Main() { double integral = CalcIntegral(InFunction, 0, 2, 500); Console.WriteLine("The value of the integral is: \n", integral); } private static double InFunction(double x) //Подынтегральная функция { double square = (x * x); return square * Math.Sqrt(4 - square); } private static double CalcIntegral(Funcdouble, double> func, double a, double b, int n) { int i; double result = 0; double h = (b - a) / n; for (i = 0; i  n; i++) { result += func(a + h * (i + 0.5)); //Вычисляем в средней точке и добавляем в сумму } result *= h; return result; } }

Источник

Читайте также:  Перезагрузка страницы ajax php
Оцените статью