Математические уравнения на языке с

Стандартные математические функции в языке Си

Пожалуйста, приостановите работу AdBlock на этом сайте.

Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.

Для использования математических функций нужно подключить заголовочный файл math.h . В ней определено много различных функций, но мы пока рассмотрим следующие:

Некоторые математические функции

fabs(x) модуль числа x
sqrt(x) квадратный корень из числа x
sin(x) синус числа x (х в радианах)
cos(x) косинус числа x (х в радианах)
pow(x, y) вычисление x y
exp(x) вычисление e x
log(x) натуральный логарифм числа x
log10(x) десятичный логарифм числа x

Два важных момента.

  • Все функции возвращают значение типа double .
  • Параметры функций – вещественные числа( double ), но можно передавать и целые числа. При этом произойдёт неявное преобразование типа . Компилятор из целого числа, например 3, сделает вещественное 3.0.

Примеры.
Даны длины катетов прямоугольного треугольника. Вычислить длину гипотенузы. Простая задачка на знание теоремы Пифагора.

Вычислить синус угла ввёденного с клавиатуры. Угол вводится в градусах.

В этой программе есть о чём поговорить. Тригонометрические функции, которые определены в math.h работают с радианной мерой угла. Людям же привычнее работать с градусами. Поэтому в данной программе мы предварительно перевели значение из градусов в радианы. Если этого не сделать, результат получится неправильным. Проверьте это самостоятельно.

Неявное преобразование типов

При явном преобразовании типа мы в скобках перед значением указывали тип, к которому нужно привести данное значение. В неявном преобразовании этого делать не нужно. Компилятор автоматически подберёт необходимый тип.

Неявное преобразование типов осуществляется в следующих случаях:

  1. перед передачей аргументов в функцию (как в нашем примере с корнем. Листинг 1.)
  2. выполнение арифметических операций с разными типами аргументов
  3. перед выполнением присваивания

Правила неявного преобразования типов

  • если выполняются арифметические операции с разными типами аргументов. Оба аргумента приводятся к большему типу.
    Порядок типов: int float double
  • при присваивании. Значение справа от оператора присваивания приводится к типу переменной слева от оператора присваивания. При этом, если больший тип присваивается меньшему, то может произойти потеря точности.

int+float будет автоматически преобразовано к float+float
float/int будет автоматически преобразовано к float/float
double*float будет преобразовано к double*double
int = double double будет преобразовано к int с потерей дробной части
float = int int будет преобразовано к float

Практика

Решите предложенные задачи:

Для удобства работы сразу переходите в полноэкранный режим

Математика и математические операции в C++

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

Над любыми данными можно совершать определённые операции. Над числами и цифрами можно производить различные математические действия и преобразования: сложить, отнять, поделить, перемножить. Вот вроде всего четыре основные и всем известные операции, но сколько можно из них организовать комбинаций… бесчисленное множество! Операции nok и nod, нахождение факториала, вычисление и многие другие вариации.

Язык C++ является очень мощным (если не мощнейшим) языком программирования и имеет ряд своих индивидуальных особенностей, в том числе и при работе с числами.

Рассмотрим несколько примеров: сложение и вычитание целых и дробных чисел, а также деление и умножение с двумя типами.

Программирование в уравнениях

В обычном, как императивном, так и функциональном программировании вся программа по большому счету сводится к огромному числу равенств x = . , где слева стоит переменная, а справа — выражение, зависящее от переменных. А языки программирования предоставляют синтаксический сахар, что бы записать это множество как можно более компактно. Это уже почти уравнения, только тривиальные.

Некоторые сложности обнаруживаются в ленивых языках:

Здесь fib присутствует и в левой и в правой части, то есть мы получаем полноценное уравнение, решением которого будет бесконечная последовательность чисел Фибоначчи. Так как на бесконечных последовательностях естественным образом определяется топология, Haskell может решить это уравнение методом проcтых итераций (через оператор неподвижной точки).

Еще дальше по пути уравнений пошел Prolog. Каждый предикат определяет уравнение на множествах, хоть и записывается без знака равенства. Решаются такие уравнения почти перебором и возможность использовать в них арифметику сильно ограничена.

Но есть язык, в котором уравнения являются важнейшей частью — это Modelica.

Здесь отрезок определяется как координаты концов и длинна, при этом длина и координаты связаны очевидным уравнением.

(К сожалению, source такого языка не знает, а вставить раскрашенный pygment-ом html не получается.)

Естественно, уравнения могут быть объединены в систему:

Здесь описывается манипулятор, состоящий из четырех соединенных шарнирами реек управляемый двумя сервоприводами.

Как следует из названия, Modelica предназначена для моделирования сложных, гетерогенных систем. Ее реализации есть у знаменитого Вольфрама, производителя САПР (не путать и «чертежными программами») CATIA. Есть также и свободные реализации, такие как OpenModelica.

Так как моделируемые объекты редко описываются алгебраическими уравнениями, Modelica умеет решать и обыкновенные дифференциальные уравнения. К сожалению, уравнения в частных производных она пока не осилила, но обычно можно разбить систему на конечные элементы и породить обыкновенные дифуры в цикле.

В качестве примера приведу модель очень сложной гибридной электромеханической системы — Гауссгана:

Здесь x — координата снаряда, v — напряжение, i — ток. Для отладки вычисляется полная энергия pe — ее график будет горизонтальной прямой.

Кроме текстового представления программы, в Modelica стандартизовано и графическое (хотя лично я предпочитаю работать с текстом). Для повторного использования кода применяется знакомое многим по ООП наследование. Есть обширные библиотеки по электротехнике, теплотехнике, механике и, даже, биохимии.

Разработчики «Моделик» не расчитывают охватить все одной системой — большинство реализаций допускает комоделирование с помощью Functional Mock-up Interface. При желании этот же интерфейс можно задействовать для взаимодействия с внешним миром, но это пока открытая область.


источники:

http://nikulux.ru/c-uroki/matematika-c_plus_plus/

http://habr.com/ru/post/202596/