Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Найти определенные интеграл методом левых прямоугольников - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Найти определенные интеграл методом левых прямоугольников (Макросы/Sub)
Найти определенные интеграл методом левых прямоугольников
Aaron18 Дата: Среда, 10.04.2019, 18:43 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый вечер. Можете помочь решить задачу.Скрин условия задачи прикрепил.С этими методом я знаком, но меня что-то немного смущает точность.Можете помочь пожалуйста
К сообщению приложен файл: 2282867.png(67.6 Kb)


Сообщение отредактировал Aaron18 - Среда, 10.04.2019, 18:43
 
Ответить
СообщениеДобрый вечер. Можете помочь решить задачу.Скрин условия задачи прикрепил.С этими методом я знаком, но меня что-то немного смущает точность.Можете помочь пожалуйста

Автор - Aaron18
Дата добавления - 10.04.2019 в 18:43
_Boroda_ Дата: Среда, 10.04.2019, 19:56 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14916
Репутация: 5900 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Андрей, как раз для студентов вот написано http://www.excelworld.ru/forum/2-1593-1
Там есть 2 возможных пути, Вам нужно выбрать один из них


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеАндрей, как раз для студентов вот написано http://www.excelworld.ru/forum/2-1593-1
Там есть 2 возможных пути, Вам нужно выбрать один из них

Автор - _Boroda_
Дата добавления - 10.04.2019 в 19:56
Aaron18 Дата: Среда, 10.04.2019, 20:02 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Андрей, как раз для студентов вот написано http://www.excelworld.ru/forum/2-1593-1
Там есть 2 возможных пути, Вам нужно выбрать один из них

Я бы хотел, чтобы мне подсказали с решением,натолкнули на идею и т.д
 
Ответить
Сообщение
Андрей, как раз для студентов вот написано http://www.excelworld.ru/forum/2-1593-1
Там есть 2 возможных пути, Вам нужно выбрать один из них

Я бы хотел, чтобы мне подсказали с решением,натолкнули на идею и т.д

Автор - Aaron18
Дата добавления - 10.04.2019 в 20:02
_Boroda_ Дата: Среда, 10.04.2019, 20:38 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14916
Репутация: 5900 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ну хорошо, давайте так.
Алгоритм прямо по тексту задания
Все, что не совсем ясно - сначала в справку, затем в поиск и только если все равно не понятно, то спрашиваете с приложением ссылок на изученный материал
1. InputBox-ом спрашиваете у пользователя по очереди а, b и точность
1.1. k=2
2. Цикл Do-Loop с условием проверки (5) на Loop
3. Вычисляем d
3.1. Z1=Z
4. Цикл i от 0 до k-1
4.1. Вычисляем xi
4.2. Вычисляем yi
4.3. Проводим оценку интеграла Z
5. Сравниваем Z и Z1 (это в Loop), если больше точности, то k=k+1 продолжается (2)

Подождите, там написано, что все это в виде функции. Тогда не Sub, а Function, но сувать в функцию InputBox как-то не очень. Не, можно, но редко такой изврат встретишь. А в аргументы функции а, b и точность тоже не поставишь, в условии задачи четко написано, что они "должны запрашиваться". Ну ладно, пусть будет так, если им так хочется

Вот, собственно, и всё


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНу хорошо, давайте так.
Алгоритм прямо по тексту задания
Все, что не совсем ясно - сначала в справку, затем в поиск и только если все равно не понятно, то спрашиваете с приложением ссылок на изученный материал
1. InputBox-ом спрашиваете у пользователя по очереди а, b и точность
1.1. k=2
2. Цикл Do-Loop с условием проверки (5) на Loop
3. Вычисляем d
3.1. Z1=Z
4. Цикл i от 0 до k-1
4.1. Вычисляем xi
4.2. Вычисляем yi
4.3. Проводим оценку интеграла Z
5. Сравниваем Z и Z1 (это в Loop), если больше точности, то k=k+1 продолжается (2)

Подождите, там написано, что все это в виде функции. Тогда не Sub, а Function, но сувать в функцию InputBox как-то не очень. Не, можно, но редко такой изврат встретишь. А в аргументы функции а, b и точность тоже не поставишь, в условии задачи четко написано, что они "должны запрашиваться". Ну ладно, пусть будет так, если им так хочется

Вот, собственно, и всё

Автор - _Boroda_
Дата добавления - 10.04.2019 в 20:38
Aaron18 Дата: Среда, 10.04.2019, 21:44 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
3. Вычисляем d
3.1. Z1=Z

Значение Z мы пока не вычисляли и поэтому мы присваиваем Z1 по сути пустое значение.
Сделал подобное(скрин прикрепил).Но он работает некорректно
К сообщению приложен файл: 4496116.png(55.2 Kb)
 
Ответить
Сообщение
3. Вычисляем d
3.1. Z1=Z

