crossplatform.ru

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


  Ответ в Алгоритм построения графика функции...
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Найтхевен Дата 14.4.2011, 23:03
  "1.4 Строим наш график.

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

скажите,пожалуйста какие библиотеки надо подключать чтобы это юзать
и как полученный график отобразить в виджет(какой виджет)
Алексей1153 Дата 9.3.2011, 7:52
 
Цитата(Serg_yl @ 8.3.2011, 23:36) *
Еще один вопрос, а как можно сделать автоподгонку шкалы осей x и y?


рассчитать значения, выбрать максимумы, сделать припуски и отмасштабировать. Всего-то и делов ;)
Serg_yl Дата 8.3.2011, 21:36
  abc - хоть как то заработало... Спасибо!

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

Еще один вопрос, а как можно сделать автоподгонку шкалы осей x и y?
abc Дата 8.3.2011, 20:46
  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 ...
Гость_Serg_yl_* Дата 8.3.2011, 19:44
  Вечер добрый! :-)

Стоит задача.
Разработать программу для вычисления определенного интеграла методом средних прямоугольников для функции типа: 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. С нахождением определённого интеграла вроде все более менее понятно, хотя немного погодя тоже напишу.

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

Огромное спасибо!
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 16:55