есть уравнение: y=-0,000000000004054333*x^6+0,000000005379052*x^5-0,000002929692*x^4+0,0008371415*x^3-0,1319086*x^2+10,75147*x-332,5882 y=9.9888 Мне нужно записать уравнение в Visual Basic чтобы получить x . Подскажите пожалуйста как записать это уравнение x=....??? должно получиться 260. Я просто не знаю как отсюда вычленить x
есть уравнение: y=-0,000000000004054333*x^6+0,000000005379052*x^5-0,000002929692*x^4+0,0008371415*x^3-0,1319086*x^2+10,75147*x-332,5882 y=9.9888 Мне нужно записать уравнение в Visual Basic чтобы получить x . Подскажите пожалуйста как записать это уравнение x=....??? должно получиться 260. Я просто не знаю как отсюда вычленить x vdekameron
Сообщение отредактировал vdekameron - Вторник, 09.12.2014, 08:29
vdekameron, конкретизируйте вопрос. Записать уравнение для икс не получится - уравнения от пятой степени и выше аналитически не разрешимы. Тут нужны численные методы. У вашего уравнения два действительных корня, ни один из которых не равен 260 - легко убедиться подстановкой.
vdekameron, конкретизируйте вопрос. Записать уравнение для икс не получится - уравнения от пятой степени и выше аналитически не разрешимы. Тут нужны численные методы. У вашего уравнения два действительных корня, ни один из которых не равен 260 - легко убедиться подстановкой.buchlotnik
SLAVICK, buchlotnik, Спасибо за понимание. Тему сменил. Не знаю как по-другому написать. Решение этого уравнения есть - 260. SLAVICK, прав. Я тоже его нашел через решение уравнений в интернете. Но мне нужно его записать в VB. Т.е. повторюсь у меня будет известен игрик и мне по этому уравнению нужно будет постоянно находить икс.
SLAVICK, buchlotnik, Спасибо за понимание. Тему сменил. Не знаю как по-другому написать. Решение этого уравнения есть - 260. SLAVICK, прав. Я тоже его нашел через решение уравнений в интернете. Но мне нужно его записать в VB. Т.е. повторюсь у меня будет известен игрик и мне по этому уравнению нужно будет постоянно находить икс.vdekameron
Как то не отследил название. Думал уже переименовали Через поиск решения сделал на быструю руку. Чтобы проверить решение. В вба тоже не сложно переложить. Ну пока тема не испралена не будубуду Пока писал сообщение тему переименовали Через пару часов если никто не опередит попробую сделать в вбавба
Как то не отследил название. Думал уже переименовали Через поиск решения сделал на быструю руку. Чтобы проверить решение. В вба тоже не сложно переложить. Ну пока тема не испралена не будубуду Пока писал сообщение тему переименовали Через пару часов если никто не опередит попробую сделать в вбавба SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Вторник, 09.12.2014, 08:39
SLAVICK, Спасибо большое. Вчера создал тему и искал решение в интернете. Сегодня как увидел что нужно переименовать, сразу сделала. В VB будет x=(ход решения)=260 , а если будет два решения я думаю разберусь как выбрать то, что мне нужно. Еще поищу сейчас , может сам что-то нарою.
SLAVICK, Спасибо большое. Вчера создал тему и искал решение в интернете. Сегодня как увидел что нужно переименовать, сразу сделала. В VB будет x=(ход решения)=260 , а если будет два решения я думаю разберусь как выбрать то, что мне нужно. Еще поищу сейчас , может сам что-то нарою. vdekameron
vdekameron, с 260 - я вчера погорячился - один из коэффициентов не с тем знаком ввел. Собственно предлагаю решение методом Ньютона/ Оно реализовано в модуле. Принцип работы - см. итерации на самом листе. В зависимости от начального приближения находим один или второй корень Кстати, корни вышли: 82,1271196 260,0010917
[vba]
Код
Sub newton() x = [j6].Value s = -332.5882 - [k6].Value Do x1 = x y = -4.054333E-12 * x ^ 6 + 0.000000005379052 * x ^ 5 - 0.000002929692 * x ^ 4 + 0.0008371415 * x ^ 3 - 0.1319086 * x ^ 2 + 10.75147 * x + s y_ = -6 * 4.054333E-12 * x ^ 5 + 5 * 0.000000005379052 * x ^ 4 - 4 * 0.000002929692 * x ^ 3 + 3 * 0.0008371415 * x ^ 2 - 2 * 0.1319086 * x + 10.75147 x = x - y / y_ i = i + 1 DoEvents Loop While Abs(x1 - x) > 10 ^ (-8) [k7].Value = (x1 + x) / 2 End Sub
[/vba]
vdekameron, с 260 - я вчера погорячился - один из коэффициентов не с тем знаком ввел. Собственно предлагаю решение методом Ньютона/ Оно реализовано в модуле. Принцип работы - см. итерации на самом листе. В зависимости от начального приближения находим один или второй корень Кстати, корни вышли: 82,1271196 260,0010917
[vba]
Код
Sub newton() x = [j6].Value s = -332.5882 - [k6].Value Do x1 = x y = -4.054333E-12 * x ^ 6 + 0.000000005379052 * x ^ 5 - 0.000002929692 * x ^ 4 + 0.0008371415 * x ^ 3 - 0.1319086 * x ^ 2 + 10.75147 * x + s y_ = -6 * 4.054333E-12 * x ^ 5 + 5 * 0.000000005379052 * x ^ 4 - 4 * 0.000002929692 * x ^ 3 + 3 * 0.0008371415 * x ^ 2 - 2 * 0.1319086 * x + 10.75147 x = x - y / y_ i = i + 1 DoEvents Loop While Abs(x1 - x) > 10 ^ (-8) [k7].Value = (x1 + x) / 2 End Sub
Люди, неужели ничего проще нет((( buchlotnik, Исходя из этого решения искомая величина получается 82,13. А мне нужна 260. И как мне потом объяснить VB какая именно величина мне нужна.
Люди, неужели ничего проще нет((( buchlotnik, Исходя из этого решения искомая величина получается 82,13. А мне нужна 260. И как мне потом объяснить VB какая именно величина мне нужна.vdekameron
Ой спасибо всем за потраченное время!!!! Хочу похвастаться как выкрутился из этой ситуации. Просто когда строил график поменял местами икс и игрик. График от этого не поменялся, зато функция по линии тренда вышла та, которая и надо. Она имеет вид y=0,001969327*x^6-0,1682957*x^5+5,933678*x^4-110,5317*x^3+1149,016*x^2-6350,822*x+14921,57 Но теперь уже по сути я вместо икса подставляю значения игрик, соответственно искомая величина икс)))
Ой спасибо всем за потраченное время!!!! Хочу похвастаться как выкрутился из этой ситуации. Просто когда строил график поменял местами икс и игрик. График от этого не поменялся, зато функция по линии тренда вышла та, которая и надо. Она имеет вид y=0,001969327*x^6-0,1682957*x^5+5,933678*x^4-110,5317*x^3+1149,016*x^2-6350,822*x+14921,57 Но теперь уже по сути я вместо икса подставляю значения игрик, соответственно искомая величина икс))) vdekameron
В зависимости от начального приближения находим один или второй корень
В файле-примере задайте начальное значение для x = 500 и пересчитайте. Получите, что надо.
Цитата
неужели ничего проще нет
да куда уж проще. Или как предложил SLAVICK через поиск решения - но и в этом случае, в зависимости от исходного значения x вы будете получать разный результат 82 или 260 А так в принципе если уравнение имеет два действительных решения, выбирать только одно как-то странно.
vdekameron, перечитайте внимательномоё сообщение
Цитата
В зависимости от начального приближения находим один или второй корень
В файле-примере задайте начальное значение для x = 500 и пересчитайте. Получите, что надо.
Цитата
неужели ничего проще нет
да куда уж проще. Или как предложил SLAVICK через поиск решения - но и в этом случае, в зависимости от исходного значения x вы будете получать разный результат 82 или 260 А так в принципе если уравнение имеет два действительных решения, выбирать только одно как-то странно.buchlotnik