Форум программистов, компьютерный форум CyberForum.ru

Расчет среднеинтегрального значения - C++

Восстановить пароль Регистрация
 
Roomper
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 4
31.05.2011, 16:09     Расчет среднеинтегрального значения #1
Помогите решить задачу! Вот собственно условие:

Если река покрыта ледяным покровом, то скорость струй воды, лежащих на одной и той же вертикали, можно приближенно выразить формулой: V = a + b*M*ln(x) + k*M*ln(h-x),
где a, b, M, k – постоянные; x— расстояние от дна реки. Определить среднюю скорость для заданной высоты уровня воды h. Построить график V=f(x/h). Сравнить полученную среднюю скорость определенную аналитически и численно. Решить задачу с использованием численных методов интегрирования.


Пробовал вычислить интеграл методом трапеции. Все вроде ничего, но только при вычислении логарифма вылезает ошибка: log: DOMAIN ERROR а следом Invalid floating point operation
Если кто предложит свой варинт решения, буду очень признателен.


Значения взял такие: a=15,b=1,M=2,k=1,h=15

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
TForm1 *Form1;
double toch;
double a1,b1,M,k,h1;
 void TRAPEC(double,double,double);
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonOKClick(TObject *Sender)
{
 
a1 = StrToFloat(Label_a->Text);
b1 = StrToFloat(Label_a->Text);
M = StrToFloat(Label_M->Text);
k = StrToFloat(Label_k->Text);
h1 = StrToFloat(Label_h->Text);
toch= StrToFloat(LabeledEditToch->Text);
 
TRAPEC(0.01,25,toch);
}
//---------------------------------------------------------------------------
void TRAPEC(double a,double b,double toch)
{
 
  double RezNew=0, RezOld=0;
  double tmp= a;
  int n=2;
 
  double h;
  h= fabs(b-a)/n;
 
  for (int i = 0; i <= n; i++)
  {
    if (i==n ||i==0) RezNew += (a1+b1*M*log(tmp)+k*M*log(h1-tmp))/2;
    else RezNew+=a1+b1*M*log(tmp)+k*M*log(h1-tmp);
    tmp+=h;
  }
  RezNew*=h;
 
  while (fabs(RezNew-RezOld)/3> toch)
  {
    n*=2;
    h= fabs(b-a)/n;
    tmp=a;
 
    RezOld=RezNew;
    RezNew=0;
    for (int i = 0; i <= n; i++)
    {
        if (i==n ||i==0) RezNew += (a1+b1*M*log(tmp)+k*M*log(h1-tmp))/2;
        else RezNew+=a1+b1*M*log(tmp)+k*M*log(h1-tmp);
        tmp+=h;
    }
    RezNew*=h;
  }
 
  Form1->LabeledEditTrapec->Text=FloatToStrF(RezNew/(b-a),ffNumber,10,5);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2011, 16:09     Расчет среднеинтегрального значения
Посмотрите здесь:

Расчет значения многочленов и их степень C++
C++ Расчет значения экспоненты
расчет значения e^x(x это степень) C++
Расчет сумм в формуле и расчет xi должны быть оформлены в виде отдельных функций. C++
C++ Вычислить и вывести на экран значения функции в зависимости от входного значения Х
Вычислить значения функции F на интервале от начального значения до конечного значения C++
Вывести индексы тех элементов, значения которых больше значения предыдущего C++
C++ Найти элементы массива значения которых больше значения их индексов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru