Задания для самостоятельного решения



1. Решить уравнение для ,  и условия . Объяснить получившееся решение.

2. Решить уравнение для ,  и условия . Объяснить получившееся решение.


Лабораторная работа № 2
Интерполяция функции полиномами Лежандра

 

Задача: Функцию cos(x) на интервале [-1,1] интерполировать с помощью полиномов Лежандра. Полиномы Лежандра подчиняются следующей рекуррентной зависимости:

,

Функцию  будем интерполировать обобщенным полиномом: ,

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

Определение скалярного произведения .

Коэффициенты легко вычислить, если последовательно умножить скалярно обощенный полином  на , например, на :

,

.

По свойству, определенному для , получим: .

> restart:

n:=5; – количество функций в наборе

c:=-1; – левая граница интервала

d:=1; – правая граница интервала

y(x):=cos(x); – функция для интерполяции

    Создадим рекурсивную процедуру, вычисляющую полиномы Лежандра

> P:=proc(i)

if i=0 then 1

  else if i=1 then x

    else if i>1 then (x*(2*(i-1)+1)*P(i-1)-(i-1)*P(i-2))/(i)

fi fi fi

end proc:

    Создадим набор нормированных функций

> for i from 0 to n do

f[i]:=P(i)/sqrt(int(P(i)^2,x=c..d))

od:

    Найдем коэффициенты

> for i from 0 to n do

a[i]:=int(f[i]*y(x),x=c..d);

end do;

    С помощью оператора цикла соберем функцию

> t(x):=0:

for i from 0 to n do

t(x):=t(x)+a[i]*f[i];

end do:

T(x)=t(x);

    Построим графики функции, для сравнения:

Графики y (x)- серый и t (x) - черный
> plot([y(x),t(x)],x=c-1..d+1,color=[red,black],title="Графики y(x)-красный и t(x)-чёрный");

    Отобразим функцию интерполяции в виде с действительными числами.

> evalf(%%);

    Из графика очевидно, что для интерполяции функции cos(x) на интервале [-1,1] достаточно пяти членов суммы ряда.


Лабораторная работа № 3
Метод наименьших квадратов

 

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

Рассмотрим непрерывную функцию , аппроксимирующую дискретную зависимость . Выберем ее в следующем виде: , где  – заранее определенные базисные функции.

 – необходимое условие для заданной функции . N – количество точек в наборе. Нахождение функции  из условия минимума S называется методом наименьших квадратов.
    S имеет минимум в следующем случае:

Если вынести неизвестные постоянные  из сумм, а суммы, содержащие , перенести за знак равенства, получим следующую систему уравнений:

.

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

.

Из нее получим коэффициенты , по которым построим параболу: .

> restart;

    Сначала зададим набор данных в виде списков значений x и y.

x:=[-3,-2,1,3,6,7];

y:=[1,2,4,1,-3,1];

    Спомощью функции nops посчитаем количество элементов в списке x.

n:=nops(x);

m:=3; – количество базисных функций. Найдем минимальное и максимальное значение x, для того, чтобы использовать это при построении графика. Присвоим значения правой и левой части интервала [a,b].

a:=min(x[i]$i=1..n);

b:=max(x[i]$i=1..n);

    Определим процедуру, которая будет вычислять суммы, являющиеся коэффициентами системы уравнений. Условное ее значение

> scmult:=proc (f1,f2)

sum(x[p]^f1*y[p]^f2,p=1..n);

end proc;

    Определим расширенную матрицу f, которая будет представлением системы уравнений:

> f:=matrix(m,m+1);

    Заполним ее элементы значениями:

> for i from 1 to m do

for j from 1 to m do

f[i,j]:=scmult(i+j-2,0);

od:

od:

for i from 1 to m do

f[i,m+1]:=scmult(i-1,1)

od:

> evalm(f); – выведем матрицу в поле вывода

Решение будем искать с помощью метода Жордана-Гаусса, который реализует функция gaussjord из пакета linalg:

> fres:=linalg[gaussjord](f);

    Выделим последний столбец расширенной матрицы, который является решением системы.


> res:=linalg[col](fres,m+1);

    Переменной r[1] присвоим значение графика точек из заданного списка. Для построения списка используем оператор перечисления:

>r[1]:=plot([[x[p],y[p]]$p=1..n],style=point,symbol=circle,symbolsize=20,color=blue):

    Переменной r[2] присвоим значение графика параболы, использующий коэффициенты решения.

r[2]:=plot(sum(res[k]*t^(k-1),k=1..m),t=a-0.1..b+0.1,thickness=3):

    Отобразим результат обоих построений на общем графике.

> plots[display](r[1],r[2]);

Программа, описанная выше, является универсальной для метода наименьших квадратов. Изменяя переменную m можно, получить решение для  любой степени большей нуля. Для того, чтобы  проходила точно через все точки решения, необходимо чтобы m была равна количеству точек. Если заменить присвоение m на m:=n;, то получится следующий график:


 

Лабораторная работа № 4
Применение системы Maple в сопротивлении материалов

 

Балка нагружена следующим образом.

Необходимо определить реакции опоры, построить эпюры внутренних силовых факторов. Отменим все определения, т. к. нам потребуется построение графиков, то заранее подключим пакет plots.

Определение реакций опор.

> restart: with(plots):

Зададим значения внешней нагрузки

q:=20;

M:=30;

l:=5;

    Вычислим суммы моментов

SumM[A]:=q*l^2/2+M-R[B]*2*l=0;

SumM[B]:=-q*l*(l+l/2)+M+R[A]*2*l=0;

    Получим значения реакций опор:

R[A]:=solve(SumM[B],R[A]);

R[B]:=solve(SumM[A],R[B]);

    Проверим полученные значения:

R[A]+R[B]-q*l;

    Теперь обозначим процедуру, значения которой будут повторять значения эпюры поперечной нагрузки. На первом участке , на втором участке: .

> Qx:=proc(x)

if (x>=0) and (x<l) then R[A]-q*x

else if (x<2*l) then R[A]-q*l

fi fi

end proc:

plot(Qx,0..2*l,color=red,title="Эпюра Q",thickness=3);

    Способ построения графиков с помощью процедур удобен, когда известны интервалы построения и функция внутри каждого интервала. Если количество интервалов изменяется, то в процедуру приходится добавлять условия, то есть переписывать сначала. Более удобный способ построения – построение с помощью функции display. Сначала задаётся набор переменных со значениями графиков на интервалах. Затем через запятую они все указываются в качестве параметров функции. Рисуем вертикальную штриховку. Для этого определяем количество шагов разбиения n. Вычисляем шаг h. Затем заполняем переменные xs[i] и ys[i] значениями функции в точках разбиения.

n:=25:

h:=2*l/n:

xs[1]:=0:

ys[1]:=Qx(0):

for j from 2 to n do

xs[j]:=xs[j-1]+h;

ys[j]:=Qx(xs[j]):

od:

    Строим график вертикальных линий штриховки, используя оператор перечисления $.

pl:=plot([[[xs[i],0],[xs[i],ys[i]]]$i=1..n],color=red,thickness=1):

    Задаем функции, отражающие значения эпюры поперечных сил на каждом участке.

qx[1]:=x->R[A]-q*x;

qx[2]:=x->R[A]-q*l;

    Строим график на каждом интервале:

p[1]:=plot(qx[1](x),x=0..l):

p[2]:=plot(qx[2](x),x=l..2*l):

p[22]:=plot([[2*l,R[A]-q*l],[2*l,0]]): – вертикальная линия в конце эпюры
    Отображаем на общем графике:

display(p[1],p[2],p[22],pl,thickness=3,title="Эпюра Q");

Эпюра Q

Эпюра Q

 

    Аналогичные операции производим и с эпюрой изгибающих моментов, если известно, что:

> my[1]:=x->R[A]*x-q*x^2/2;

my[2]:=x->R[A]*x-q*l*(l/2+(x-l));

my[3]:=x->R[A]*x-q*l*(l/2+(x-l))+M;

My:=proc(x)

if (x>=0) and (x<l) then my[1](x)

else if (x<(l+l/2)) then my[2](x)

else if (x<2*l) then my[3](x)

fi fi fi

end proc:

plot(My,0..2*l,color=red,title="Эпюра M",thickness=3);

n:=25:

h:=2*l/n:

xs[1]:=0:

ys[1]:=My(0):

for j from 2 to n do

xs[j]:=xs[j-1]+h;

ys[j]:=My(xs[j]):

od:

pl:=plot([[[xs[i],0],[xs[i],ys[i]]]$i=1..n],color=red,thickness=1):

p[1]:=plot(my[1](x),x=0..l):

p[2]:=plot(my[2](x),x=l..3*l/2):

    В месте разрыва строим вертикальную линию, соединяющую точки разрыва.

mp:=3*l/2:

p[22]:=plot([[mp,R[A]*mp-q*l*(l/2+(mp-l))],[mp,R[A]*mp-q*l*(l/2+(mp-l))+M]]):

p[3]:=plot(my[3](x),x=3*l/2..2*l):

display(p[1],p[2],p[22],p[3],pl,title="Эпюра M",thickness=3);

Эпюра Q

Эпюра Q


 

Лабораторная работа № 5
Решение системы методом прогонки

 

Задача: решить систему, представленную в виде расширенной матрицы:

Для наиболее точного решения систем с трехдиагональной матрицей применяется метод прогонки.

Первое уравнение системы в общем виде можно записать так:

. Выразим  => .

    Второе уравнение: , если подставить :

. Выразим  => .

    Отсюда легко определить зависимость:

 , где , .

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

Теперь чтобы вычислить значения  (решение системы) необходим обратный ход. Последнее уравнение системы: . С дугой стороны: . Подставим в последнее уравнение

, отсюда .Потом по формуле , двигаясь в обратном порядке, вычислим все значения . Следующая программа реализует вышеперечисленные вычисления.

> restart; – отменяем все определения

with(linalg): – подключаем модуль для работы с линейной алгеброй

> A:=matrix(5,6): – объявляем расширенную матрицу А

> evalm(A);

    Заполняем матрицу значениями из условия задачи

>A:=matrix(5,6,[[2,1,0,0,0,2],[1,2,1,0,0,1],[0,1,2,1,0,0],[0,0,1,2,1,1],[0,0,0,1,2,2]]);

    Данная программа учитывает то факт, что значения на диагоналях могут изменяться, поэтому на каждом шаге свои значения .Ниже реализуется прямой ход метода.

> b[1]:=A[1,1]: c[1]:=A[1,2]: f[1]:=A[1,6]:

lambda[1]:=-c[1]/b[1]: delta[1]:=f[1]/b[1]:

> for i from 2 to 5 do

a[i]:=A[i,i-1]; b[i]:=A[i,i]; c[i]:=A[i,i+1]; f[i]:=A[i,6];

c[5]:=0;

lambda[i]:=-c[i]/(a[i]*lambda[i-1]+b[i]);

delta[i]:=(f[i]-a[i]*delta[i-1])/(a[i]*lambda[i-1]+b[i]);

od:

> x:=vector(5): – объявляем вектор, для заполнения значениями решения

x[5]:=delta[5]:
Обратный ход.

for j from 1 to 4 do

i:=6-j;

x[i-1]:=lambda[i-1]*x[i]+delta[i-1];

od:

`x`:=evalm(x);

    В результате получено решение системы в виде вектора х.

 

 


Библиографический список

 

1. Волков Е.А. Численные методы.- М.: Наука, 1987.

2. Вержбицкий В.М. Численные методы. Линейная алгебра и нелинейные уравнения. – М.: Высш.шк., 2000. - 266 с.

3. Вержбицкий В.М. Численные методы. Математический анализ и обыкновенные дифференциальные уравнения. – М.: Высш.шк., 2001.-382 с.

4. Турчак Л.И., Плотников П.В. Основы численных методов:–М.: ФИЗМАТЛИТ, 2003. – 304 с.

5. Поршнев С.В. Вычислительная математика: курс лекций. – СПб.: БХВ-Петербург, 2004. – 320 с.

 


Дата добавления: 2018-05-12; просмотров: 533; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!