Imagesforyou.ru

IMG FOR YOU — ИНТЕРЬЕРНАЯ ФОТОСТУДИЯ
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как извлечь корень из комплексного числа

Корнем со степенью n, извлеченным из комплексного числа z называют то число w, у которого n-ая степень равна z и обозначается как (sqrt[n]z.)

Не существует однозначного извлечения корня из комплексного числа, так как он имеет то количество значений, которое равно его степени.

Осторожно! Если преподаватель обнаружит плагиат в работе, не избежать крупных проблем (вплоть до отчисления). Если нет возможности написать самому, закажите тут.

Тригонометрическая форма

Если число z представлено в тригонометрической форме (z=left|zright|cdotleft(cosleft(фright)+isinleft(фright)right)) , то значения корня n-ой степени находятся по формуле:

Где |z| — модуль комплексного числа, ф — аргумент, k — параметр, значения у которого 0,1,2…n-1.

Правильный n-угольник

Если посмотреть на извлечение корня n-ой степени с точки зрения геометрии, центр окружности с радиусом (sqrt[n]z) расположен в точке О (0; 0), а все полученные значения, расположенные на ней, образуют правильный n-угольник (как это представлено на чертеже выше).

Алгебраическая форма

Если из данного числа z нужно извлечь корень n-ой степени, а он представлен в алгебраической или показательной форме, необходимо выполнить извлечение по пунктам:

  1. Представить число в тригонометрической форме: вычислить модуль (left|zright|) и аргумент (ф).
  2. Полученные значения применить в тригонометрической форме: (z=left|zright|cdotleft(cosleft(фright)+isinleft(фright)right).)
  3. Извлечь корни по формуле, приведенной выше.

Внесение под корень буквы

Чтобы внести букву под знак корня, поступаем так же, как и с числами (в т.ч. с отрицательными) – возводим эту букву в соответствующую степень, после чего добавляем в подкоренное выражение.

Пример 6

Пример внесения буквы под корень

Это справедливо при , если же p – отрицательное число, то перед знаком корня необходимо добавить знак “минус”.

Пример 7
Рассмотрим более сложный случай: .

1. Сперва внесем выражение в скобках под знак корня.

Пример внесения выражения под квадратный корень

2. Теперь согласно формуле сокращенного умножения возведем выражение в квадрат.

Взятие квадратного корня иррационального числа

Когда дело доходит до вычисления квадратного корня иррационального числа, у вас есть два варианта. Либо вставьте иррациональное число в калькулятор, либо в онлайн-калькулятор с квадратными корнями (см. Ресурсы), и в этом случае калькулятор выдаст вам приблизительное значение — или вы можете использовать четырехэтапный процесс, чтобы оценить его самостоятельно.

Пример 1: Оцените значение иррационального числа √8.

Извлечение кубического корня вручную

Этот способ потребуется, когда калькулятора под рукой нет или воспользоваться им нельзя. Тогда для того чтобы вычислить кубический корень из числа, потребуется приложить усилия.

Читайте так же:
Гугл почта войти на свою почту вход

Сначала посмотреть, а не получается ли полный куб от какого-нибудь целого значения. Может быть под корнем стоит 2, 3, 5 или 10 в третьей степени?

кубический корень из числа

В противном случае нужно будет считать столбиком. Алгоритм не самый простой. Но если немного попрактиковаться, то действия легко запомнятся. И вычислить кубический корень больше не будет проблемой.

  1. Мысленно разделить подкоренное выражение на группы по три цифры от десятичной запятой. Чаще всего нужна дробная часть. Если ее нет, то нули нужно дописать.
  2. Определить число, куб которого меньше целой части подкоренного выражения. Его записать в промежуточный ответ над знаком корня. А под этой группой расположить его куб.
  3. Выполнить вычитание.
  4. К остатку приписать первую группу цифр после запятой.
  5. В черновике записать выражение: а 2 * 300 * х + а * 30 * х 2 + х 3 . Здесь «а» — это промежуточный ответ, «х» является числом, которое меньше получившегося остатка с приписанными к нему числами.
  6. Число «х» нужно записать после запятой промежуточного ответа. А значение всего этого выражения записать под сравниваемым остатком.
  7. Если точности достаточно, то расчеты прекратить. В противном случае нужно возвращаться к пункту под номером 3.

При программировании микроконтроллеров разработчики иногда сталкиваются с проблемой вычисления квадратного корня. Например, данная операция требуется при выполнении быстрого преобразования Фурье или вычислении среднеквадратического значения сигнала.
В стандартной библиотеке Си – math.h, есть функция для вычисления квадратного корня sqrt(), которой при желании можно воспользоваться. Она работает с числами типа float, обеспечивает высокую точность результата, но требует для своей работы длительного времени. Для микроконтроллера AVR это порядка 3000 циклов тактовой частоты (проверено в компиляторе IAR на разных уровнях оптимизации).
Если к точности вычисления корня не предъявляются высокие требования, можно воспользоваться упрощенным алгоритмом, занимающим меньше места в памяти и выполняющим вычисления в несколько раз быстрее.

Алгоритм выглядит так.

Как мне подсказали умные люди, алгоритм основан на итерационной формуле Герона.

где А – фиксированное положительное число, а X1 – любое положительное число.
Итерационная формула задаёт убывающую (начиная со 2-го элемента) последовательность, которая при любом выборе X1 быстро сходится к квадратному корню из числа А.

Читайте так же:
Можно ли заварить головку блока цилиндров

Ради интереса я переписал алгоритм в явном виде. Скомпилированный, он ничуть не потерял ни в быстродействии, ни в объеме. Объем даже на пару байтов уменьшился.

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

Код занимает прядка 70 байт и выполняется

за 700 циклов. Данные получены в компиляторе IAR AVR при medium оптимизация по скорости.

Точность вычисления данного алгоритма можно оценить по приведенному ниже графику. Синий график построен по значениям, полученным c помощью библиотечной функции sqrt(), красный график по значениям функции root().

Сравнение двух функций извлечения квадратного корня

В ходе обсуждения моей заметки, те же самые умные люди подсказали еще один алгоритм вычисления квадратного корня.

50 байт, <200 циклов для IAR AVR с medium оптимизацией по скорости. Точность не оценивал.

Related items

  • Планировщик для микроконтроллера
  • Медианный фильтр
  • AVR4027: Трюки и советы по оптимизации Си кода для 8-и разрядных AVR микроконтроллеров. Ч.2
  • AVR4027: Трюки и советы по оптимизации Си кода для 8-и разрядных AVR микроконтроллеров. Ч.1
  • Что размещать в заголовочном файле .h?

Comments

подскажите пожалуйста как проделать это с переменной типа long?

80 байтов), — скорость выполнения (

1000 циклов для AVR).

Напишу как делаеться в AVR Studio. Пишеться код — компилим,смотри м сколько занял,добавляем функцию — и смотрим новий размер кода. Разница между новым и старым значение есть размер функции.

Для скорости выполнения. ставим брейкпойнт перед вызовом функции и после,запускаем симуляцию — обнуляем cycle counter,запуска ем симуляцию — и новое значение будеть скоростью выполнения (также можно увидеть сколько время исполняеться функция в мкс или мс).

Для IAR`a . Нужно включить опцию создания листинга программы. Project > Options > C/C++ Compiler > List галочка Output list file. Если включить еще и Assembler mnemonics в lst файле будет ассемблерный код, сгенерированный компилятором из твоей программы. Эта информация полезна для оптимизации сишного кода, конечно, если ты знаешь ассемблер.
Затем запускаешь компиляцию проекта и с левой стороны (в окне отображения структуры проекта) ищешь файлы с расширением *.lst Они будут созданы для каждого программного модуля. В конце этого файла есть табличка со списком функций и значениями занимаемой памяти.

Читайте так же:
Можно ли есть сникерс

Чтобы прикинуть скорость выполнения какого-нибудь куска кода (обычно функции), я прогоняю этот код в программном симуляторе IAR`a. Включаю опцию Project > Options > Linker > Debug Information . Запускаю компиляцию и отладку с помощью кнопки Debug (Ctrl+D). Устанавливаю брейкпоинты, открываю окно с регистрами микроконтроллер а (меню View > Register) и запускаю код на выполнение по шагам (F11) или непрерывно (f5). В окне регистров в разделе CPU Register есть строка CYCLES. Она отображает число прошедших тактов. По показаниям этого числа можно прикинуть сколько тактов занимает выполнение функции.

То же самое можно делать и в AVR Studio. Там это даже лучше получается, потому что студия моделирует прерывания, а IAR нет.

F = 8 MHz, ATmega8, optimization O0 (none):

размер 14 байт.
скорость 540 циклов — 67.5uS

F = 8 MHz, ATmega8, optimization Os (none):

размер 14 байт.
скорость 2 циклf — 0.25uS

Код которий тестировал:

unsigned int value = 0;

unsigned int isqrt(unsigned int x)
<
unsigned int m, y, b;
m = 0x4000;
y = 0;
while (m != 0)
<
b = y | m;
y = y >> 1;

int main(void)
<
asm(«nop»);
value = isqrt(4096);
asm(«nop»);

Пользовался детским алгоритмом, на мой взгляд достаточно быстр и достаточно компактный. Идея в том что от числа последовательно отнимаются все нечётные числа, и сколько вычитаний удалось сделать, таков и корень числа. Пример, число 49;
1) 49 — 1 = 48
2) 48 — 3 = 45
3) 45 — 5 = 40
4) 40 — 7 = 33
5) 33 — 9 = 24
6) 24 — 11 = 13
7) 13 — 13 = 0

7 циклов, корень числа 49 — 7.

И кстати при работе с МК типа AVR-ки лучше избегать делений, т.к. у AVR ядра нет аппаратного деления, а программное занимает дофига тактов. Другое дело ARM Cortex-M3 и выше, у которых деление выполняется за 2. 12 тактов.

У функции корня есть некоторые свойства симметрии, которые позволяют вычислять ее только на некотором отрезке, а потом решение распространить на всю ось. Например,
sqrt(a*2^16)=2^ 8*sqrt(a).

