0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 4
1

Метод половинного деления, ошибка кода

31.01.2017, 16:39. Показов 1465. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, сломал всю голову - но не работает код, выдает ошибку - деление на ноль, все переменные указал.
Ткните пальцем - где ошибка.
Код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub lab6()
 
Dim x1, x2, f, E As Double
 
Pa = Range("C7").Value
Pb = Range("C8").Value
Tt = Range("C9").Value
Ra = Range("C10").Value
Rb = Range("C11").Value
E = Range("C12").Value
 
x1 = Ra: x2 = Rb
 
If Fun(x1) * Fun(x2) > 0 Then
 MsgBox "Функция в интревале (" & x1 & " - " & x2 & ") знака не меняет"
 Exit Sub
End If
 
Metka:
Rc = (x1 + x2) / 2
f = Fun(Rc)
If Abs(f) <= E Then
   Range("B15").Value = Rc
   Range("B16").Value = f
   Exit Sub
End If
 
If f * Fun(x1) < 0 Then x2 = Rc Else x1 = Rc
GoTo Metka
 
End Sub
 
Function Fun(Rc) As Double
Fun = (Pa - Pb) / Tt - 2 * Log(Rc / x1) - 1 + (Rc / x2) ^ 2
End Function
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2017, 16:39
Ответы с готовыми решениями:

Метод половинного деления
Методом половинного деления определить один из корней уравнения: x-(1/arctg(x))=0 с точностью...

Метод половинного деления, зависание
День добрый. Реализовал вот такой макрос решения уравнения методом половинного деления. Sub...

Метод половинного деления отрезка пополам для функции, заданной уравнением
Помогите, пожалуйста, если то-то знает как решить эту задачу на VBA (или другом языке...

Ошибка в коде (метод половинного деления)
Нашел похожие программы и по ним написал свою, но она работает некорректно. Требуется решить...

7
Модератор
Эксперт MS Access
11957 / 4825 / 779
Регистрация: 07.08.2010
Сообщений: 14,132
Записей в блоге: 4
31.01.2017, 16:43 2
попробуйте переставить строку и добавить строку option

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Option Explicit
Dim x1, x2, f, E As Double
dim pa.pb,tt,ra,rb,e
 
Sub lab6()
Pa = Range("C7").Value
Pb = Range("C8").Value
Tt = Range("C9").Value
Ra = Range("C10").Value
Rb = Range("C11").Value
E = Range("C12").Value
 
x1 = Ra: x2 = Rb
 
If Fun(x1) * Fun(x2) > 0 Then
MsgBox "Функция в интревале (" & x1 & " - " & x2 & ") знака не меняет"
Exit Sub
End If
 
Metka:
Rc = (x1 + x2) / 2
f = Fun(Rc)
If Abs(f) <= E Then
Range("B15").Value = Rc
Range("B16").Value = f
Exit Sub
End If
 
If f * Fun(x1) < 0 Then x2 = Rc Else x1 = Rc
GoTo Metka
 
End Sub
 
Function Fun(Rc) As Double
Fun = (Pa - Pb) / Tt - 2 * Log(Rc / x1) - 1 + (Rc / x2) ^ 2
End Function
0
6171 / 936 / 310
Регистрация: 25.02.2011
Сообщений: 1,367
Записей в блоге: 1
31.01.2017, 16:46 3
в функции Fun переменные Pa, Pb, Tt, x1, x2 не объявлены и не передаются (приравниваются к нулю)
соответственно при делении на нулевую переменную возникает ошибка
0
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 4
31.01.2017, 17:30  [ТС] 4
Глупый вопрос - как исправить ?

Добавлено через 42 секунды
первый вариант не работает

Добавлено через 15 минут
как передать переменные в функцию Fun?

Добавлено через 18 минут
ambiguous name detected: E
0
Модератор
Эксперт MS Access
11957 / 4825 / 779
Регистрация: 07.08.2010
Сообщений: 14,132
Записей в блоге: 4
31.01.2017, 17:50 5
Цитата Сообщение от zavic_001 Посмотреть сообщение
ambiguous name detected: E
Visual Basic
1
2
3
Option Explicit
Dim x1 As Double, x2 As Double, f As Double, E As Double
dim pa As Double,pb As Double,tt As Double,ra As Double,rb As Double
0
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 4
31.01.2017, 20:10  [ТС] 6
Visual Basic
1
2
3
4
5
6
7
Option Explicit
Dim Pa As Double, Pb As Double, Tt As Double, Ra As Double, Rb As Double
 
Sub lab6()
 
Dim x1 As Double, x2 As Double
Dim f As Double, E As Double
теперь ругается Compile error: variable not defined и подсвечивает Sub lab6()
0
Модератор
Эксперт MS Access
11957 / 4825 / 779
Регистрация: 07.08.2010
Сообщений: 14,132
Записей в блоге: 4
31.01.2017, 20:51 7
Лучший ответ Сообщение было отмечено zavic_001 как решение

Решение

Я НЕ ЗНАЮ, КАКИЕ ДАННЫЕ ВВОДИТЬ В ЛИСТ, А КОМПИЛЯЦИЯ УСПЕШНА
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Option Explicit
Dim x1 As Double, x2 As Double, f As Double, E As Double
Dim pa As Double, pb As Double, tt As Double
Dim ra As Double, rb As Double, RC As Double
 
Sub lab6()
pa = Range("C7").Value
pb = Range("C8").Value
tt = Range("C9").Value
ra = Range("C10").Value
rb = Range("C11").Value
E = Range("C12").Value
 
x1 = ra: x2 = rb
 
If Fun(x1) * Fun(x2) > 0 Then
MsgBox "Функция в интревале (" & x1 & " - " & x2 & ") знака не меняет"
Exit Sub
End If
 
Metka:
RC = (x1 + x2) / 2
f = Fun(RC)
If Abs(f) <= E Then
Range("B15").Value = RC
Range("B16").Value = f
Exit Sub
End If
 
If f * Fun(x1) < 0 Then x2 = RC Else x1 = RC
GoTo Metka
 
End Sub
 
Function Fun(RC) As Double
Fun = (pa - pb) / tt - 2 * Log(RC / x1) - 1 + (RC / x2) ^ 2
End Function
0
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 4
31.01.2017, 21:22  [ТС] 8
Да, запускается .... но уходит в бесконечный цикл....

Добавлено через 57 секунд
Исходные данные:
Pa = 1000 МПа
Pb = 290 МПа
st = 725 МПа
Ra = 100 мм
Rb = 200 мм
E= 0,000001

Расчетные данные:
Rc=
f=

Добавлено через 4 минуты
Ура!!! Заработало!
Заменил в строчке Fun = (pa - pb) / tt - 2 * Log(RC / x1) - 1 + (RC / x2) ^ 2
На Fun = (pa - pb) / tt - 2 * Log(RC / ra) - 1 + (RC / rb) ^ 2
Спасибо огромное !!!!
0
31.01.2017, 21:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2017, 21:22
Помогаю со студенческими работами здесь

Метод половинного деления, ошибка при вычислении
Здравствуйте, не могу понять почему выдает ошибку при попытки найти решение уравнения.

Метод половинного деления (метод деления отрезка пополам)
решите нелинейное уравнение в MS Exel. Метод пропорциональных отрезков (комбинированный метод хорд...

Аналитический метод, метод половинного деления и метод итераций
Всем привет! Задача такая 1. Определить аналитическим путем точное решение уравнения a*x+b=0 на...

Метод хорд, метод касательных, метод половинного деления
Ребят помогите пожалуйста. Задали тему курсовой &quot;Решение нелинейных уравнений (метод хорд, метод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru