Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Vba_расчеты

.pdf
Скачиваний:
33
Добавлен:
17.05.2015
Размер:
1.73 Mб
Скачать
5,22E 05

2. Решение в Excel нелинейного уравнения

2.1.Встроенные и дополнительные средства решения

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

Пример 2.1. Найти с относительной погрешностью 0,001 корень урав-

нения x3 x2 0.1 0 на отрезке x [0; 2] .

 

 

 

 

 

 

 

 

 

Для решения примера поместим в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

B

 

ячейки A1 и B1 надписи «Аргумент»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и «Функция», присвоим (используя

 

1

 

Аргумент

 

 

Функция

 

Формулы, Присвоить имя) ячейкам

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

=x^3-x^2-0,1

 

 

 

 

 

 

 

 

 

 

A2 и B2 соответственно имена «x» и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

Рис. 2.1.

f

 

«f». Введѐм в ячейку B2 формулу

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(см. рис. 2.1). Далее можно выбрать: Данные, Анализ «что-если», Подбор параметра и искать решение в ручном режиме. Но мы воспользуемся следующим макросом и запустим его:

Sub Primer_2_1()

Application.MaxChange = 0.0001 ' «относительная погрешность»

Range("x") = 0. ' назначаем начальное приближение res = Range("f").GoalSeek(Goal:=0, ChangingCell:=Range("x")) Debug.Print res, Range("x"), Range("f")

End Sub

В результате в окне отладки получим:

True 1,08491453462296 -5,22345966353088E-05,

т.е. True – корень уравнения найден, он равен x 1,0849145, а «погрешность» относится не к корню, а к значению функции при найденном значении x.

Но если мы зададим лучшее начальное приближение (ближе к искомому корню) Range("x") = 0.65 , то результат окажется таков:

False -14355105132924,3 -2,95814278232263E+39,

31

т.е. корень не найден, подбор параметра не сработал. Не стоит особо удивляться этому, ведь это средство не предназначено специально для решения уравнений. Заметим, что если (см. задачу 1 в разделе 2.2) менять x на интервале (0; 1) с шагом dx=0.1, то при x=0.7, …,1.0 подбор параметра сработает, и корень будет найден.

Существуют надѐжные методы численного решения нелинейного уравнения f (x) 0 , один простой метод из их числа - метод деления отрезка пополам. Его идея состоит в том, что отрезок, на концах которого непрерывная функция имеет противоположные знаки, делится пополам, а затем выбирается для дальнейшего поиска та его половина, на концах которой знаки функции различные. Процесс деления продолжается до тех пор, пока отрезок [ , ], содержащий корень, не станет достаточно малым. Представим алгоритм данного метода на VBA в виде функции:

Function DOP(Fch As String, Xch As String, a As Double, _

b As Double, Optional Eps As Double = 0.0001, Optional Iter As _ Integer) As Boolean

' Fch, Xch - имена ячеек с функцией и аргументом,

'a, b - левая и правая границы отрезка, содержащего корень,

'Eps - относительная погрешность корня |X* - X|/max(|a|,|b|)<Eps,

'Iter - число выполненных приближений.

Dim Alpha As Double, Beta As Double, Sfa As Integer Dim X As Double, D As Double, Mabs As Double

'++++++++++++++++++++++++++++++++++++++++++++++++ Range(Xch) = a

Sfa = Sgn(Range(Fch)) Range(Xch) = b

Bisec = False

If Sfa * Sgn(Range(Fch)) > 0 Then Exit Function Mabs = IIf(Abs(a) > Abs(b), Abs(a), Abs(b))

If Eps < 0.000000000000005 Then Eps = 0.000000000000005 Alpha = a: Beta = b

Iter = 0

32

Do: Iter = Iter + 1

D = 0.5 * (Beta - Alpha)

X = Alpha + D: Range(Xch) = X

If D / Mabs <= Eps Then Exit Do

Select Case Sgn(Range(Fch)) * Sfa

Case 1: Alpha = X

'

f(X)*Sfa > 0

Case 0:

Exit Do

 

' f(X) = 0

Case -1:

Beta = X

