Как решить уравнение в visual studio
Описание класса имеет следующий синтаксис :
В теле класса могут быть объявлены:
- константы;
- поля;
- конструкторы и деструкторы;
- методы;
- события;
- делегаты;
- классы (структуры, интерфейсы, перечисления).
Поля класса синтаксически являются обычными переменными (объектами) языка. Их описание удовлетворяет обычным правилам объявления переменных. Поля характеризуют свойства объектов класса.
Методы класса синтаксически являются обычными процедурами и функциями языка. Методы содержат описания операций, доступных над объектами класса. Методы, называемые свойствами явлются специальной синтаксической конструкцией, предназначенной для обеспечения эффективной работы с классами.
Конструктор представляет собой специальный метод класса , позволяющий создавать объекты класса. Его имя должно совпадать с именем класса. Если разработчик не определяет конструктор класса , то к классу автоматически добавляется конструктор по умолчанию - конструктор без аргументов.
Порядок выполнения работы
Для практического изучения примеров в данной лабораторной работе необходимо наличие установленного пакета Microsoft Visual Studio (версии не ранее 2003). В зависимости от установленной версии возможны несущественные отличия в интерфейсе среды при создании и работе с проектом консольного приложения.
Первый шаг при разработке любого приложения - создание проекта. Для этого через разделы меню: File > New Gt Project запускается панель создания нового проекта следующего вида:
В данной программе объявление using System дает возможность ссылаться на классы, которые находятся в пространстве имен System , так что их можно использовать, не добавляя "System." перед именем типа.
Пространство имен System содержит много полезных классов. Одним из них является и класс Console , который используется при создании консольных приложений.
Класс проекта - Program размещен в пространстве имен, имеющем по умолчанию то же самое имя ( HelloWorldDemo ), что и решение, содержащее в данном примере единственный проект.
Популярное
Главное меню
Вот и я
Здесь был я
Авторизация
Оператор if мы будем рассматривать прямо в ходе реализации решения квадратного уравнения.
А чтобы реализовать данную задачу, нам надо подумать ход действий. Для начала вспомним, что такое квадратное уравнение:
Квадратное уравнение, это уравнение вида a*x^2 + b*x + c = 0, где a,b,c коэффициенты при иксах.(^2 - возведение в квадрат)
Чтоб найти корни квадратного уравнения, надо найти дискриминант. Обозначим его буквой d:
Так же как мы помним из школьной программы, если дискриминант меньше 0, то решений нет. Если равен 0, то имеется одно решение, если больше 0, то имеем 2 корня.
Корни находятся по формуле:
И так код нашей программы будет выглядеть так:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
class Program
static void Main(string[] args)
Console.WriteLine("Введите первый коэффициент");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите второй коэффициент");
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите третий коэффициент");
int c = Convert.ToInt32(Console.ReadLine());
double d;
d = b * b - 4 * a * c;
if (d < 0)
Console.WriteLine("Дискриминант отрицательный, корней нет");
>
if (d == 0)
double x1 = -b / (2 * a);
Console.WriteLine("Дискриминант = 0, x = ", x1);
>
if (d > 0)
double x1 = (-b + Math.Sqrt(Convert.ToDouble(d)))/(2*a);
double x2 = (-b - Math.Sqrt(Convert.ToDouble(d))) / (2 * a);
Console.WriteLine("Дискриминант = , x1 = , x2 =",d, x1,x2);
>
>
>
>
Я думаю тут всё ясно, как-раз таки кроме оператора if:
Так же существует оператор else(иначе) и else if, он выполняется, если условие в if не выполняется, то выполняется else. Программно это выглядит так:
if(условие)
код
>
else
код
>
else if(условие)
код
>
Ну вот и всё. Следующие несколько уроков мы будем работать над этой задачей, улучшать её программный код, так как он на данный момент не идеальный.
Выражение вида f(x)=0 называется уравнением. Число х называется корнем уравнения, если при его подстановке уравнение обращается в верное равенство. В статье рассмотрим методы решения уравнений - как точных, так и численных (приближенных).
Решение квадратных уравнений
Квадратным уравнением называется уравнение вида
Классическая формула для нахождения его корней (действительных и комплексных):
где выражение D = b 2 − 4ac называется дискриминантом уравнения, от его значения зависит количество и характер решений:
- Если D>0, то корней уравнения будет два и оба они будут действительными числами;
- Если D=0, то будет лишь один дейсвительный корень уравнения;
- Если D
Для нахождения действительных корней напишем метод SolveQuadraticEquation, входными параметрами которого будут значения при коэффициентах a, b и c, а на выходе – набор значений – решений уравнения:
Нужно заметить, что в данном случае возвращаться будет набор значений типа Complex.
Для тестирования написанных функций возьмем следующие три квадратных уравнения:
- 5x 2 +10x+200=0; данное уравнение не имеет действительных корней, но имеет пару сопряженных комплексных корней: x1 = -1-6,2449979983984i, x2 = -1+6,2449979983984i;
- x 2 -8x+16=0; данное уравнение имеет один двукратный корень x1=x2=4;
- x 2 -5x+6=0; данное уравнение имеет два различных корня x1=2, x2=3.
Напишем программу для решения этих уравнений:
На выходе получим:
5x^2 - 10x + 200 = 0
x0 = (-1, -6,2449979983984)
x1 = (-1, 6,2449979983984)
x^2 - 8x + 16 = 0
x0 = (4, 0)
x1 = (4, 0)
x^2 - 5x + 6 = 0
x0 = (3, 0)
x1 = (2, 0)
Воспользуемся WolframAlpha для проверки значений:
Решение кубических уравнений
Кубическим уравнением называется уравнение третьего порядка, которое имеет вид
Кубическое уравнение всегда имеет 3 корня, которые могут быть как вещественными, так и комплексными. Для решения кубических уравнений используется метод Виета-Кардано.
Формулы Кардано и Виета требуют применения специальных функций, и в том случае, когда требуется провести большую серию вычислений корней кубического уравнения с не слишком сильно меняющимися коэффициентами, более быстрым алгоритмом является использование метода Ньютона или других итерационных методов (с нахождением начального приближения по формулам Кардано-Виета), о которых мы поговорим дальше.
Рассмотрим в качестве примера следующие кубические уравнения:
- x^3 - 6x^2 + 11x - 6 = 0
- x^3 - 6x^2 + 11x + 6 = 0
Напишем программу для решения кубических уравнений с помощью метода Виета-Кардано:
Напишем программу для тестирования метода:
x^3 - 6x^2 + 11x - 6 = 0
x0 = (1, 0)
x1 = (3, 0)
x2 = (2, 0)
x^3 - 6x^2 + 11x + 6 = 0
x0 = (-0,434841368216901, 0)
x1 = (3,21742068410845, 1,85643189109788)
x2 = (3,21742068410845, -1,85643189109788)
Решим эти же уравнения с помощью WolframAlpha.
Решение биквадратных уравнений
Биквадратное уравнение - уравнение четвёртой степени вида
ax 4 + bx 2 + c = 0
где a,b,c — заданные комплексные числа и a != 0. Подстановкой y = x 2 сводится к квадратному уравнению относительно y. Такой переход от одной неизвестной величины к другой называется методом замены неизвестных.
Рассмотрим в качестве примера кубические уравнения:
- 5x^4 - 10x^2 + 200 = 0
- x^4 - 8x^2 + 16 = 0
- x^4 - 5x^2 + 6 = 0
Таким образом немного модифицируем первую функцию для решения биквадратных уравнений:
Напшем программу для тестирования метода:
На выходе получим такие результаты:
5x^4 - 10x^2 + 200 = 0
x0 = (1,63164875514566, -1,91370783040891)
x1 = (-1,63164875514566, 1,91370783040891)
x2 = (1,63164875514566, 1,91370783040891)
x3 = (-1,63164875514566, -1,91370783040891)
x^4 - 8x^2 + 16 = 0
x0 = (2, 0)
x1 = (-2, 0)
x2 = (2, 0)
x3 = (-2, 0)
x^4 - 5x^2 + 6 = 0
x0 = (1,73205080756888, 0)
x1 = (-1,73205080756888, 0)
x2 = (1,4142135623731, 0)
x3 = (-1,4142135623731, 0)
Зачастую в прикладных математических и компьютерных моделях возникает необходимость решать системы линейных алгебраических уравнений (СЛАУ). Как правило, на практике матрица в таких СЛАУ оказывается разреженной. Например, разреженные матрицы встречаются в моделях с конечно-разностными или конечно-элементными методами решения дифференциальных уравнений. Возникают сильно разреженные матрицы большой размерности при моделировании материальных и информационных потоков в крупных технологических сетях (системы газоснабжения и газораспределения, канализационные и теплоснабжающие системы, электросети и компьютерные сети и др.). Общим для технологических сетей является представление их моделей в виде графа, у которого матрица инциденций оказывается практически всегда сильно разреженной.
В статье будет рассказано о том, как ваш покорный слуга значительно повысил эффективность компьютерной модели расчета нестационарных течений газа в крупных системах газоснабжения произвольной конфигурации, благодаря применения библиотеки ManagedCuda и nVidia CUDA 7.0. Однако изложение будет вестись без привязки к конкретной предметной области.
Постановка задачи
Рассматривается классическая задача решения СЛАУ:
Ax=b
Здесь матрица A размером nxn, x — вектор неизвестных размером n, b — вектор известных свободных членов размером n.
Автор статьи занимается разработкой специализированного программно-вычислительного комплекса (ПВК) для моделирования и оптимизации нестационарных течений газа в системах газоснабжения. В решаемых мною задачах A является положительно определенным якобианом с диагональным преобладанием некоторой системы нелинейных уравнений. A получается в результате матричных преобразований матрицы инциденций графа системы газоснабжения и других матриц. В моих практических расчетах A обычно заполнена на 6-10%, остальное нули. Размер же ее зависит от размера конкретной системы газоснабжения и варьируется n от 10 до 1000.
Именно в этот момент я понял, что пора что-то менять.
- Реализована технология разреженные матриц и векторов;
- Имеются встроенные все необходимые вектор-матричные операции;
- Присутствуют встроенные решатели;
- Интуитивно понятный API.
Но тут мне вспомнился весьма удачный опыт коллег по аспирантуре, которые для решения задач подземной гидродинамики использовали графические процессоры. В распоряжении у меня имеется ноутбук с видеокартой nVidia GeeForce GT 540M с 2 GB памяти и поддержкой технологии CUDA. Было принято решение попробовать эту технологию на деле, о чем теперь не жалею.
Библиотека ManagedCuda
О технологии CUDA на этом сайте имеется большое количество материала, поэтому любопытный читатель без особого труда его найдет. Я же остановлюсь на том, как решал поставленную перед собой задачу.
Вычислительный эксперимент: анализ временных затрат на решению СЛАУ различными технологиями
Заключение
Следует ожидать в комментариях замечания, мол де не на всех машинах есть GPU nVidia с поддержкой CUDA. Действительно, это так. Поэтому наше приложение настроено на две конфигурации компиляции: с собственной библиотекой решения СЛАУ и с ManagedCuda.
Спасибо за прочтение статьи! Буду рад узнать о вашем мнении и замечаниях в комментариях.
В этой серии из четырех учебников вы создадите математический тест. Тест содержит четыре случайных арифметических примера, которые игрок должен решить в течение определенного времени.
В первом учебнике вы узнаете, как:
- создавать проект Visual Studio, который использует Windows Forms;
- добавлять метки, кнопки и другие элементы управления в форму;
- настраивать свойства для элементов управления;
- сохранять и запускать проект.
Предварительные требования
Для выполнения шагов, описанных в этом учебнике, вам понадобится Visual Studio. Перейдите на страницу загрузки Visual Studio, чтобы получить бесплатную версию.
Создание проекта Windows Forms
Первый шаг в создании математического теста — это создание проекта приложения Windows Forms.
Запустите Visual Studio.
В строке меню выберите Файл > Создать > Проект.
Дополнительные сведения см. в разделе Установка Visual Studio.
Запустите Visual Studio.
В окне запуска выберите Создание нового проекта.
В окне Создать проект выполните поиск по фразе Windows Forms. Затем в списке Тип проекта выберите Рабочий стол.
В Visual Studio Installer выберите Изменить. Вам может быть предложено сохранить результаты работы. Выберите Продолжить, чтобы установить рабочую нагрузку.
В окне Настроить новый проект назовите проект MathQuiz, а затем выберите Создать.
Запустите Visual Studio.
В окне запуска выберите Создание нового проекта.
В окне Создать проект выполните поиск по фразе Windows Forms. Затем в списке Тип проекта выберите Рабочий стол.
В Visual Studio Installer выберите Изменить. Вам может быть предложено сохранить результаты работы. Выберите Продолжить, чтобы установить рабочую нагрузку.
В окне Настроить новый проект назовите проект MathQuiz, а затем выберите Создать.
Visual Studio создает решение для приложения. Решение является контейнером для всех проектов и файлов, необходимых приложению.
Задание свойств формы
Когда вы выберете шаблон и зададите имя файла, Visual Studio откроет форму. В этом разделе показано, как изменить некоторые свойства формы.
Выберите форму Form1.
В окне Свойства теперь отображаются свойства формы. Это окно обычно находится в правом нижнем углу окна Visual Studio. Если окно Свойства не отображается, выберите Вид > Окно свойств.
В окне Свойства найдите свойство Text. В зависимости от того, как отсортирован список, может потребоваться прокрутить вниз. Введите значение Математический тест для значения Текст и нажмите клавишу ВВОД.
Форма теперь содержит текст "Математический тест" в заголовке окна.
Свойства можно отображать по категориям или по алфавиту. Для переключения между свойствами в окне Свойства используйте соответствующие кнопки.
Измените размер формы на 500 пикселей в ширину и 400 пикселей в высоту.
Можно изменить размер формы, перетаскивая ее края или маркер перетаскивания, пока в окне Свойства не отобразится верное значение Размер. Этот маркер представляет собой небольшой белый квадрат в правом нижнем углу формы. Для изменения размера формы также можно использовать свойство Size.
Измените значение свойства FormBorderStyle на Fixed3D, а свойству MaximizeBox установите значение False.
Эти значения не позволят игрокам изменять размеры формы.
Создание поля "Оставшееся время"
Математический тест содержит поле в правом верхнем углу. В этом поле отображается, сколько секунд осталось. В этом разделе показано, как использовать метку для этого поля. Вы добавите код для таймера обратного отсчета в следующем учебнике этой серии.
В левой части интегрированной среды разработки Visual Studio выберите вкладку Панель элементов. Если вы ее не видите, выберите пункт Представление > Панель элементов в строке меню или воспользуйтесь комбинацией клавиш CTRL+ALT+X.
Выберите элемент управления Label в окне Панель элементов, а затем перетащите его на форму.
В поле Свойства задайте следующие свойства метки:
- Задайте для параметра (Name) значение timeLabel.
- Измените значение свойства AutoSize на False, чтобы можно было изменить размер поля.
- Измените значение свойства BorderStyle на FixedSingle для отрисовки линии вокруг поля.
- Задайте для свойства Size значение 200, 30.
- Выберите свойство Text, а затем щелкните клавишу BACKSPACE, чтобы очистить значение Text.
- Щелкните знак плюса ( + ) рядом со свойством Font, а затем установите для свойства Size значение 15,75.
Переместите метку в правый верхний угол формы. Используйте синие направляющие линии для размещения элемента управления в форме.
Добавьте еще один элемент управления Label из панели элементов и установите для его размера шрифта значение 15,75.
Задайте свойству Text значение Оставшееся время.
Переместите метку так, чтобы она находилась левее метки timeLabel.
Добавление элементов управления для примера на сложение
Первая часть теста — пример на сложение. В этом разделе показано, как использовать метки для отображения этого примера.
Добавьте элемент управления Label из области элементов в форму.
В поле Свойства задайте следующие свойства метки:
- Задайте для свойства Text значение ? (вопросительный знак).
- Задайте для параметра AutoSize значение False.
- Задайте для свойства Size значение 60, 50.
- Установите размер шрифта равным 18.
- Установите для свойства TextAlign значение MiddleCenter.
- Установите для свойства Location значение 50, 75, чтобы поместить элемент управления в нужное место в форме.
- Установите для свойства (Name) значение plusLeftLabel.
В форме выберите созданную метку plusLeftLabel. Скопируйте метку, выбрав пункт Изменить > Копировать или CTRL+C.
Вставьте метку в форму три раза, выбрав пункт Изменить > Вставить или CTRL+V три раза.
Разместите три новые метки так, чтобы они располагались в ряд справа от метки plusLeftLabel.
Установите для свойства Text второй метки значение + (знак плюса).
Установите для свойства (Name) третьей метки значение plusRightLabel.
Установите для свойства Text четвертой метки значение = (знак равенства).
Добавьте элемент управления NumericUpDown из области элементов в форму. Подробнее этот вид элементов управления мы рассмотрим позже.
В поле Свойства задайте следующие свойства метки NumericUpDown:
- Установите размер шрифта равным 18.
- Установите ширину 100.
- Задайте для параметра (Name) значение sum.
Выровняйте элемент управления NumericUpDown по элементам управления Label для задачи на сложение.
Добавление элементов управления для примеров на вычитание, умножение и деление
Затем добавьте метки в форму для оставшихся арифметических примеров.
Скопируйте четыре элемента управления Label и элемент управления NumericUpDown, который был создан для примеров на сложение. Вставьте их в форму.
Переместите новые элементы управления на следующую строку под элементами управления для сложения.
В поле Свойства задайте следующие свойства для новых элементов управления:
- Задайте для свойства (Name) первой метки со знаком вопроса значение minusLeftLabel.
- Установите для свойства Text второй метки значение - (знак минуса).
- Задайте для свойства (Name) второй метки со знаком вопроса значение minusRightLabel.
- Задайте для свойства (Name) элемента управления the NumericUpDown значение difference.
Скопируйте элементы управления для сложения и вставьте их в форму еще два раза.
Для третьей строки:
- Задайте для свойства (Name) первой метки со знаком вопроса значение timesLeftLabel.
- Установите для свойства Text второй метки значение × (знак умножения). Вы можете скопировать знак умножения из этого учебника и вставить его в форму.
- Задайте для свойства (Name) второй метки со знаком вопроса значение timesRightLabel.
- Задайте для свойства (Name) элемента управления NumericUpDown значение product.
Для четвертой строки:
- Задайте для свойства (Name) первой метки со знаком вопроса значение dividedLeftLabel.
- Установите для свойства Text второй метки значение ÷ (знак деления). Вы можете скопировать знак деления из этого учебника и вставить его в форму.
- Задайте для свойства (Name) второй метки со знаком вопроса значение dividedRightLabel.
- Задайте для свойства (Name) элемента управления NumericUpDown значение quotient.
Добавление кнопки запуска и задание порядка перехода по клавише TAB
В этом разделе показано, как добавить кнопку запуска. Также необходимо указать последовательность перехода для элементов управления. Этот порядок определяет, как в тесте осуществляется переход от одного элемента управления к другому с помощью клавиши TAB.
Добавьте элемент управления Button из области элементов в форму.
В поле Свойства задайте следующие свойства для элемента управления Button:
- Задайте для свойства (Name) значение startButton.
- Задайте свойству Text значение Начать тест.
- Установите размер шрифта равным 14.
- Установите для свойства AutoSize значение True, которое вызывает автоматическое изменение размера кнопки в зависимости от размера текста.
- Установите для TabIndex значение 0. При этом значении кнопка запуска первой появляется в фокусе.
Разместите кнопку по центру в нижней части формы.
В поле Свойства задайте свойство TabIndex для каждого элемента управления NumericUpDown:
- Установите для свойства TabIndex элемента управления NumericUpDown sum значение 1.
- Установите для свойства TabIndex элемента управления NumericUpDown difference значение 2.
- Установите для свойства TabIndex элемента управления NumericUpDown product значение 3.
- Установите для свойства TabIndex элемента управления NumericUpDown quotient значение 4.
Запустите приложение.
Арифметические примеры пока не работают в тесте. Но вы по-прежнему можете запустить приложение, чтобы проверить, работает ли значение TabIndex должным образом.
Для сохранения приложения используйте один из указанных ниже методов:
- Нажмите клавиши CTRL+SHIFT+S.
- В строке меню выберите Файл >Сохранить все.
- На панели инструментов нажмите кнопку Сохранить все.
Для запуска приложения используйте один из следующих методов:
- Нажмите клавишу F5.
- В строке меню выберите Отладка >Начать отладку.
- На панели инструментов нажмите кнопку Запустить.
Дважды щелкните клавишу TAB, чтобы увидеть, как фокус перемещается от одного элемента управления к другому.
Дальнейшие действия
Перейдите к следующему учебнику, чтобы добавить случайные арифметические примеры и обработчик событий в математический тест.
Читайте также: