![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.03.2010
Сообщений: 53
|
![]()
Вычислить с заданной точностью e=0.00001 экстремум функции y=x*x*x-6*x*x+9*x+4. На печать вывести таблицу значений аргумента х и функции у только при грубом значении шага изменения аргумента, а также вычисленное конечное значение экстремума и значение аргумента, при котором оно достигается. Грубое значение шага - 0.3, диапазон измерений аргумента (0.2;1.5). Я набросал но у меня считает не правильно:
#include <math.h> #include <iostream.h> int main() { double a=0.2,b=1.5,x0,xmax,ymax,y,x,h=0.3, e=0.00001; x0=a; for (x=0.2;x<=1.5;x+=h) { y=x*x*x-6*x*x+9*x+4; cout<<x<<" "<<y<<"\n"; } x=0.2; y=x*x*x-6*x*x+9*x+4; while (h>e) { y=x*x*x-6*x*x+9*x+4; if (y>ymax) { ymax=y; xmax=x; x+=h; h=h/2; } } cout<<"ymax="<<ymax<<" \n"<<"xmax="<<xmax; system("PAUSE"); return 0; } Помогите будь ласка, заранее благодарю))) |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 16.03.2010
Сообщений: 2
|
![]() ![]() #include <iostream> #include <math.h> using namespace std; int main() { double a=0.2, b=1.5, x0 = a, xmax, ymax = a*a*a-6*a*a+9*a+4, y, x, h=0.1, e=0.001; for (x=0.2;x<=1.5;x+=h){ y = x*x*x-6*x*x+9*x+4; cout << x << " " << y << "\n"; } x = 0.2; y = x*x*x-6*x*x+9*x+4; while(fabs(h-e)>0){ y=x*x*x-6*x*x+9*x+4; if(y>=ymax){ ymax=y; xmax=x; x+=h; // h=h/2; }else break; } cout<<"ymax="<<ymax<<" \n"<<"xmax="<<xmax; system("PAUSE"); return 0; } З.Ы. Что означает “Грубое значение шага” - не совсем понятно Последний раз редактировалось vitalant; 16.03.2010 в 20:45. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
![]()
Господа, объясните мне, пожалуйста, с каких пор и в каких "математичних школах" с эпсилон стали сравнивать сам шаг?! Всегда считал, что сравнивать нужно модуль разности результатов двух последовательных проходов, шаг на втором из которых меньше (например, действительно, в 2 раза) шага на первом.
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 16.03.2010
Сообщений: 53
|
![]()
Не, там нужно точность сравнивать с шагом иначе прога зацыклится. Грубое значение шага, это берешь сначала начальное значение а все последующие уменьшаеш на 2 : h=h/2; К стати работает, спасибо!!!!!
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 16.03.2010
Сообщений: 53
|
![]()
vitalant респект)))
|
![]() |
![]() |
![]() |
#6 | |
Новичок
Джуниор
Регистрация: 16.03.2010
Сообщений: 2
|
![]() Цитата:
![]() более правильно будет так: #include <iostream> #include <math.h> using namespace std; int main() { double a=0.2, b=1.5, x0 = a, xmax, ymax = a*a*a-6*a*a+9*a+4, y, x, h=0.1, e=0.001; for (x=0.2;x<=1.5;x+=h){ y = x*x*x-6*x*x+9*x+4; cout << x << " " << y << "\n"; } x = 0.2; y = x*x*x-6*x*x+9*x+4; while(fabs(y-ymax)>=0){ y=x*x*x-6*x*x+9*x+4; if(y>=ymax){ ymax=y; xmax=x; x+=h; // h=h/2; }else break; } cout<<"ymax="<<ymax<<" \n"<<"xmax="<<xmax; system("PAUSE"); return 0; } З.Ы. А вообще все разновидности того, что является условием выхода из подобных циклов в учебниках по численым методам можно найти |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
![]()
Ну а дробление h зачем закомментировано?!
![]() |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
![]()
Ну с чего ей зацыкливаться?..
Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чем отличается описание функции от определения функции в С++? | Go6a | Помощь студентам | 4 | 18.07.2009 18:07 |
функции | tigrenok | Общие вопросы C/C++ | 0 | 19.06.2009 19:52 |
Функции. Передача массива в качестве параметра функции. | Wia | Помощь студентам | 2 | 17.03.2009 14:57 |
Функции | xxxPascalxxx | Помощь студентам | 2 | 28.12.2007 18:04 |