'

f(X)*Sfa < 0

End Select

Loop

DOP = True

End Function

Sub Primer_2_2( ) ' Пример 2.2. Запускающая процедура:

Dim N As Integer

res = DOP(Fch:="f", Xch:="x", a:=0, b:=3, Eps:=0.0001, Iter:=N) Debug.Print res, Range("x"), Range("f"), N

End Sub

Результат, выведенный в окно отладки:

True

1,08489990234375

-7,21528830126827E-05

14

2.2. Задачи

1. Найти

с относительной

погрешностью 0,001 корень уравнения

x3 x2

0.1 0 подбором параметра и методом половинного деле-

ния на отрезке x [a; 2]

для a=0; 0.1; …0.7. Сравнить полученные

результаты.

2.Цилиндрическая автоцистерна для перевозки жидкости имеет в сечении форму эллипса с полуосями: a=1м, b=0.75м. Длина L цистерны составляет 4м. Цистерна установлена горизонтально. Для тарировки мерного щупа, опускаемого вдоль вертикальной оси эллипса, рассчи-

тать высоту h уровня налитой жидкости для объѐма V через каждые 0.5 м3 объѐма V. Построить график зависимости высоты h уровня от объѐма V. Указание. Зависимость объѐма V жидкости, налитой в

33

I (V )
. Для сравнения

цистерну, от высоты h уровня жидкости выражается формулой:

V(h) ab arccos hb 1 a hb 1 (2b h) h L

построить в одних и тех же осях (с одинаковым масштабом единиц) графики зависимостей h(V), V(h) и h(h).

3.Ёмкость для хранения жидкости имеет форму сферы с радиусом R=1 м. Для тарировки мерного щупа, опускаемого по малой оси эл-

липсоида, рассчитать высоту h уровня налитой жидкости для объѐма V через каждые 0.1 м3 объѐма V. Построить график зависимости высоты h уровня от объѐма V. Указание. Зависимость объѐма V жидкости, налитой в ѐмкость, от высоты h уровня жидкости выражается

формулой:

V(h)

h2

3R h . Для сравнения построить в одних и

 

 

3

 

тех же осях (с одинаковым масштабом единиц) графики зависимо-

стей h(V), V(h) и h(h).

4.Ёмкость для жидкости имеет форму, полученную вращением обра-

зующей r ln(1 z) [м] вокруг вертикальной оси oz . Высота ѐмкости 0,99 м. Для тарировки мерного щупа, опускаемого по оси oz ,

рассчитать высоту h уровня налитой жидкости для объѐма V через каждые 0.1 м3 объѐма V. Построить график зависимости высоты h уровня от объѐма V. Указание. Зависимость объѐма V жидкости, на-

литой в ѐмкость, от высоты h уровня жидкости выражается формулой: V(h) (1 z) ln(1 z) z . Для сравнения построить в одних и тех же осях (с одинаковым масштабом единиц) графики зависимо-

стей h(V), V(h) и h(h).

5. Рассчитать зависимость от температуры T [300 oK; 400 oK] тока I , проходящего через диод, при прямом включении источника ЭДС E 1 в . Принять, что диод моделируется последовательно соединѐнными резистором (выражающим объѐмное сопротивление RS ) и управляемым источником тока , для которого

 

 

V

 

T

 

 

Eg

 

 

 

 

 

 

 

 

 

1

 

 

T

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I(V,T) Is(T) (eVT (T ) N 1) , а Is(T) IS e Tnom

VT (T ) N

 

 

 

 

 

 

 

 

 

 

 

 

 

Tnom

где RS 1 ом ,

VT(T) 8.614 10 5 T в ,

N 1.4 ,

Tnom 300 oК ,

XTI

N ,

IS 10 14 А ,

34

Eg 1.11эв, XTI 3.

Указание. Напряжение на источнике тока равно: V E RS I(V,T) .

6.Асинхронный мотор вращает колесо воздуходувки. Рассчитать зависимость числа оборотов n и величину скольжения s ротора мотора

от относительной величины

R Rротора подключенного к ротору

добавочного сопротивления

