Как сделать экспоненту в матлабе
Создание символьного выражения в Matlab
Иногда символьные выражения крайне необходимы, именно поэтому важно уметь их объявлять в Matlab. Обычно используют два способа. Первый — использование оператора syms.
Таким простым способом мы создали две символьные переменные. Пока они ничего не делают и не представляют какой либо ценности, но чуть позже мы увидим, что они могут быть полезны.
Второй способ — использование команды sym.
При ее использовании, можно сразу задать функцию, полином или выражение:
Символьные выражения полезны тем, что вычисления с ними производятся без погрешностей.
Преобразования символьных выражений в Matlab
Возможны несколько типов преобразований:
Для примера зададим символьное выражение и попробуем раскрыть скобки:
Данная функция помогает упростить символьное выражение в Matlab. Возьмем для примера такое выражение.
Данная функция помогает преобразовать символьное выражение, например, в полином в Matlab. Иногда, это бывает очень важно и необходимо.
Вычисление значения символьных выражений в Matlab
Конечно, символьные выражения это интересный инструмент в Matlab, но хотелось бы находить значение этого выражения при каких-то заданных значениях переменной.
Для этого можно воспользоваться несколькими функциями. Сначала нужно заменить все переменные на число с помощью оператора subs. Затем перевести полученное выражение в числовое с помощью оператора double. Разберем пример:
Стоит отметить, что после выполнения оператора subs, выражение все еще остается символьным. Поэтому далее выполняется оператор double.
Если же у функции несколько переменных, то придется использовать subs несколько раз.
Символьное дифференцирование в Matlab
На нашем сайте уже были статьи по численному дифференцированию в среде Matlab, но любой численный метод может давать погрешности. А вычисление в символьном виде может быть очень полезным и точным.
Итак, символьное дифференцирование осуществляется оператором diff. При вызове функции следует указать переменную, по которой будет производиться дифференцирование.
В этом примере функция зависит от одной переменной, поэтому производная считается по ней автоматически. Если нужно вычислить вторую производную:
Теперь посмотрим на функцию от нескольких переменных:
Очевидно, что после получения производных, с ними можно выполнить все действия, описанные выше.
Символьное интегрирование в Matlab
Наряду с дифференцированием, в Matlab можно выполнять символьное интегрирование. Иногда это бывает удобнее, чем численное интегрирование. Символьное интегрирование в Matlab выполняется оператором int.
Оператор выполняется практически также, как и оператор дифференцирования.
Также, возможен расчет определенного интеграла:
Другие функции
В Matlab реализовано множество функций для работы с символьными вычислениями. Помимо тех, что были рассмотрены, следует выделить следующие функции:
- ezplot(f) — построение графика функции
- solve(f) — решение символьных уравнений и систем
- taylor(f) — разложение символьной функции в ряд тейлора
- limit(f) — вычисление предела
Эти и многие другие функции в Matlab имеют свои опции и параметры. Очевидно, что среда Matlab дает широкие возможности разработчику при работе с символьными вычислениями.
Заключение
На этом статья подходит к концу. Символьные вычисления в Matlab являются дополнительным инструментом разработчика, и с помощью этой статьи можно ознакомиться с этим инструментом.
Все примеры очень просты и в исходниках не нуждаются. На этом все, встретимся в следующей статье.
Основным является сессионный cookie, обычно называемый MoodleSession. Вы должны разрешить использование этого файла cookie в своем браузере, чтобы обеспечить непрерывность и оставаться в системе при просмотре сайта. Когда вы выходите из системы или закрываете браузер, этот файл cookie уничтожается (в вашем браузере и на сервере).
Другой файл cookie предназначен исключительно для удобства, его обычно называют MOODLEID или аналогичным. Он просто запоминает ваше имя пользователя в браузере. Это означает, что когда вы возвращаетесь на этот сайт, поле имени пользователя на странице входа в систему уже заполнено для вас. Отказ от этого файла cookie безопасен - вам нужно будет просто вводить свое имя пользователя при каждом входе в систему.
2 -е занятие по MATLAB
ЛАБОРАТОРНАЯ РАБОТА №2
Создание М-файлов в виде М-функций.
Элементы программирования в MATLAB .
1. По определению файлы, которые содержат в себе языковые коды системы MATLAB , называются М-файлами. М-файлы могут быть функциональными (М-функциями), если они содержат аргументы (входные переменные) и создают выходные данные. М-файлы обеспечивают расширяемость среды MATLAB , позволяют добавлять новые функции (встроенные функции) к уже существующим функциям MATLAB . М - файлы типа М-функций представляют собой как и М-сценарии обычные текстовые файлы, которые создаются с помощью редактора файлов. Написание М-функции начинается с кючевого слов function .
1. Формат заголовка М - функции:
function [список выходных переменных] = ( ); % список выходных переменных может быть условным, т.е просто символ.
% Сохранение М-файла как М-функции должно быть с именем, которое указывается в поле заголовка М-функции.
Пример 1 на создание М-функции. Создать М-файл для вычисления следующего выражения: , где — числа или матрицы одинаковой размерности.
В текстовом редакторе MATLAB создаем следующий М-файл в виде М-функции:
% Применение точки означает массивное озведение в квадрат.
% Созданную М-функцию сохраним под именем , которому редактор MATLAB добавит расширение " .m " .
% Обращение к функции fun 1 может быть выполнено или в командном окне или в М-сценарии.
Для примера 1 сначала в командном окне выполним следующие действия:
Ø fun 1(3,4) % в качестве аргументов выбраны значения a =3, b =4
5 % результат выполнения М-функции fun 1 с входными аргументами 3 и 4
Ø % другой способ использования созданной функции fun 1:
Ø % с присвоением результата, например, через z 1
Ø z1=fun1(a,b)
Пример 2. Вычисление факториалов: , где — количество сомножителей.
Создадим следующую М-функцию под именем fact 1. m :
% Вычисление n -факториал:
function f 1= fact 1( n )
f 1= prod (1: n );
% максимальное число n =170
% функция prod в свою очередь является встроенной функцией MATLAB .
Для примера вычислим :
Пример 3. Создадим функцию для подсчета суммы натуральных чисел как положительных, так и отрицательных.
function s 1= sum 1( n , k ) % n — количество членов ряда, k —любое число, большее или % меньшее нуля, n , k — входные аргументы
Для проверки примера 3 в командном окне следует набрать sum 1 с конкретными n и k , например, n =5, k =1.333 и для отрицательной суммы n =5, k =-6.78.
Пример 4. Закодируем функцию в виде М-функции, где — действительное число.
Создадим следующую М-функцию под именем graf1.m:
function y = zet1(t,k)
% t — входной аргумент , который должен быть определен как вектор чисел
% Созданную М - функцию следует сохранить под именем zet1 .
% Для проверки примера 3 в командном окне MATLAB набрать:
Ø k=3; % число k можно задавать произвольно
Ø z1=graf1(t,k);
Ø polar(t,z1,'r*'),grid
Ø % Должен получиться график в полярной системе координат.
z1 будет означать y1 = 3 + 3(1+sint) . Если клавишей Enter запустить на выполнение, то будут выводиться все значения функции z1. Если же в конце строки стояла точка с запятой, то результат выводится не будет.
Построить график z1 в декартовой системе координат. Для этого в командной строке набрать plot(t,z1),grid . Откроется окно с графиком синусоиды по оси ординат от +3 до + 9 и по оси абсцисс от 0 до 10.
Задание. Применить функцию graf1 с различными входными аргументами и построить графики в декартовой и полярной системах координат.
Пример 5. Контроль количества входных аргументов.
function y=test1(a,b)
if (nargin==1) % nargin — ключевое слово для проверки количества входных аргументов
elseif (nargin==2) % Двойное равенство"= MsoNormal"> % отношения
% Операторы условия if, elseif (ранее встречалось else) имеют следующие форматы записи:
Кто-нибудь знает, как сделать так, чтобы следующий код Matlab более точно аппроксимировал экспоненциальную функцию при работе с большими и отрицательными действительными числами?
Например, когда x = 1, код работает хорошо, когда x = -100, он возвращает ответ 8.7364e+31, когда он должен быть ближе к 3.7201e-44.
Код выглядит следующим образом:
Любая помощь приветствуется, ура.
Итак, вопрос в следующем:
Какую математическую функцию аппроксимирует этот код? (Я говорю экспоненциальная функция.) Работает ли она, когда x = 1? (Да.) К сожалению, использование этого, когда x = -100 дает ответ s = 8.7364e+31. Ваш коллега считает, что в программе есть глупая ошибка, и просит вашей помощи. Тщательно объясните поведение и дайте простое исправление, которое даст лучший результат. [Вы должны предложить модификацию вышеприведенного кода или его использование. Вы также должны проверить свои простые исправления.]
Поэтому я в некоторой степени понимаю, что проблема связана с большими числами, когда между терминами 16 (или более) порядков, точность теряется, но решение ускользает от меня.
Итак, в конце концов я пошел с этим:
Не уверен, что это полностью правильно, но возвращает хорошие приближения.
exp (-100) = 3,720075976020836e-044
s = 3,722053303838800e-044
После дальнейшего анализа (и, к сожалению, отправки задания) я понял, что увеличение количества итераций и, следовательно, увеличение сроков еще более повышает эффективность. На самом деле следующее было еще более эффективным:
Читайте также: