crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Алгоритм построения графика функции...
Гость_Гость_Serg_yl_*_*
сообщение 8.3.2011, 19:44
Сообщение #1





Гости








    


Вечер добрый! :-)

Стоит задача.
Разработать программу для вычисления определенного интеграла методом средних прямоугольников для функции типа: y=a*cos(b*x)+x^d. Коэффициенты a, b, c, d и границы интервала интегрирования считываются из файла. В диалоге необходимо изобразить график функции, графики прямых, ограничивающих область интегрирования, оси координат.

Итак, начну излагать все порядку. Прошу меня поправить, если я не правильно излагаю алгоритм нахождения координат точек графики и вычисления определённого интеграла методом средних прямоугольников.

1. Построим график функции y=a*cos(b*x)+x^d.
1.1 Присвоим значения коэф. и границы интегрирования:
 n=0; //граница A
        k=10; //Граница B      
        a=1;
        b=5;
        c=0.5; //Точность вычисления или коэф. дифференцирования
        d=3;

1.2 Получим общее кол. точек графика (итераций) с помощью метода средних прямоугольников.
iter=(qRound (qAbs(k-n)/c))

1.3 Найдем координаты всех точек для построения графика ограниченного [0, 10].
double xxx1[iter], yyy1[iter];
for (j=0; j<=iter; j++)
        {
            if (j=0)
            {
                xxx1[j]=n;
            }
            if (j!=0)
            {
            xxx1[j]=xxx1[j-1]+c; //Получаем след. значение координаты x, прибавляя к привед. зн. коэф. дифференцирования
            }
            //Находим координату y путем подставления полученного зн. x  в функцию y=a*cos(b*x)+x^d
            yyy1[j]=a*cos(b*xxx1[j])+pow(xxx1[j],d);
}

Таким образом мы получаем 2 массива (xxx1 - коорд. X и yyy1 - коорд. Y ) типа double.
1.4 Строим наш график.
cosFunCurve = new QwtPlotCurve("Test");
        cosFunCurve->setPen(QPen(Qt::blue));
        cosFunCurve->setData(xxx1,yyy1,iter);
        cosFunCurve->attach(funPlot);
        funPlot->replot();

И тут начинается интересное... Программа запускается без ошибок, но график не строиться, а сама программа зависает (не отвечает). Приходится завершать только через диспетчер задач.

2. С нахождением определённого интеграла вроде все более менее понятно, хотя немного погодя тоже напишу.

Прошу вашей помощи!

Огромное спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 4)
abc
  опции профиля:
сообщение 8.3.2011, 20:46
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


if (j=0) нужно записывать if (j==0)
ты всё время ставишь этим выражением J в 0, и цикл вечно крутится
хотя компилятор вроде должен ловить такие ошибки, как if (j=0)

стоит написать так:
yyy1[0]=a*cos(b*n)+pow(n,d);
for (int j=1; j<=iter; j++)
{
xxx1[j]=xxx1[j-1]+c;
yyy1[j]=a*cos(b*xxx1[j])+pow(xxx1[j],d);
}

и к слову:
если у тебя такая логическая связка:
if(x==0) ...
if(x!=0) ...
то её следует оформлять так:
if(x==0) ...
else ...

Сообщение отредактировал abc - 8.3.2011, 20:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Serg_yl
  опции профиля:
сообщение 8.3.2011, 21:36
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 7.3.2011
Пользователь №: 2480

Спасибо сказали: 0 раз(а)




Репутация:   0  


abc - хоть как то заработало... Спасибо!

Теперь остается сделать проверку.

Еще один вопрос, а как можно сделать автоподгонку шкалы осей x и y?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 9.3.2011, 7:52
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Serg_yl @ 8.3.2011, 23:36) *
Еще один вопрос, а как можно сделать автоподгонку шкалы осей x и y?


рассчитать значения, выбрать максимумы, сделать припуски и отмасштабировать. Всего-то и делов ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Найтхевен_*
сообщение 14.4.2011, 23:03
Сообщение #5





Гости








    


"1.4 Строим наш график.

cosFunCurve = new QwtPlotCurve("Test");
cosFunCurve->setPen(QPen(Qt::blue));
cosFunCurve->setData(xxx1,yyy1,iter);
cosFunCurve->attach(funPlot);
funPlot->replot();"

скажите,пожалуйста какие библиотеки надо подключать чтобы это юзать
и как полученный график отобразить в виджет(какой виджет)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 12:35