R , если известны: зависимость крутя-

щего момента Mк (н·м) колеса от n (об/мин) Mк 2 10 5 n2 0.2 ;

зависимость крутящего момента Mк (н·м) мотора от и величины

скольжения s n0 n n ( n0

- синхронное число оборотов ротора):

 

 

s

 

 

 

sm 1

 

sm 0.1.

Mк 200

 

 

 

 

 

 

,

n0 1000об / мин ,

 

 

s

 

sm 1

 

 

 

 

7.Рассчитать зависимость максимальной скорости v движения автомобиля на прямой передаче с двигателем внутреннего сгорания от

угла

подъѐма

участка трассы

с параметром

сопротивления

0 cos sin .

Удельную тягу

автомобиля

принять равной

T v 3 v 10 v 10 1 н / кг . Силу сопротивления движению вычис-

лять по формуле F cos sin m g c S v2 / 2. В расчетах при-

нять:

масса автомобиля m 2000кг ,

ускорение свободного падения

g 9.81 м/ сек2 , коэффициенты

сопротивления 0 0.08, с 0.1,

площадь поперечного сечения

автомобиля S 1.96 м2 , плотность

воздуха

1.24 кг / м3

. Расчѐт выполнить для

o o

 

[0 ;18 ] , а изме-

нение скорости ограничить диапазоном v 50/ 3.6 м/ сек;115/ 3.6 м/ сек .

8. Решить задачу 5 для автомобиля с двигателем, удельная тяга которого (на прямой передаче) изменяется по закону

T v 3 v10 0.2 v10 3 н / кг .

35

3. Представление данных в виде графиков и диаграмм 3.1. Построение графиков

Построение в Excel графика функции Y Y(X) по значениям Yi в

равноотстоящих точках Xi [a, b] отрезка [a, b] изменения аргумента выполняется следующим образом: выделяют столбец значений Yi , а затем используют цепочку вызовов Вставка, Диаграммы, График. При этом график будет построен не на шкале аргумента X , а на шкале индексов (номеров точек). Чтобы придать этой шкале вид оси аргумента X , меняют подпись горизонтальной оси, подставляя в еѐ диапазон числа из столбца X . Полученная картинка будет соответствовать графику Y Y(X) для однозначной функции при равноотстоящих значениях Xi .

В общем случае, когда график строится по массивам точек Xi и Yi ,

следует использовать точеные диаграммы. Рассмотрим их применение при решении следующей задачи.

Пример 3.1. Построить график функции Y F(X), заданной формулой «=X/КОРЕНЬ(1 + X ^ 2)» в ячейке B2. Для запоминания значений аргумента X, изменяющегося от -2 до +2 с шагом 0,1 , использовать ячейку A2.

Решение примера 3.1 начнѐм с оформления ячеек на рабочем листе: введѐм в ячейки A1 и B1 соответственно символы X и F, а ячейкам A2 и B2 присвоим имена X и F (выбрав предварительно Формулы на ленте). Введѐм формулу в ячейку B2. Оформим вычисление значений аргументов и функции в виде следующего макроса:

Sub PutXF()

 

 

Const N As Integer = 40

' Число подинтервалов на [a; b]=[-2; 2].

H = (2 - (-2)) / N

 

' Шаг по аргументу X.

For i = 0 To N

 

' Начало цикла по точкам графика.

X = -2 + H * i

' Значение аргумента X

Range("X") = X

' переслать в ячейку A2 для вычисления F(X) в B2

Cells(i + 3, 1) = X

' и переслать в ячейку i+3 строки столбца A.

Cells(i + 3, 2) = Cells(2, 2)

' Скопировать значение F(X) в

 

 

' ячейку строки i+3 столбца B.

Next i

 

' Конец цикла по точкам графика.

 

 

36

End Sub

После исполнения макроса выделим заполненный числами диапазон

A3:B43 и выполним цепочку Вставка, Диаграммы, Точечная (с гладки-

ми кривыми) – на диаграмме должен появиться график (см. рис. 3.1).

Рис. 3.1.

3.2. Изображение плоских параметрических кривых

Точечные диаграммы (ТД) идеально подходят для изображения плоских параметрических кривых – кривых, X(t),Y(t)-координаты которых зависят от значения параметра t . Кривые r r( ) , заданные в полярных координатах, также могут рассматриваться как параметрические (с параметром ), если принять, что X r( ) cos( ), Y r( ) sin( ) . Рассмотрим построение таких кривых на следующем примере.

Пример 3.2. Изобразить на точечной диаграмме Excel полярные кривые r 20 a cos2 sin2 , [0, 2 ], /36, при каждом из значений параметра a 60,40, 20,0 .

Решение примера 3.2. Вычисление Xi , Yi -координат кривых выполним в макросе, и разместим координаты в столбцах A и B таблицы Excel, а значение параметра a будем выводить в столбец C в строку со значениями координат первой точки каждой кривой. Учтѐм особенность построения гладкий кривых (см. рис. 3.2) - координаты каждой последующей кривой (новой кривой, строящейся независимо от предыдущей) отделяются пустой строкой от координат предыдущей кривой.

37

Sub Rose()

 

' Решение примера 3.2.

Const N As Long = 36

' Число точек на кривой.

Const pi As Single = 3.1415927

 

 

i = 1

 

' Номер строки для выводимых координат.

For a = 60 To 0 Step -20

' Цикл по параметру a

Cells(i, 3) = a

 

' Запись в ячейку Excel значения параметра.

For fi = 0 To 2 * pi + pi / N / 2 Step pi / N

' Цикл по углу fi

r = Abs(20 + a * Abs(Cos(fi) ^ 2 - Sin(fi) ^ 2))

x = r * Cos(fi): Cells(i, 1) = x

' Запись в ячейки Excel

y = r * Sin(fi):

Cells(i, 2) = y

'

x и y – координат.

i = i + 1

' Номер следующей строки для вывода координат.

Next fi

 

 

 

 

i = i + 1 ' Для пропуска строки после вывода координат кривой

Next a

 

 

 

 

Call GR("A1:B" & i - 2)

' Обращение к процедуре построения ТД

End Sub

 

 

' с передачей в неѐ диапазона ячеек "A1:B295".

Sub GR(rng As String)

' Построение Точечной Диаграммы (ТД).

ActiveSheet.Shapes.AddChart.Select ActiveChart.SetSourceData Source:=Range(rng)

ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ' Тип ТД. ActiveChart.PlotArea.Select

ActiveChart.SetSourceData Source:=Range(rng)

End Sub

38

Рис. 3.2. Результат решения примера 3.2

3.3. Задачи

Варианты 1–10. Рассчитать x,y-координаты точек кривых (заданных в параметрической форме) для параметра t, изменяющегося на отрезке [tнач; t кон] с шагом t, при каждом из указанных значений a.

 

 

 

 

 

Таблица 3.1

 

 

 

 

 

Параметрическая кривая

Значения аргумента

Значение a

 

 

 

tнач ;

tкон ;

t

 

 

 

 

 

 

 

 

 

1

x(t) acos(t)

0;

2 ;

/36

30; 40; ... 60

 

 

y(t) (a / 2)sin(t)

 

 

 

 

 

 

 

 

 

 

 

 

2

x(t) sin( a t)

0;

2 ;

/72

1; 2; ... 4

 

 

y(t) (1/ 2)sin(4t)

 

 

 

 

 

 

 

 

 

 

 

 

3

x(t) 40(t asin(t))

0;

2 ;

/36

1;0.75; ..0.25

 

 

y(t) 40(1 acos(t))

 

 

 

 

 

 

 

 

 

 

 

 

4

x(t) 80cos(t)

0;

2 ;

/36

0; /8; ... /2

 

 

y(t) 50sin(t a)

 

 

 

 

 

 

 

 

 

 

 

 

5

x(t) 40cos(t) 20acos(2t)

0;

2 ;

/72

0.5; 1.0; ..2.0

 

 

y(t) 40sin(t) 20asin(2t)

 

 

 

 

 

 

 

 

 

 

 

 

6

x(t) 45cos(t) 15acos(3t)

