Компьютерная система Mathematica
Описание технической компьютерной системы Mathematica. Пользовательский интерфейс и главное меню системы. Графическое представление функций, получение пространственного изображения поверхности. Методы решения систем линейных алгебраических уравнений.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 26.10.2011 |
Размер файла | 448,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Лабораторная работа
Компьютерная система Mathematica
1. Компьютерная система Mathematica
Среди систем компьютерной математики наиболее мощной и в то же время универсальной является техническая компьютерная система Mathematica, разрабатываемая компанией Wolfram Research, Inc. (США). Изначально задуманная как исключительно гибкая и общая техническая компьютерная система, Mathematica уникальна в разнообразии своего применения. Mathematica стала незаменимым инструментом для исследований с момента ее появления, и многие из ведущих мировых ученых полагаются на нее в своих исследованиях. Тысячи выполненных с помощью Mathematica работ и технических документов были опубликованы в очень разнообразных областях, например, гидрологии и молекулярной физике. Несмотря на название программы, использование Mathematica распространяется далеко за границы традиционной математики и математических наук. При первом запуске мы видим два окна:
Рисунок 1 - Главная панель пакета Mathematica
Рисунок 2 - Стартовая палитра
Нетрудно заметить, что пользовательский интерфейс системы Mathematica реализует отдельный вывод своих элементов - окон (включая основное окно редактирования), панелей, палитр знаков и т.д. Это позволяет располагать их в любых местах экрана, что особенно удобно при работе с дисплеями, имеющими большой размер изображения - от 17 дюймов по диагонали и выше. При работе с дисплеями, имеющими небольшой экран (14 или 15 дюймов) и стандартном разрешении 640x480 пикселей раздельный вывод элементов интерфейса скорее неудобен, поскольку приходится тщательно располагать их в нужных местах и индивидуально подстраивать размеры отдельных окон и палитр. Однако после настройки элементы интерфейса выводятся в том виде, как это было задано. Главное окно системы имеет крайне невзрачный вид, поскольку не содержит ничего, кроме строки заголовка и строки меню. Справа и снизу большого окна редактирования находятся линейки прокрутки с характерными ползунками, управляемыми мышью. Они предназначены для скроллинга текстов больших документов, если последние не помещаются в видимой части окна. Положение ползунка приближенно указывает место в документе, которое в данный момент отображается на экране. В самом низу в начале линейки прокрутки имеется строка состояния (Status bar) с информацией о текущем режиме работы. Эта информация (если она есть в данный момент) полезна для оперативного контроля в ходе работы с системой. Главное меню системы содержит следующие позиции:
File - работа с файлами: создание нового файла, выбор файла из каталога, закрытие файла, запись текущего файла, запись файла с изменением имени, печать документа и завершение работы;
Edit - основные операции редактирования (отмена операции, копирование выделенных участков документа в буфер с их удалением и без удаления, перенос выделенных участков, их стирание);
Cell - работа с ячейками (объединение и разъединение ячеек, установка статуса ячейки, открытие и закрытие);
Format - управление форматом документов;
Input - задание элементов ввода (графиков, матриц, гиперссылок и т.д.);
Kernel - управление ядром системы;
Find - поиск заданных данных;
Window - операции с окнами и их расположением;
Help - управление справочной системой. Часть команд может быть в данный момент невыполнима - например, нельзя вычислить значение выражения, если его самого нет в окне редактирования или если ячейка с ним не выделена. Названия таких команд выделяются характерным серым расплывчатым шрифтом. Четкий шрифт, напротив, характерен для тех команд, которые в данный момент могут исполняться. Управление главным меню самое обычное.
Вкратце рассмотрим основные палитры, необходимые для решения задач численных методов:
Рисунок 3 - Алгебраическая палитра
Рисунок 4 - Базовый математический ввод
Рисунок 5 - Специальные символы
Рисунок 6 - Палитра для 2х-мерного рисования
2. Работа с пакетом Mathematica 6.0
2.1 Графическое представление функций
Mathematica предоставляет возможность использовать все обычно применяемые элементарные и многие специальные функции, обозначение которых совпадает с общепринятыми. Рассмотрим вначале, как в Mathematica определяются функции
f[x_]:=x^2 Sin[x]+Exp[-2 (x-1.5)];
В левой части определено имя функций f с аргументом x, причем знак подчеркивания `_' обозначает, что x может принимать любое значение. Правая часть задает определение однозначной функции.
Mathematica использует различные виды скобок : [ ]- для функций и процедур, { }- для списков и обычные ассоциативные скобки ( ).
Графики функций, заданных аналитически.
Для графического представления функции одной переменной используется процедура
Plot[f[x], {x,0,2 Pi}, AxesLabel ->{“x”, “f(x)”}];
Рис. 1. График функции y=x2sinx+e-2(x-2).
Для обрамления рамкой и нанесения сетки на рисунке можно использовать следующую процедуру
Show[%, Frame->True, FrameLabel->{"Argum","Func"},
GridLines-> Automatic]
Здесь % означает обращение к последнему результату, т.е. к графику f(x).
Рис. 2. График функции y=x2sinx + e-2(x-2).
Определим список функций следующим оператором
p={Sin[x],Cos[x],Exp[-0.5 x],Log[1+x]};
Построим графики функций, входящих в список, на одном рисунке, используя приведенную ниже процедуру
Plot[{p[[1]],p[[2]],p[[3]],p[[4]]},{x,0,2 Pi}]
-Graphics-
Для построения каждого графика на отдельном рисунке можно использовать следующую процедуру
g=Table[Plot[p[[i]],{x,0,2 Pi},AxesLabel->{"x","f[x]"}],{i,1,4}]
{-Graphics-, -Graphics-, -Graphics-, -Graphics-}
Если необходимо нанести на графиках наименование кривых, то для этого вводится список координат, которые определяют положение названий графиков
deskr={{1.5,0.6},{1.5,0.8},{2,0.8},{2,1.8}};
и сами названия
txt={"Sin[x]","Cos[x]","Exp[-0.5x]","Log[1+x]"};
а затем выводятся графики с соответствующими наименованиями
g=Table[Plot[p[[i]],{x,0,2 Pi},AxesLabel->{"x","f[x]"},
Epilog->Text[txt[[i]],deskr[[i]]]],{i,1,4}]
Графики можно расположить в таблице, так как это сделано ниже программой
p={Sin[x],Cos[x],Exp[-0.5 x],Log[1+x]};
deskr={{0.1,1.3},{0.1,1.3},{0.1,1.2},{0.1,2.3}};
txt={"Sin[x]","Cos[x]","Exp[-0.5x]","Log[1+x]"};
g=Table[Plot[p[[i]],{x,0,2 Pi},AxesLabel->{"x"," "},
Epilog->Text[txt[[i]],deskr[[i]]],DisplayFunction->Identity],{i,1,4}];
Show[GraphicsArray[{{g[[1]],g[[2]]},{g[[3]],g[[4]]}}],
Frame->True,FrameTicks->None,DisplayFunction->$DisplayFunction]
Сначала с помощью опции DisplayFunction ->Identity будет подавлена выдача графиков на экран дисплея, а затем в следующей процедуре Show эти графики будут выведены с помощью опции DisplayFunction->%DisplayFunction.
-GraphicsArray-
Следующий оператор позволяет изобразить линии равного уровня функции двух переменных
ContourPlot[x^2-y^2,{x,-2,2},{y,-2,2}]
Рис. 3. Линии равного уровня функции f(x,y)=x2-y2.
Рис. 4. Изолинии функции f(x,y) =x2-y.
Для получения пространственного изображения поверхности, определяемой уравнением z=x2+y2/16, можно использовать процедуру
Plot3D[x^2+y^2/16,{x,-2,2},{y,-4,4}]
Рис. 5. Поверхность, соответствующая уравнению z=x2+y2/16.
При параметрическом задании функции для ее пространственного изображения используется процедура
ParametricPlot3D[{ u Sin[t], u Cos[t], t/2}, {t,0,2 Pi}, {u,-3,3}, Tick-> None].
Рис. 6. Поверхность, заданная параметрически x=uSint, y=uCost, z=t/2.
Можно изображать и более сложные поверхности ,заданные параметрически.
ParametricPlot3D[{Sin[t], Sin[u] Sin[2 t],Sin[2 t] Cos[u]},
{t,-Pi/2, Pi/2},{u,0,2 Pi},Ticks->Automatic]
Рис. 7. Поверхность, заданная уравнениями x=Sint, y=Sin2tSinu, z=Sin2tCosu.
В последней процедуре использована опция автоматической разметки осей.
Кроме приведенных выше графических операторов Mathematica содержит общий графический оператор формата Graphics3D[<Примитивы >,<Директивы >], описывающий трехмерный графический объект на основе заданных графических примитивов и директив. После описания графического объекта Graphics3D оператором он выводится посредством Show функции. Приведем пример использования примитива
Cuboid [{x,y,z },{x1,y1,z1}],
описывающего параллелепипед с противоположными углами в точках (x,y,z) и (x1,y1,z1).
f2=Graphics3D[{Cuboid[{0,0,0},{1,1,3}],Cuboid[{1,0,0},{2,1,2}],Cuboid[{2,0,0}]}];
С помощью последнего оператора созданы три, примыкающих друг к другу параллелепипеда, которые визуализируются следующим оператором.
Show[f2]
Рис. 8 Создание графического объекта Graphics3D- оператором и вывод его Show- функцией.
Использование графического примитива для двумерной графики иллюстрируется следующим примером. Построим столбчиковую диаграмму, применив двухмерный графический примитив
Rectangle[{xmin, ymin}, {xmax, ymax}] - который представляет заполненный прямоугольник, ориентированный параллельно осям координат.
Show[Graphics[{Hue[.01],Rectangle[{0,0},{1,4}],Hue[.1],Rectangle[{1,0},{2,7}],Hue[.82],Rectangle[{2,0},{3,3}],Hue[.55],Rectangle[{3,0},{4,2}]}]]
Рис. 9. Создание графического объекта Graphics- оператором и вывод его Show- функцией
2.2 Построение графиков функций, заданных таблицей
1). Для построения табличных функций можно использовать процедуру
l=ListPlot[{{0,0},{0.25,0.15},{0.5,0.25},{0.75,0.6},
{1.,1.5},{1.5,2.5},{2.,4.}},PlotJoined->True,
Frame->True,FrameLabel->{"x","f(x)"},GridLines->Automatic]
ЗдесьListPlot[{{x1,y1},{x2,y2}, ...{xi,yi}}]- график списка переменных, специфицированных x и y координатами. ListPlot- возвращает Graphics- объект и имеет те же опции, что и Graphics со следующими дополнениями
PlotJoined -> True соединяет заданные списком точки ломаной. Ниже следует соответствующий график.
2). По таблице значений функции, записываемой в виде следующего списка
d={{0,0},{0.75,0.6},{1.,1.5},{1.5,2.5},{2.,4.}};
можно получить интерполяционный многочлен. Mathematica использует для этих целей интерполяционный многочлен Ньютона, вызов соответствующей процедуры осуществляется следующим образом. Если таблица содержит n точек, то строится многочлен n-1 степени
ind=InterpolatingPolynomial[d,x]
В результате на экран выводится искомый многочлен
(0.8 + (2.8 + (-3.28889 + 2.89778 (-1.5 + x)) (-1. + x)) (-0.75 + x)) x
В случае необходимости можно построить его график, используя процедуру
p1=Plot[ind,{x,0,2},Frame->True,GridLines->Automatic]
-Graphics-
Для сравнения оба графика, ломаной-1 интерполяционного многочлена-p1, приведем на одном рисунке
t=Graphics[{Text["l",{0.3,0.5}],Text["p1",{0.25,-0.4}]}];
Show[p1,l,t,Frame->True,GridLines->Automatic]
-
3). Табличную функцию можно представить, интерполируя ее с помощью линейных или кубических сплайнов. Для построения сплайн функции по таблице d используется следующая процедура. Опция указывает на выбор кубического сплайна.
Tr=Interpolation[d,InterpolationOrder->3]
InterpolatingFunction[{0, 2.}, <>]
Значения интерполяционной функции Tr, можно найти следующим образом
Tr[1.2]
результат напечатан ниже
1.96032
График полученной функции можно построить оператором
Plot[Tr [x],{x,0,2.},Frame->True,GridLines->Automatic]
Приведем этот график.
Он практически не отличается от графика, построенного с помощью многочлена Ньютона.
Того же результата можно достичь следующим оператором, который строит интерполяционную функцию используя кубические сплайны.
Plot[Evaluate[Interpolation[d]][x],{x,0,2.},Frame->True,GridLines->Automatic]
Полученную интерполяционную функцию можно использовать в выражении и, например, проинтегрировать в заданных пределах
NIntegrate[Tr[x]^2,{x,0,2}]
в результате получим 7.47993
4).Среднеквадратичное приближение. Табличную функцию {xi,yi}, на отрезке [x1, xn] представляют многочленом степени m
p(x) = a0 + a1x +a2x2 +... + amxm . (1)
За меру отклонения полинома p(x) от данной табличной функции yi на множестве точек xi , принимают величину
(2)
для построения аппроксимирующего полинома требуется подобрать коэффициенты так, чтобы величина I была наименьшей. Для решения нашей задачи найдем частные производные от функции I(a0, a1,..., am) по всем переменным и приравняем каждую из них нулю
(4)
Введем обозначения:
(5)
Преобразуем систему (4) и используя введенные обозначения получим
(6)
Решение системы (6) определяет значения коэффициентов ai многочлена (1).
Приведем пример программы, определяющей по заданной таблице многочлен наилучшего среднеквадратичного приближения. Пусть табличная функция задана двумя таблицами ta ={xi} и tb ={yi} :
ta={1.1,1.2,1.5,2,4,2.7,2.4}; tb={1,2.5,3.4,4.3,5.1,4.2,3.7};
Зададим количество коэффициентов системы (степень многочлена будет на единицу меньше) и опишем вспомогательный массив для вычисления коэффициентов системы sk
m=4;S=Array[s,{m,m}];n=Length[ta];
Вычислим все sk по формуле (5)
и образуем из них матрицу системы уравнений (6)
X=Table[Sum[ta[[i]]^j/n,{i,n}],{j,0,2*(m-1)}]
TA=Table[s[i,j]=X[[i+j-1]],{i,m},{j,m}];
Приведем ее для иллюстрации
TableForm[TA]
Вычислим правые части системы уравнений bk по формуле (5)
b=Table[Sum[ta[[i]]^j*tb[[i]]/n,{i,n}],{j,0,(m-1)}]
{3.45714,8.34571,23.3129,73.1062}
и получим ее решение
A=Inverse[TA].b
{-13.4621,21.5347,-8.4563,1.05846}
Запишем полученный многочлен
p[x_]:=Sum[A[[i]]*x^(i-1),{i,m}];
p[x]
Построим график полученного многочлена, на который нанесем заданные табличные значения. Составим из двух таблиц ta и tb обычную таблицу {xi,yi}
TT=Transpose[{ta,tb}]
{{1.1,1},{1.2,2.5},{1.5,3.4},{2,4.3},{4,5.1},{2.7,4.2},{2.4,3.7}}
Построим график табличной функции и задержим его вывод
g1=ListPlot[TT,PlotStyle?PointSize[0.03],DisplayFunction->Identity];
Построим график полученного многочлена
g2=Plot[p[x],{x,1.1,4},DisplayFunction->Identity];
Теперь выведем оба графика
Show[g1,g2,GridLines?Automatic,Frame?True,FrameLabel?{x,f[x]},DisplayFunction?$DisplayFunction]
Найдем относительную среднеквадратичную ошибку
Кроме оператора Fit, рассмотренного в учебном пособии [1], в Mathematica имеется стандартный пакет PolynomialFit, который также дает многочлен наилучшего квадратичного приближения. Разница между ними состоит в том, что последний оператор представляет многочлен по степеням (x -xср) отклонения переменной x от среднего табличного ее значения xср. Вызов пакета выполняется по инструкции
<<NumericalMath`PolynomialFit`
Приведем пример его использования. Введем таблицу
tb={{1.2,2.1},{1.4,3.5},{1.7,4.3},{1.9,3.2},{2.3,2.1},{2.5,0.8}};
и получим многочлен наилучшего квадратичного приближения третьей степени
p = PolynomialFit[tb,3]
FittingPolynomial[<>, 3 ]
Приведем его выражение
N[p[x],6]
3.78964 -1.7454 (-1.83333+x)+1.08536 (-0.69067+2.17072 (-2.32879+1.7454 (-1.83333+x)) (-1.83333+x)) (-1.83333+x)
Покажем, что среднее табличное значение равно
1.83333
Получим по таблице tb многочлен третьей степени с помощью оператора Fit
f1=Fit[tb,{1,x,x^2,x^3},x]
Покажем, что он совпадает с многочленом p(x)
p1=Expand[p[x]]
Построим график многочлена p[x]
g2=Plot[p[x],{x,1.2,2.5},DisplayFunction->Identity];
и на этом же рисунке точками покажем табличные значения
g1=ListPlot[tb,PlotStyle?PointSize[0.03],DisplayFunction->Identity];
Теперь приведем оба графика
Show[g1,g2,GridLines?Automatic,Frame?True,FrameLabel?{x,f[x]},DisplayFunction->$DisplayFunction]
Приведем пример небольшой программы, которая в цикле заполняет список, составленный из пар чисел соответствующих значениям аргумента и заданной функции.
j=0;x=0;h=N[?/20];dat={};
While[j?10,a=Sin[x];
dat=Append[dat,{x,a}];
Print["n=",j," x=",x," z= ",N[a,10]];
j=j+1;x=x+h]
n= 0 x= 0 z= 0
n= 1 x= 0.15708 z= 0.156434
n= 2 x= 0.314159 z= 0.309017
n= 3 x= 0.471239 z= 0.45399
n= 4 x= 0.628319 z= 0.587785
n= 5 x= 0.785398 z= 0.707107
n= 6 x= 0.942478 z= 0.809017
n= 7 x= 1.09956 z= 0.891007
n= 8 x= 1.25664 z= 0.951057
n= 9 x= 1.41372 z= 0.987688
n= 10 x= 1.5708 z= 1.
Вначале список dat пуст, что обозначается через {}, затем список дополняется с помощью оператора Append парой вычисленных значений {x,a}. Эти значения на каждом шаге вычислений выводятся на экран. По полученному списку dat определяется многочлен наилучшего квадратичного приближения по следующим базисным функциям {x,x^3,x^5}
Clear[x];fitt=Fit[dat,{x,x^3,x^5},x]
Этот многочлен fitt фактически аппроксимирует функцию Sin[x] на отрезке [0,?/2]. Для сравнения оба графика приведены на одном рисунке, где они слились в одну кривую.
Plot[{Sin[x],fitt},{x,0,?/2}, AxesLabel->{"x","Sin[x], fitt"}]
-Graphics-
На следующем рисунке построен график для погрешности аппроксимации функции Sin[x]
Plot[Sin[x]-fitt,{x,0,?/2},AxesLabel->{"x","Sin[x]-fitt"}]
5).В пакете Mathematica можно самим программировать формулы для интерполирования функций. Этим вопросам будет уделено особое внимание в 5 лабораторной работе.
компьютерный система mathematica функция уравнение
3. Решение уравнений
3.1 Решение алгебраических уравнений
Прямые методы решения систем линейных алгебраических уравнений.
1.Решение систем стандартными операторами пакета. Систему линейных алгебраических уравнений можно решить, представив ее в матричной форме. Введем матрицу решаемой системы
m={{5,2,1,0.5,-1},{0,-6,4,0.1 ,1},{0,2,10,1,4},{1,0,2,8,-3},{2,0,0,3,-9}};
Матрица представляется построчно последовательностью списков. Ее можно вывести на экран в обычном виде следующей процедурой
MatrixForm[m]
Введем вектора неизвестных x, правых частей уравнений f. Найдем затем обратную матрицу mi и с ее помощью найдем решение x=mi.f. Точка в последней формуле обозначает умножение матрицы на вектор.
f={2,-4,-3,5,8};
mi=Inverse[m];
x=mi.f
{0.0529219, 0.46216, -0.127254, 0.367172, -0.754738}
Последняя строка внутри скобок содержит значения компонент искомого вектора x и выдает тот же результат. Компоненту j вектора можно получить через x[[j]], а элемент матрицы mi,j соответственно через m[[i,j]]. Имеется возможность вычислить определитель матрицы.
di=Det[mi]
0.0000534456
Произведение двух матриц определяется процедурой
e=m.mi,
которая в рассматриваемом примере должна быть равна единичной матрице. Систему линейных алгебраических уравнений лучше решать, использовав следующую процедуру, которая для рассмотренного выше примера имеет вид
LinearSolve[m,f]
{0.0529219, 0.46216, -0.127254, 0.367172, -0.754738}
Последняя процедура позволяет получить решение как для числовых, так и для символьных значений
M={{a,b},{c,d}};f={g,h};x=LinearSolve[M,f]
Например, можно получить символьное решение той же системы следующим образом:
U=Inverse[M].f
упростив которое получим те же выражения для компонент вектора решения.
Simplify[%]
Для решения системы линейных уравнений, записанных в виде
V={v1,v2}; W=M.V;eq=W==f
{a v1+b v2,c v1+d v2}?{g,h}
можно использовать процедуру
Solve[eq,V],
которая дает следующее символьное решение системы уравнений
Если необходимо решить систему с числовыми матрицей m и вектором b, то сформируем вектор неизвестных
Y=Table[y[i],{i,Length[m]}]; b={0.9,6.5,-4.6,3.8,-7.2};
и получим численное решение следующей процедурой
{{y[1]?1.08066,y[2]?-1.3974,y[3]?-0.847755,y[4]?1.07647,y[5]?1.39897}}
Размещено на Allbest.ru
Подобные документы
Решение системы дифференциальных уравнений, создание функций и обработка экспериментальных данных с помощью языка программирования Mathematica. Сравнение между использованием циклических операций в системе Mathematica и в математическом пакете Maple.
отчет по практике [2,1 M], добавлен 09.12.2013Общая характеристика программы "Mathematica": интерфейс, численные методы, графика и звук, программирование и стандартные дополнения. Основные способы построения графических функций. Составление календарно-тематического плана по информатике для 10 класса.
дипломная работа [5,4 M], добавлен 01.04.2012Использование MS Excel для математических расчетов. Описание численных методов решения системы линейных алгебраических уравнений. Решение систем линейных алгебраических уравнений с методами Крамера и Зейделя и с помощью табличного процессора MS Excel.
курсовая работа [1,6 M], добавлен 14.02.2021Системы линейных алгебраических уравнений. Код программы для решения систем линейных алгебраических уравнений. Математические и алгоритмические основы решения задачи методом Гаусса. Программная реализация решения. Алгоритмы запоминания коэффициентов.
лабораторная работа [23,5 K], добавлен 23.09.2014Анализ методов решения разреженных недоопределенных систем линейных алгебраических уравнений с помощью эффективных алгоритмов, основанных на декомпозиции линейных систем и учете их сетевых свойств. Использование встроенных методов пакета Mathematica.
курсовая работа [4,2 M], добавлен 22.05.2014Возможности математического пакета MathCad в среде Windows 98 для использования матричной алгебры и решения системы линейных алгебраических уравнений. Методы решения систем линейных алгебраических уравнений. Сравнение метода Гаусса с методом MathCad.
практическая работа [62,6 K], добавлен 05.12.2009Изучение систем линейных алгебраических уравнений (СЛАУ) с использованием табличного процессора MS Excel 2007. Пример решения системы линейных алгебраических уравнений методом Крамера. Прикладное программное обеспечение, применяемое для решения СЛАУ.
курсовая работа [184,5 K], добавлен 20.11.2013Алгоритм решения систем линейных уравнений методом Гаусса, его этапы. Система уравнений для определения коэффициентов сплайна, представляющая собой частный случай систем линейных алгебраических уравнений. Программная реализация, тестовый пример.
курсовая работа [431,8 K], добавлен 15.06.2013Сущность матричного метода. Разработка программы решения системы уравнений линейных алгебраических уравнений методом решения через обратную матрицу на языке программирования Delphi. Представление блок-схемы и графического интерфейса программного продукта.
курсовая работа [1,0 M], добавлен 27.09.2014Проектирование приложения, позволяющего находить решение системы алгебраических линейных уравнений матричным методом. Выбор количества уравнений, заполнение значений коэффициентов системы уравнений и свободных членов, алгоритм решения линейных уравнений.
курсовая работа [939,4 K], добавлен 16.01.2014