Значение Z мы пока не вычисляли и поэтому мы присваиваем Z1 по сути пустое значение.
Сделал подобное(скрин прикрепил).Но он работает некорректно

Автор - Aaron18
Дата добавления - 10.04.2019 в 21:44
_Boroda_ Дата: Среда, 10.04.2019, 22:00 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14916
Репутация: 5900 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Конечно некорректно. Чему равно z-z1 при k=2? И там еще И k>2. Пробегитесь пошагово по макросу через F8 и все увидите сами
Не хотите работать с пустым z1, ну посчитайте его до цикла Do для k=0, а потом цикл по i не с 0, а с 1

И да, с картинками - это на форум по фотошопу


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКонечно некорректно. Чему равно z-z1 при k=2? И там еще И k>2. Пробегитесь пошагово по макросу через F8 и все увидите сами
Не хотите работать с пустым z1, ну посчитайте его до цикла Do для k=0, а потом цикл по i не с 0, а с 1

И да, с картинками - это на форум по фотошопу

Автор - _Boroda_
Дата добавления - 10.04.2019 в 22:00
Aaron18 Дата: Среда, 10.04.2019, 22:07 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Чему равно z-z1 при k=2?

Нам это по условию не нужно делать.
И там еще И k>2

При первом проходе Z1 будет равняться Z, и их разность дает 0,что собственно меньше нашей точности.
И да, с картинками - это на форум по фотошопу

За это прошу прощения
 
Ответить
Сообщение
Чему равно z-z1 при k=2?

Нам это по условию не нужно делать.
И там еще И k>2

При первом проходе Z1 будет равняться Z, и их разность дает 0,что собственно меньше нашей точности.
И да, с картинками - это на форум по фотошопу

За это прошу прощения

Автор - Aaron18
Дата добавления - 10.04.2019 в 22:07
_Boroda_ Дата: Среда, 10.04.2019, 22:14 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14916
Репутация: 5900 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Нам это по условию не нужно делать.

Однако Вы же делаете
При первом проходе Z1 будет равняться Z
Совершенно верно. Так зачем Вы их приравняли? Где я писал, что при первом проходе мы делаем z1=z ПОСЛЕ расчета z? Нет у меня такого, это вы уже сами придумали


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Нам это по условию не нужно делать.

Однако Вы же делаете
При первом проходе Z1 будет равняться Z
Совершенно верно. Так зачем Вы их приравняли? Где я писал, что при первом проходе мы делаем z1=z ПОСЛЕ расчета z? Нет у меня такого, это вы уже сами придумали

Автор - _Boroda_
Дата добавления - 10.04.2019 в 22:14
Aaron18 Дата: Среда, 10.04.2019, 22:25 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Совершенно верно. Так зачем Вы их приравняли? Где я писал, что при первом проходе мы делаем z1=z ПОСЛЕ расчета z? Нет у меня такого, это вы уже сами придумали

Можете помочь пожалуйста с решением.Я уже пару часов сижу мучаюсь над задачей
 
Ответить
Сообщение
Совершенно верно. Так зачем Вы их приравняли? Где я писал, что при первом проходе мы делаем z1=z ПОСЛЕ расчета z? Нет у меня такого, это вы уже сами придумали

Можете помочь пожалуйста с решением.Я уже пару часов сижу мучаюсь над задачей

Автор - Aaron18
Дата добавления - 10.04.2019 в 22:25
_Boroda_ Дата: Среда, 10.04.2019, 22:27 | Сообщение № 10
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14916
Репутация: 5900 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Дайте свой макрос, чтобы мне не сначала все писать, а только Ваш подправить

И почитайте про объявление переменных
"в" у Вас дабл, а "а" у Вас что? Вариант, а не Дабл

[offtop]И пара часов - это даже не смешно, вот если пару недель, тогда да[/offtop]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДайте свой макрос, чтобы мне не сначала все писать, а только Ваш подправить

И почитайте про объявление переменных
"в" у Вас дабл, а "а" у Вас что? Вариант, а не Дабл

[offtop]И пара часов - это даже не смешно, вот если пару недель, тогда да[/offtop]

Автор - _Boroda_
Дата добавления - 10.04.2019 в 22:27
Aaron18 Дата: Среда, 10.04.2019, 22:30 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
[vba]
Код
Sub s()
Dim k As Integer
Dim n, Z, Z1, d, x, y, s, a, b As Double
k = 2

a = InputBox("")
b = InputBox("")
n = InputBox("")
a = CDbl(a)
b = CDbl(b)
n = CDbl(n)

s = 0

Do
    d = (b - a) / k
    s = 0
    Z1 = Z
    For i = 0 To k - 1
        x = a + i * d
        y = Exp(x ^ 2)
        s = s + y
    Next i
    Z = s * d
    k = k + 1
Loop While Z - Z1 >= n
MsgBox Z1
MsgBox k
MsgBox Z
MsgBox s