0;

2 ;

/72

0.5; 1.0; ..2.0

 

 

y(t) 45sin(t) 15asin(3t)

 

 

 

 

 

 

 

 

 

 

 

 

7

x(t) 60cos(t) 15acos(4t)

0;

2 ;

/72

0; 0.5; ... 2.0

 

 

y(t) 60sin(t) 15asin(4t)

 

 

 

 

 

 

 

 

 

 

 

 

8

x(t) 20a(2 cos(t))

0;

2 ;

/36

0.5; 1.0; ..3.0

 

 

y(t) 20asin(t)

 

 

 

 

 

 

 

 

 

 

 

 

9

x(t) (120 20a)cos(t) 20a

0;

2 ;

/36

0; 1; ... 4

 

 

y(t) 2 (120 20a)sin(t)

 

 

 

 

 

 

3

 

 

 

 

 

10

x(t) (4 a)t (12 3a)t2

0;

1;

0.02

0; 7.5; ... 30

 

 

(2a 8) t3

 

 

 

 

 

 

y(t) (4 a)(1 t)t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

39

 

 

 

 

Варианты 11–20. Рассчитать координаты точек кривых (заданных в полярных координатах) для полярного угла , изменяющегося на отрезке [ нач; кон] с шагом , при каждом из указанных значений a.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.2

 

 

 

 

 

 

 

 

 

 

 

 

Кривая в полярных

Значения аргумента

Значение a

 

координатах

нач ;

кон ;

 

 

 

11

r a

 

 

 

 

 

 

0;

2 ;

/36

5; 7.5; ... 15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

r 30cos a

0;

2 ;

/36

10; 25; ... 70

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r a

 

 

 

 

 

 

 

– /4;

/4;

/36

 

 

13

2cos2

80;

70; ... 50

 

 

 

 

 

 

 

 

 

 

 

 

 

14

r asin 2

0;

2 ;

/36

50;

60; ... 80

 

 

 

 

 

 

 

 

 

 

 

15

r

 

a 20 | cos2 sin2 |

 

0;

2 ;

/36

0;

20; ... 60

 

 

 

 

 

 

 

 

 

 

 

 

16

r asin3

0;

;

/36

80;

70; ... 50

 

 

 

 

 

 

 

 

 

 

17

r

 

20 a | cos2 sin2 |

 

0;

2 ;

/36

60;

40; ... 0

 

 

 

 

 

 

 

 

 

 

 

 

18

 

 

 

 

 

 

 

 

 

 

0;

2 ;

/36

20;

40; ... 80

r a /

cos4 sin4

19

 

 

 

 

 

 

 

 

 

 

0;

2 ;

/36

80;

60; ... 20

r a / 4

 

cos4 sin4

20

r a(cos 1)

0;

2 ;

/36

20;

40; ... 80

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Контрольные значения, вычисленные при 2-ом значении аргумента и 1-ом значении параметра a.

 

 

 

 

 

Таблица 3.3

 

 

 

 

 

 

X*

Y*

X*

Y*

1

.298858E+02

.130734E+01

11

.434672E+00

.380289E–01

2

.436194E–01

.868241E–01

12

.397341E+02

.347628E+01

3

.442879E–02

.152212E+00

13

.361155E+02

–.303045E+02

 

 

 

 

 

 

4

.796956E+02

.435779E+01

14

.864937E+01

.756722E+00

 

 

 

 

 

 

5

.499239E+02

.873218E+00

15

.196212E+02

.171663E+01

 

 

 

 

 

 

6

.523930E+02

.983926E+00

16

.206267E+02

.180461E+01

 

 

 

 

 

 

7

.599429E+02

.261716E+01

17

.787875E+02

.689301E+01

 

 

 

 

 

 

8

.299619E+02

.871557E+00

18

.200758E+02

.175641E+01

 

 

 

 

 

 

9

.119543E+03

.697246E+01

19

.799988E+02

.699899E+01

 

 

 

 

 

 

10

.847360E–01

.784000E–01

20

.397720E+02

.347960E+01

 

 

 

 

 

 

 

 

40

 

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]