- •Н.А. Шевелев, т.Е. Мельникова
- •Содержание
- •1. Исследование колебаний систем с конечным числом степеней свободы
- •Порядок проведения работы:
- •2. Исследования колебаний систем с распределенными параметрами (изгибные колебания балки постоянного поперечного сечения)
- •Порядок проведения работы:
- •3. Метод парабол отыскания корней алгебраических и трансцендентных уравнений
- •Алгоритм метода парабол дан в виде блок-схемы (рис. 6).
- •4. Приближенные методы расчета колебаний
- •4.1 Дискретизация систем с распределенными параметрами
- •4.2. Простейшие приближенные формулы для оценки низшей собственной частоты
- •4.3. Метод Релея – Ритца.
- •4.4. Метод последовательных приближений (тематика курсовой работы).
- •Стробоскопический метод измерения частоты
Алгоритм метода парабол дан в виде блок-схемы (рис. 6).
ВЫЧИСЛЕНИЕ XM
по (6)
X0=
X1,
X1=
X2, X2=XM,F0=F1 F1=F2;F2=FM
Рис. 6. Блок – схема алгоритма метода парабол.
Программа численного решения нелинейного уравнения (21) методом парабол (алгоритм представлен на языке программирования PASCAL)
Const n=5;
ax:array [1..n,1..n] of real=((10,1,2,3,4),(1,9,-1,2,-3),
(2,-1,7,3,-5),(3,2,3,12,-1),(4,-3,-5,-1,15));
{=((5,1,-2,0,-2,5),(1,6,-3,2,0,6),(-2,-3,8,-5,-6,0),
(0,2,-5,5,1,-2),(2,0,-6,1,6,-3),(5,6,0,-2,-3,8));}
Var mi,tt,k,j,i,w,ic0,ic1,ic2,icm,minc:integer;
zx,x,x0,x1,x2,xm,d0,d1,d2,dm,f0,f1,f2,eps:real;
H1,H2,B2,C2,G2,GS,BM:real;
mas:array [1..100] of real;
ax1:array [1..n,1..n] of real;
label ler;
{Процедура приведения числа к виду }
procedure rain(Var dd1:real;Var e1:integer);
Var fi:integer;
begin
while abs(dd1)>1 do
begin
dd1:=dd1/16;
e1:=e1+4;
end;
while abs(dd1)<=0.0625 do
begin
dd1:=dd1*16;
e1:=e1-4;
end;
end;
{Процедура приведения матрицы к треугольному виду}
procedure matrix(xxx:real);
Var ix,jx,kx:integer;
tx:array [1..n,1..n] of real;
detA:real;
begin
For kx:=1 to n do
For ix:=1 to n do
ax1[kx,ix]:=ax[kx,ix];
For kx:=1 to n do
For ix:=1 to n do
tx[kx,ix]:=0;
For kx:=1 to n do
ax1[kx,kx]:=ax1[kx,kx]-xxx;
For kx:=1 to n-1 do
begin
For ix:=kx+1 to n do
begin
tx[ix,kx]:=ax1[ix,kx]/ax1[kx,kx];
For jx:=kx+1 to n do
ax1[ix,jx]:=ax1[ix,jx]-tx[ix,kx]*ax1[kx,jx];
end;
end;
end;
{Процедура расчета значения функции в точке xx}
procedure func(Var xx:real;Var dd:real;Var e:integer);
Var kx,ix,i1,jj:integer;
begin
e:=0;
i1:=0;
dd:=0;
If mi=1 then
begin
dd:=(xx-1)*(xx+100)*(xx-0.0001)*(xx+4567)*(xx+15);
rain(dd,e);
end;
If mi=2 then
begin
dd:=1;
matrix(xx);
for jj:=1 to n do
begin
dd:=dd*ax1[jj,jj];
rain(dd,e);
end;
end;
If i<>1 then
begin
If mi=1 then
begin
i1:=i-1;
For jj:=1 to i1 do
begin
dd:=dd/(xx-mas[jj]);
rain(dd,e);
end;
end;
end;
end;
begin
mi:=2;
k:=5;
If mi=2 then k:=n;
eps:=0.0000001;
xm:=0;
For i:=1 to k do
begin
If mi=1 then
begin
x1:=-2;
x2:=1;
xm:=0.5;
end;
If mi=2 then
begin
x1:=xm-1;
x2:=xm+i-1;
xm:=xm+2*i;
end;
func(x1,d1,ic1);
func(x2,d2,ic2);
j:=0;
repeat
begin
inc(j);
func(xm,dm,minc);
x0:=x1;
x1:=x2;
x2:=xm;
ic0:=ic1;
ic1:=ic2;
ic2:=minc;
d0:=d1;
d1:=d2;
d2:=dm;
minc:=0;
H1:=x1-x0;
H2:=x2-x1;
B2:=H2/H1;
C2:=1+B2;
{Отыскание минимального показателя b значения функции}
If (ic0<=ic1)and(ic0<=ic2) then minc:=ic0;
If (ic1<=ic0)and(ic1<=ic2) then minc:=ic1;
If (ic2<=ic0)and(ic2<=ic1) then minc:=ic2;
{Приведение значений функций к одному показателю b=minc}
f0:=d0; f1:=d1; f2:=d2;
For tt:=1 to ic0-minc do
f0:=f0*2;
For tt:=1 to ic1-minc do
f1:=f1*2;
For tt:=1 to ic2-minc do
f2:=f2*2;
{Реализация метода}
G2:=f0*B2*B2-f1*C2*C2+f2*(B2+C2);
GS:=sqrt(abs(G2*G2-4*f2*C2*B2*(f0*B2-f1*C2+f2)));
If G2<=0 then w:=-1
else w:=1;
BM:=(-2*f2*C2)/(G2+w*GS);
xm:=x2+BM*H2;
If xm=0 then goto ler;
end;
{Условия выхода из цикла итераций}
until (abs((x2-xm)/xm)<eps)or(j>=50);
ler:
writeln('I=',i,' j=',j,' xm=',xm:3:8,' F=',f2:3:6,' *2^(',minc,')');
zx:=sqrt(abs(xm));
writeln(i,'-ja sobstvennaja chastota = ',zx:4:6);
mas[i]:=xm;
end;
readln;
end.
Список идентификаторов:
mi – параметр выбора объекта расчета (1- аналитически заданная функция, 2 – квадратная матрица);
k - количество отыскиваемых корней;
i – счетчик, номер текущего корня;
j – счетчик, число итераций при определении корня уравнения;
xm – текущее значение zi на каждой итерации;
x0,x1,x2 – начальные приближения;
f0,f1,f2 – значения функции в трех точках;
mas – массив корней уравнений;
ax – заданная матрица;
ax1 – вспомогательная матрица-‘двойник’;
eps – точность определения корней;
dd – аналитически заданная функция.
Пример 1. Методом парабол отыскать корни уравнения
F(x) = (x-2)(x-2)(x-3)(x-0,001)(x-0,1).
Решение уравнения получено с использованием программы, описанной выше, с указанием вида функции (идентификатор dd) и значения параметра im = 1.
Результат вычислений – значение корней и количество итераций (j), необходимое для нахождения каждого корня.
Пример 2. Определить собственные значения матрицы А [4]:
Результаты расчета собственных значений:
λ1=1,655266·100; λ2=6,994838·100; λ3=9,365555·100:
λ4=1,580892·101; λ5=1,917542·101.
При вычислении значений функции f(z) используется подпрограмма «rain», которая представляет число в форме b = a·2k, где а – мантисса числа, заключенная в интервале [0.0625, 1.0]; k – показатель степени, кратный четырем.
Для работы непосредственно с функцией (пример1) такая процедура является лишней. Но опыт использования алгоритма показывал, что в основном приходится иметь дело с матрицами высоких порядков. Примером можнт служить метод конечных элементов [5]. Значение определителя может достичь очень больших порядков, превосходящих возможности ЭВМ даже с учетом нестандартной длины представления переменных. Поэтому процедура «rain» становится необходимой.
При решении примера 2 была использована подпрограмма вычисления определителя методом Гаусса с учетом процедуры «rain» [6].