End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Sub s()
Dim k As Integer
Dim n, Z, Z1, d, x, y, s, a, b As Double
k = 2

a = InputBox("")
b = InputBox("")
n = InputBox("")
a = CDbl(a)
b = CDbl(b)
n = CDbl(n)

s = 0

Do
    d = (b - a) / k
    s = 0
    Z1 = Z
    For i = 0 To k - 1
        x = a + i * d
        y = Exp(x ^ 2)
        s = s + y
    Next i
    Z = s * d
    k = k + 1
Loop While Z - Z1 >= n
MsgBox Z1
MsgBox k
MsgBox Z
MsgBox s

End Sub
[/vba]

Автор - Aaron18
Дата добавления - 10.04.2019 в 22:30
Aaron18 Дата: Среда, 10.04.2019, 22:49 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Вариант, а не Дабл

Где именно?
 
Ответить
Сообщение
Вариант, а не Дабл

Где именно?

Автор - Aaron18
Дата добавления - 10.04.2019 в 22:49
_Boroda_ Дата: Среда, 10.04.2019, 23:23 | Сообщение № 13
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14916
Репутация: 5900 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Здесь
Dim n, Z, Z1, d, x, y, s, a, b As Double
Почитайте https://docs.microsoft.com/ru-ru....riables (не путать с https://docs.microsoft.com/ru-ru....aration )
Код можно так написать
[vba]
Код
Sub tt()
    Dim k As Integer
    Dim n, Z, Z1, d, x, y, s, a, b As Double
'Димок сами потом перепишите, только почитайте сначала как это правильно делается
    On Error GoTo AAA
    a = CDbl(InputBox("Введите начало отрезка"))
    b = CDbl(InputBox("Введите окончание отрезка"))
    n = CDbl(InputBox("Введите точность"))
    On Error GoTo 0
    k = 2
    Z = Exp(a ^ 2)
    On Error GoTo BBB
    Do
        Z1 = Z
        d = (b - a) / k
        For i = 1 To k - 1
            y = y + Exp((a + i * d) ^ 2)
        Next i
        Z = y * d
        k = k + 1
        y = 0
    Loop While Z - Z1 >= n
    MsgBox "Интеграл равен " & Z
    Exit Sub
AAA: 'если введены не числа
    MsgBox "Ошибка ввода"
BBB: 'если получается очень много или очень мало
    MsgBox "Переполнение. Введите числа поменьше"
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЗдесь
Dim n, Z, Z1, d, x, y, s, a, b As Double
Почитайте https://docs.microsoft.com/ru-ru....riables (не путать с https://docs.microsoft.com/ru-ru....aration )
Код можно так написать
[vba]
Код
Sub tt()
    Dim k As Integer
    Dim n, Z, Z1, d, x, y, s, a, b As Double
'Димок сами потом перепишите, только почитайте сначала как это правильно делается
    On Error GoTo AAA
    a = CDbl(InputBox("Введите начало отрезка"))
    b = CDbl(InputBox("Введите окончание отрезка"))
    n = CDbl(InputBox("Введите точность"))
    On Error GoTo 0
    k = 2
    Z = Exp(a ^ 2)
    On Error GoTo BBB
    Do
        Z1 = Z
        d = (b - a) / k
        For i = 1 To k - 1
            y = y + Exp((a + i * d) ^ 2)
        Next i
        Z = y * d
        k = k + 1
        y = 0
    Loop While Z - Z1 >= n
    MsgBox "Интеграл равен " & Z
    Exit Sub
AAA: 'если введены не числа
    MsgBox "Ошибка ввода"
BBB: 'если получается очень много или очень мало
    MsgBox "Переполнение. Введите числа поменьше"
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 10.04.2019 в 23:23
Aaron18 Дата: Среда, 10.04.2019, 23:40 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Код можно так написать

Большое спасибо.И еще такой вопрос как можно избежать краша Excel из-за того,что я ввожу большие границы интеграла?
 
Ответить
Сообщение
Код можно так написать

Большое спасибо.И еще такой вопрос как можно избежать краша Excel из-за того,что я ввожу большие границы интеграла?

Автор - Aaron18
Дата добавления - 10.04.2019 в 23:40
_Boroda_ Дата: Четверг, 11.04.2019, 00:47 | Сообщение № 15
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14916
Репутация: 5900 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Можно заранее поставить ограничения на а и b, но вообще-то GoTo BBB как раз для этого и написано. У меня не крашится, задумывается и потом ругается "Переполнение. Введите числа поменьше"


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМожно заранее поставить ограничения на а и b, но вообще-то GoTo BBB как раз для этого и написано. У меня не крашится, задумывается и потом ругается "Переполнение. Введите числа поменьше"

Автор - _Boroda_
Дата добавления - 11.04.2019 в 00:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Найти определенные интеграл методом левых прямоугольников (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!