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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Условная оптимизация 
V
    Опции темы
mfuntik
Дата 21.2.2012, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Необходима помощь!
Есть задача:
Спроектировать призматическую емкость без крышки, дно которого имеет форму равностороннего треугольника и объемом 1 куб.м. так, чтобы на ее изготовление было израсходовано как меньше листового материала.

Решила эту задачу методом Лагранжа в Маткаде.
Не могу написать её на С++.
Заранее спасибо за ответ.
PM MAIL   Вверх
Фантом
Дата 21.2.2012, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



А что тут можно вообще в чем-то писать?

Пусть сторона основания равна x, высота призмы - h. Прощадь основания равна S=sqrt(3)/4*x^2, общая площадь поверхности S+3*x*h, объем S*h=1 (все для простоты считаем в метрах).
Отсюда общая площадь S+3*x/S. Дифференцируем ее по x и приравниваем производную к нулю (это минимум, поскольку при x->0 и x->infty результат очевидно уходит на +infty).  Итого получаем уравнение x^3=8. Итого x=2 метра, h=1/sqrt(3), т.е. примерно 0.58 метра. Все. Места для применения C++, извините, в упор не видно.
PM   Вверх
mfuntik
Дата 21.2.2012, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да я сама прекрасно понимаю, что программно решать её нет никакого смысла! Но таково задание, к сожалению((

Достаточно найти уравнение площади поверхности, от неё 2 производных (по x и y) и одно ограничение по объему...
Но... нужно на с++(((
PM MAIL   Вверх
Фантом
Дата 21.2.2012, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(mfuntik @  21.2.2012,  18:23 Найти цитируемый пост)
Да я сама прекрасно понимаю, что программно решать её нет никакого смысла! Но таково задание, к сожалению((

Так что именно надо делать-то? Можно тупо насчитать сетку значений площади поверхности и объема для всевозможных вариантов стороны основания и высоты, и найти минимум площади при равном единице объеме. Можно сделать более разумную задачу, выразив площадь через одну переменную, после чего численно найти минимум (опять-таки - как? перебором? градиентным спуском? еще как-то?). Можно аналитически найти производную, приравнять к нулю и численно решить уравнение (совсем смешно, но тоже можно, причем тоже разными методами).

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

Ну вот Вам, например, наиболее тупой вариант - полный перебор по двупараметрической сетке.  smile 
Код

#include<iostream>
#include<cmath>

using namespace std;

const double x1=0.01, x2=10.0, dx=0.01;    // граница снизу и сверху, шаг по x
const double h1=0.01, h2=10.0, dh=0.01;    // оно же по h
const double eps=0.001;                    // точность сравнения
const double c=sqrt(3.0)/4.0;                // коэффициент

double x,h;    // переменные сетки
double S,Sall,V;    // значения площади основания, общей и объема                                                    

double Smin,xmin,hmin; // найденный минимум


int main()
{
    Smin=1.0E+12; // что-нибудь побольше
    for(x=x1;x<x2;x+=dx) for(h=h1;h<h2;h+=dh)
    {
        S=c*x*x;
        if(fabs(S*h-1.0)<eps)
        {
            Sall=S+3.0*x*h;
            if(Sall<Smin)
            {
                Smin=Sall;
                xmin=x;
                hmin=h;
            }
        }
    }
    cout << "Минимум " << Smin << " при x=" << xmin << ", h=" << hmin << endl;
        return 0;
}

PM   Вверх
mfuntik
Дата 21.2.2012, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вы знаете, в этом и вся тупость, что задача математически на листке решается за 5 минут. Но требуют нарисовать ответ на С++ - приходится исполнять.

Огромное спасибо вам за вариант решения! По мне, так для этой задачи этого вполне достаточно!

Ещё раз большое спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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