magava Posted October 31, 2008 Report Share Posted October 31, 2008 Нужна программа на с++ выясняющая является ли вводимая функция выпуклой или нет. Link to comment Share on other sites More sharing options...
Тролль Posted October 31, 2008 Report Share Posted October 31, 2008 magava: #include <iostream.h>int main(){float f1,f2,f3; bool b;cout<<"Enter values and any letter at the end"<<endl; cin>>f1; cin>>f2; while(cin>>f3){if(b=f3-2*f2+f1<0)break; f1=f2; f2=f3;}cout<<(b?"unconvex":"convex")<<endl; system("PAUSE"); return 0;} Вводим значения функции, заканчиваеи вводом любой буквы вместо числа; если значения разделялись Enter, то результат будет выдан сразу, как только станет ясным вид функции, если пробелами - после ввода всех данных. Link to comment Share on other sites More sharing options...
magava Posted November 11, 2008 Author Report Share Posted November 11, 2008 magava:Что делает следующая строка while(cin>>f3){if(b=f3-2*f2+f1<0)break; f1=f2; f2=f3;} Будет ли программа верно работать если ввести такие выражения a^x sin(x) x^2+3*x Спасибо. Link to comment Share on other sites More sharing options...
Тролль Posted November 11, 2008 Report Share Posted November 11, 2008 (edited) Что делает следующая строка while(cin>>f3){if(b=f3-2*f2+f1<0)break; f1=f2; f2=f3;} Ввводит очередное значение функции, вычисляет с его помощью вторую производную в очередной внутренней точке функции и сравнивает ее с нулем. Функция, для которой проверяется ее выпуклость, считается заданной в табличном виде или приведенной к нему и вводится в виде последовательности значений этой фунции при равноотстоящих значениях аргумента в диапазоне проверки выпуклости. То есть вводятся числа, а не алгебраическая запись функции. Например, для функции x²+x-2 на интервале 0..4 вводятся значения -2, 0, 4, 10, 18. Ввод значений заканчивается буквой e или любой другой. Приведенное тобой определение выпуклости функции тоже могло быть использовано вместо нахождения второй производной - по сути это запись вычисления площади треугольника, его смысл в проверке того, что треугольник, образованный тремя точками, лежащими на графике выпуклой функции, всегда находится выше этого графика или совпадает с ним, оно вычисляется несколько сложнее, чем вторая производная. Если же ты имеешь в виду анализ поведения функции, введенной в виде ее алгебраической записи, то на C++ для этого потребуется разработка системы символьных математических вычислений класса Mathcad ;), чтобы осуществить нахождение выражения для второй производной в аналитическом (символьном) виде и поиск ее глобальных экстремумов. P.S. Заменил пример, на прежнем (было -x²+x-2) сразу выдавалось, что функция невыпукла, так неинтересно. Вводимых значений, кстати, должно быть не меньше трех, иначе невыпуклость не заметить. Edited November 11, 2008 by Тролль Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now