Удобно в качестве такого отрезка взять значения [2^30-2^31), потому что остальные значения можно свести к нему побитовым сдвигом и при этом не будет происходить потеря точности. Сначала вычисляем первый значащий бит (программно половинным делением или процессорной инструкцией, например на ARM это __clz). Потом сдвигаем входное число на это кличество бит и вычисляем корень, полученное значение сдвигаем обратно на в два раза меньшее количество).
Для вычисления корня на отрезке интерполируем его многочленом Лагранжа (параболой). Например, возьмем в качестве точек многочлена 2^30, 1,5 * 2^30, 2^31. Можно воспользоваться сторонним сервисом, и не возиться с вычислением коэффициентов. У меня получилась такая формула:
-x^2/499100218444523 + x/52370 + 14575
Очевидно, напрямую её использовать нельзя, потому что значения не влазят даже в диапазон целых. Но надо учесть, что нам важны только 16 бит результата, поэтому можно немного схитрить и вынести что-то за скобки.
(-x/9530269590 + 1) * x/52370 + 14575
(-x/145420 + 65536) * (x/65536) / 52370 + 14575
Ну и последнее — заменить деление на умножение. Допустим, у нас в резерве 30 бит числа. Мы хотим поделить некое число x, например, на 543. Вычисляем, в числе 543 есть 10 бит, в х 16 бит.
x / 543 * 2^26 / 2^26
x * (2^26 / 543) / 2^26
x * 123589 / 2^26
Теперь эти знания применяем к своему многочлену.
(-x/2^14 * 7384 / 2^16 + 2^16) * (x/2^16) / 2^16 * 20503 / 2^14 + 14575
Не ручаюсь за правильность коэффициентов, надо внимательно проверить.
Когда писал, не учел одну штуку, число бит может быть нечетным, отрезок надо брать больше.

Читайте так же:
Можно ли отправить письмо без обратного адреса

Естественно, алгоритм будет быстро работать при наличии аппаратного умножения.

Можно ли извлечь корень из отрицательного числа

Содержание: Алгоритм решения задач по алгебре на тему «Как извлечь квадратный корень». Теоретический материал по теме «Арифметический квадратный корень».

Арифметический квадратный корень
(теория)

Определение 1. Квадратным корнем из числа а называется число b, квадрат которого равен а.

Например, √16 = ±4, где -4 и 4 — корни из числа 16, так как (-4) 2 = 16 и 4 2 = 16, числа -4 и 4 являются корнями уравнения x 2 = 16, число +4 называется арифметическим корнем квадратного уравнения.

Определение 2. Арифметическим квадратным корнем из числа а называется неотрицательное число b, квадрат которого равен а.

Действие извлечения квадратного корня — обратное действию возведения в степень, когда по данной степени (числу) и показателю (n = 2) находят основание степени. — действие извлечения квадратного корня (показатель корня — «2» — опускают и пишут просто √а, а читают — квадратный корень из числа а):

Запомните! Неизвестное основание степени находят действием извлечения корня из степени.

Замечание. Аналогично находят корни n-й степени. Например:

Знак корня иначе называют радикалом.

ПРИМЕР. Найдите сторону квадрата а, если площадь квадрата равна 16 м 2 .

АЛГОРИТМ
«Как извлечь квадратный корень»

  1. Если под корнем стоит одно число, то подберите такое неотрицательное число, которое в квадрате даст подкоренное выражение (по «Таблице квадратов чисел и корней из чисел», см. ниже). Например:

Пусть √16 = 5, тогда 5 2 = 16 — это неверно; значит, 5 не является √16.

  1. Если под корнем стоит произведение или сумма чисел, то выполните действия под знаком корня, а затем извлекайте корень. Например:

  1. Если перед корнем стоит множитель, то найденный корень (число) умножьте на этот множитель. Например:
Читайте так же:
Как вернуть жесткий диск по гарантии

Таблица квадратов чисел и корней из чисел

В пересечении строки и столбца — квадрат чисел, а наоборот — корень из числа, например, √576 = 24 сначала находим десятки, потом единицы.

Вы смотрели алгоритм решения задач по алгебре на тему «Как извлечь квадратный корень».

Если дискриминант отрицателен

В этом случае корень из дискриминанта извлечь нельзя (т.к. квадратный корень из отрицательного числа – невычислим), а значит и корни квадратного уравнения мы вычислить не можем.

Пример: Найдите корни уравнения (x^2+x+3=0)
Решение

Вычисляем дискриминант по формуле (D=b^2-4ac)

Находим корни уравнения

Оба корня содержат невычислимое выражение (sqrt<-11>), значит, и сами не вычислимы

То есть, отсутствие корней у квадратного уравнения с отрицательным дискриминантом – не чья-то случайная придумка. Это не потому что «в учебнике так написано», а действительно правда: невозможно найти такое число, чтоб при подстановке его вместо икса в выражение (x^2+x+3) получился ноль.

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

Ну, а на графиках все просто: нет корней – нет точек пересечения с осью икс!

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector