|
Помощь/совет новичку
|
|||
---|---|---|---|
#18+
Здравствуйте. Хотел решить с виду простую задачку методом итераций с помощью VB, т.к. изучал его один семестр лет 12 назад. Скачал VB 2010, думал, что сразу все вспомню. Но у меня ничего не вышло. Может, кто подскажет, в чем собака зарыта. Порылся в нете, все примеры с операторами Do Loop Until. Но свой пример как-то с их помощью не могу оформить. Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim S, D, GHA1, D1, A1, GHA2, D2, A2 As Decimal S = TextBox1.Text D = TextBox2.Text GHA1 = TextBox3.Text D1 = TextBox4.Text A1 = TextBox5.Text GHA2 = TextBox6.Text D2 = TextBox7.Text A2 = TextBox8.Text Dim F(0 To 1000) As Decimal Dim L(0 To 1000) As Decimal For i = 1 To 1000 F(0) = S L(i) = Math.Acos((Math.Sin(A1) - Math.Sin(F(i - 1)) * Math.Sin(D1)) / (Math.Cos(F(i - 1)) * Math.Cos(D1))) - GHA1 Dim N, O, P As Decimal N = Math.Sin(D2) O = Math.Cos(D2) * Math.Cos(GHA1 + L(i)) P = Math.Sin(A2) F(i) = Math.Asin(P / (N ^ 2 + O ^ 2) ^ 0.5) - Math.Atan(O / N) If Math.Abs(F(i) - F(i - 1)) < 0.003 And Math.Abs(L(i) - L(i - 1)) < 0.003 Then TextBox9.Text = F(i) TextBox10.Text = L(i) End If If Math.Abs(F(i) - F(i - 1)) < 0.003 And Math.Abs(L(i) - L(i - 1)) < 0.003 Then GoTo 41 End If Next 41: End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub End Class ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2017, 20:06 |
|
Помощь/совет новичку
|
|||
---|---|---|---|
#18+
Виноват. Сперва задал вопрос, а потом прочитал, что тут не задают вопросы по VB.NET. Может, все же кто-то что-то да посоветует. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2017, 20:13 |
|
Помощь/совет новичку
|
|||
---|---|---|---|
#18+
Из советов: 1) Правильно оформляйте сообщения. Для кода используйте тег SRC, а для проверки - кнопку "Просмотр". 2) Формулируйте задачу. В Вашем случае - полную постановку задачи на программирование (со всеми формулами) и выбранный путь решения. 3) Комментируйте свой код так, чтобы любой понял, что, где, как и почему делается. 4) Структурируйте код, чтобы он соответствовал логике, не объединяйте два элементарных действия в одном операторе. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2017, 20:17 |
|
Помощь/совет новичку
|
|||
---|---|---|---|
#18+
Виноват, исправлюсь. Простите, но как-то кратко описать задачу и алгоритм не получилось. Задача такова, что необходимо найти φ и λ (это широта и долгота на Земле) из нижеприведенной системы нелинейных трансцендентных уравнений. sin ho1 = sin φ sin δ1 + cos φ cos δ1 cos(tгр1* + λ) sin ho2 = sin φ sin δ2 + cos φ cos δ2 cos(tгр2* + λ). Решал в Maple, но хочется в Бейсике, чтобы был красивый интерфейс. Думал, что просто получится. ho1,2 ; δ1,2 ; tгр1,2 постоянные. Имеются предполагаемые (счислимые) φс;λс, от которых начинаем приближение. Геометрически итерационный процесс выглядит следующим образом. У каждой последующей точки уточняется одна из координат, например, сначала широта φ, а потом долгота λ. Сначала подставляю в систему счислимую широту φ= φс и, тем самым, нахожу первое приближение долготы λ= λ1. cos(tгр1* +λ1)= (sin ho1- sin φс sin δ1)/(cos φс cos δ1). Откуда λ1=(tгр1* +λ1)- tгр1* . Таким образом, найдена первая итеративная точка M1(φс;λ1). Подставляю найденную долготу λ= λ1 во второе уравнение и нахожу первое приближение широты φ= φ1 sin ho2= sin φ1 sin δ2+ cos φ1 cos δ2 cos(tгр2* +λ1). Уравнение содержит искомую широту φ1 под знаками sin и cos, поэтому его удобно переписать в виде А sin φ1+В1 cos φ1=N, где А= sin δ2=const; В1= cos δ2 cos(tгр2* +λ1); N= sin ho2= const. Для решения данного уравнения возможно использовать различные способы; наиболее удобен - тригонометрический, в итоге найдем приближение широты φ1 tgθ1=B1/A, sin(φ1+ θ1)= N/ (A^2 + B1^2)^0.5 φ1=( φ1+ θ1)- θ1. Таким образом, найдена вторая итерационная точка M2(φ1;λ1). Второе приближение долготы λ= λ2 нахожу по аналогичным формулам, где вместо φс стоит итерация широты φ =φ1 cos(tгр2* EW2)=( sin ho1- sinφ1 sin δ1)/( cos φ1 cos δ1). Откуда λ2=(tгр1* +λ2) - tгр1*. Таким образом, найдена третья итерационная точка: M3(φ1;λ2). Второе приближение широты φ =φ2 находим по аналогичным формулам. Вместо широты φ1 подставлена искомая широта φ2 , а вместо λ1 - найденная долгота λ2 A sin φ1+В2 cos φ1= N, где B2 = cosδ2 cos(tгр2* +λ2). tg θ2= B2/А, sin(φ2+ θ2)= N/ (A^2 + B2^2)^0.5, φ2=( φ2+ θ2)- θ2. Таким образом найдена четвертая итерационная точка M4(φ2;λ2). По изложенной методике весь итерационный вычислительный цикл продолжается, например, до тех пор, пока одновременно не выполнится | φi+1 - φi | ≤ε, | λ i+1 - λ i | ≤ε, где критерий ε = 0.2'. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2017, 20:51 |
|
Помощь/совет новичку
|
|||
---|---|---|---|
#18+
Код с пояснениями Код: vbnet 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. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2017, 21:02 |
|
Помощь/совет новичку
|
|||
---|---|---|---|
#18+
авторСтруктурируйте код, чтобы он соответствовал логике, не объединяйте два элементарных действия в одном операторе. Простите, тут я не понял, т.к. не программист я. Просто я взял учебник Брайана Сайлера по VB 6, который купил, когда был студентом. Написал код, как мне это виделось. А он не работает. Выдает значения, но они неверные. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2017, 21:10 |
|
Помощь/совет новичку
|
|||
---|---|---|---|
#18+
Sandy83Геометрически итерационный процесс выглядит следующим образом. У каждой последующей точки уточняется одна из координат, например, сначала широта φ, а потом долгота λ.Так, а где Ваше сжимающее отображение целевой функции? И это у Вас не метод итераций, а метод последовательных приближений получается. Ну или покоординатного спуска, если считать целевой функцией смещение расчётной точки от исходного приближения на текущей итерации. В любом случае - отделите мух от котлет. Реализуйте все эти тригонометрические расчёты в виде отдельных имеющих реальный смысл функций (расчёт такой=-то величины по значениям таких-то), чтобы они не захламляли текст собственно процедуры поиска.Ну и реализуйте функцию расчёта невязки (отклонения). И должна у Вас остаться чистая процедура поиска минимума, оптимума или нуля, применимая к чему угодно, лишь бы механика процесса была правильно реализована соответствующими функциями. И тогда отлаживаться станет легко и приятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2017, 21:44 |
|
Помощь/совет новичку
|
|||
---|---|---|---|
#18+
Прошли праздники, появилось свободное время. Я почитал, нарисовал алгоритм, написал по нему программу. Она вроде бы считает, но результаты не те. Или я снова все неправильно сделал? Код: vbnet 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. 38. 39. 40. 41.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2017, 15:34 |
|
|
start [/forum/topic.php?fid=60&fpage=16&tid=2155287]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
others: | 306ms |
total: | 487ms |
0 / 0 |