Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С#, Алгоритм] Методы численного интегрирования 
:(
    Опции темы
Zhotick
Дата 31.5.2009, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.5.2009

Репутация: нет
Всего: нет



Здравствуйте, помогите пожалуйста.
Я пытаюсь реализовать метод численного интегрирования методом "Выходящих прямоугольников", вот теоретическая база: http://ru.wikipedia.org/wiki/%D0%A2%D1%80%....86.D0.B8.D0.B9
Где ошибка? Может кто поможет?
Код ниже:
Код

using System;
class Интеграл1 
{
struct Integral
{
double a, b;
int m;

public Integral(double ina, double inb, int inm)
{
a = ina < inb ? ina : inb;
b = ina < inb ? inb : ina;
m = inm;
}
public override string ToString()
{
string s;
s = String.Format("Точное значение= {0:f3}\nПриближённое значение={1:f3}",
ИнтТрапеции, ИнтЛейбниц);
double Delta = (ИнтТрапеции - ИнтЛейбниц) / ИнтЛейбниц * 100;
Delta = Math.Abs(Delta);
s += String.Format("\nПогрешность = {0:f3} %",Delta);
return s;
}
public double fx(double x)
{
return Math.Sin(x) - x;
}
public double Fx(double x)
{
return -Math.Cos(x) - 0.5*x*x;
}
public double p
{ get { return Math.Pow((b - a), 3)*Math.Sqrt(3) / (48 * m * m); } }


public double h
{
get
{
return (b-a)/m;
}
}
public double ИнтЛейбниц
{
get
{
return Fx(b) - Fx(a);
}
}
public double ИнтТрапеции
{
get
{
double sum = (fx(a)+fx(b));
for (double i = a + h; i < b; i += h) sum += fx(i);
sum *= h;
sum += p;
return sum;
}
}
}
static void Main()
{
Integral obj=new Integral( 3.1415926535897932384626433832795,4*3.1415926535897932384626433832795/3,800);
Console.WriteLine(obj.ToString() );

}
}

Спасибо.
PM MAIL   Вверх
walter66
Дата 10.6.2009, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.6.2009

Репутация: нет
Всего: нет



Милочка, ну кто же так цикл организует? :
for (double i = a + h; i < b; i += h) sum += fx(i);

Числа-то вещественные, в каждом вычислении ошибка набегает и совершенно не ясно в какой последней точке будет вычислено значение функции. Суммировать надо через целые числа. Что-то вроде:

int i,n=(b-a)/h;
for(i=0;i<=n;i++)
 sum+=fx(a+i*h);

Остальное не смотрел.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0384 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.