Няшная / Говнокод #23350 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
#include<stdio.h>
#include<math.h>

int const n = 50, n1 = 40, m = n / n1;
double f1(double t, double x, double y, double z);
double f2(double t, double x, double y, double z);
double f3(double t, double x, double y, double z);

int main() {
	int i, k, ll;
	double k11, k12, k13, k21, k22, k23, k31, k32, k33, k14, k24, k34;
	double x, y, z, max;
	double res[12][n1 + 1], h, a, b, t, pi, xn, yn, zn;
	max = 1000.0; x = 3.0;
	y = -2.0; z = -3.0;
	a = 0.0; b = 1.0;
	h = (b - a) / double(n);

	k = 0; t = a;
	res[0][0] = t; res[1][0] = x;
	res[2][0] = y;
	res[3][0] = z;
	for (i = 1; i <= n; i++) {
		k11 = f1(t, x, y, z);
		k21 = f2(t, x, y, z);
		k31 = f3(t, x, y, z);
		k12 = f1(t + h / 2.0, x + h*k11 / 2.0, y + h*k21 / 2.0, z + h*k31 / 2.0);
		k22 = f2(t + h / 2.0, x + h*k11 / 2.0, y + h*k21 / 2.0, z + h*k31 / 2.0);
		k32 = f3(t + h / 2.0, x + h*k11 / 2.0, y + h*k21 / 2.0, z + h*k31 / 2.0);
		k13 = f1(t + h / 2.0, x + h*k12 / 2.0, y + h*k22 / 2.0, z + h*k32 / 2.0);
		k23 = f2(t + h / 2.0, x + h*k12 / 2.0, y + h*k22 / 2.0, z + h*k32 / 2.0);
		k33 = f3(t + h / 2.0, x + h*k12 / 2.0, y + h*k22 / 2.0, z + h*k32 / 2.0);
		k14 = f1(t + h, x + h*k13, y + h*k23, z + h*k33);
		k24 = f2(t + h, x + h*k13, y + h*k23, z + h*k33);
		k34 = f3(t + h, x + h*k13, y + h*k23, z + h*k33);
		x = x + h*(k11 + 2.0*(k12 + k13) + k14) / 6.0;
		y = y + h*(k21 + 2.0*(k22 + k23) + k24) / 6.0;
		z = z + h*(k31 + 2.0*(k32 + k33) + k34) / 6.0;
		t = t + h;
		if (i%m == 0) {
			k = k + 1;
			res[0][k] = t;
			res[1][k] = x;
			res[2][k] = y;
			res[3][k] = z;
			res[4][k] = exp(t) + exp(2.0*t) + exp(-t);
			res[5][k] = exp(t) - 3.0*exp(-t);
			res[6][k] = exp(t) + exp(2.0*t) - 5.0*exp(-t);
			res[7][k] = res[4][k] - res[1][k];
			res[8][k] = res[5][k] - res[2][k];
			res[9][k] = res[6][k] - res[3][k];
		} if (res[7][k] < 0.0) {
			res[7][k] = -res[7][k];
		}
		else if (res[8][k] < 0.0) {
			res[8][k] = -res[8][k];
		}
		else if (res[9][k] < 0.0) {
			res[9][k] = -res[9][k];
		}
		res[10][k] = res[7][k] + res[8][k] + res[9][k];
	}

	ll = k;
	printf("k=%d\n", ll);
	for (i = 0; i <= ll; i++) {
		if (res[10][i] < max) max = res[10][i];
	} for (i = 0; i <= n1; i++) {
		printf("t=%.16lf\n", res[0][i]);
		printf("x=%.16lf x(exact)=%.16lf delta=%.16lf\n", res[1][k], res[4][k], res[1][k] - res[4][k]);
		printf("y=%.16lf y(exact)=%.16lf delta=%.16lf \n", res[2][k], res[5][k], res[2][k] - res[5][k]);
		printf("z=%.16lf z(exact)=%.16lf delta=%.16lf \n", res[3][k], res[6][k], res[3][k] - res[6][k]);
	}
	printf("result:\n");
	printf("t=%.16lf\n", res[0][n1]);
	printf("x=%.16lf x(exact)=%.16lf delta=%.16lf\n", res[1][n1], res[4][n1], res[1][n1] - res[4][n1]);
	printf("y=%.16lf y(exact)=%.16lf delta=%.16lf \n", res[2][n1], res[5][n1], res[2][n1] - res[5][n1]);
	printf("z=%.16lf z(exact)=%.16lf delta=%.16lf \n", res[3][n1], res[6][n1], res[3][n1] - res[6][n1]);
	printf("max norma|x|1=%.16lf \n", max / 3.0);

	system("pause");

	return 0;
}

double f1(double t, double x, double y, double z)
{
	return x + z - y;
}

double f2(double t, double x, double y, double z)
{
	return x + y - z;
}

double f3(double t, double x, double y, double z)
{
	return 2.0*x - y;
}

Кандидат физико-математических наук сделал методичку по предмету "Моделирование систем". Это он так описал алгоритм решения системы ОДУ методом Рунге-Кутты.

Запостил: mazazadah mazazadah, (Updated )

Комментарии (58) RSS

  • double f1(double t, double x, double y, double z)
    {
    	return x + z - y;
    }
    
    double f2(double t, double x, double y, double z)
    {
    	return x + y - z;
    }
    
    double f3(double t, double x, double y, double z)
    {
    	return 2.0*x - y;
    }


    1. Зачем для подобной фигни делать какие-либо функции, если можно просто написать операции сложения, вычитания и проч.?
    2. Зачем в сигнатурах этих функций имеется double t? Эта переменная t ни разу (ни в одной из этих функций) не используется
    3. А например в функции f3 помимо этого еще и переменная z никак не используется, нахрена она там?
    Ответить
    • постоновка скорее всего решение сестемы диферециальных уровнений
      y1' = f1(r, t)
      y2' = f2(r, t)
      y3' = f3(r, t)
      найти y1, y2, y3

      автор кондидат физик ему надо решать в пространстве времени много всего и уровнение Шредингера
      он знает что код нужно делать уневерсальным не хардкодить и вынес f1, f2, f3 как входные данные для алгоритма Рунге-Кутта
      Ответить
      • > код нужно делать уневерсальным не хардкодить
        Но один фиг хардкодит ришенее сестемы дефур в строках 46-48.
        Ответить
          • Да ну... Я же глупая лентяйка, которая играет в кружочки вместо того, чтобы заняться чем-то полезным.
            Ответить
              • Он недавно OSU упоминал, там, кажется, нужно катать кружочки.
                Ответить
                  • Выглядит как какая-то тоскливая скукотень, даже корованы грабить нельзя. Неужели затягивает?
                    Ответить
                    • Это для совсем упоротых анимуёбов, которые уже все аниме отсмотрели, мангу прочитали, по ранобе прошлись для общего развития, тохо уже не цепляет, как раньше. Что еще остается? Только пердолиться в круги под музыку.
                      Интересная закономерность – многие люди, далекие от анимублядства, считают анимублядский контент скучной хуйней. Оно и не мудрено – чем может аниме заинтересовать человека, у которого есть личная жизнь.
                      Ответить
                      • > анимублядства
                        К слову, там попадаются люди, которые пытаются играть только не-анимешные карты, ставят себе нарочито не-анимешные аватарки и всячески открещиваются от аниме...

                        Но мы то знаем, что они обречены.
                        Ответить
                    • > неужели затягивает
                      Ну там все факторы для этого есть - запас челленджа на годы, куча карт, PP-ськомерка и довольно милое комьюнити.
                      Ответить
                      • Я недавно купил себе Wolfenstein: New Order на немецком для аутентичности. Довольно забавно смотреть, как агент Блацкович материт нацистов на их родном языке, но через пару вечеров стрелялок мне опять стало скучно.
                        Ответить
                        • У тебя лимит терпения хоть в днях измеряется, а не минутах. Я вот не могу в развлечения уже от слова совсем T__T.
                          Ответить
                          • > не могу в развлечения
                            Ты развлекаешься языками для доказательства корректности кода :3
                            Ответить
                          • > Я вот не могу в развлечения уже от слова совсем

                            А чем ты тогда занимаешься? Я на курсере довольно много торчу (комбинаторика, тервер, статистика, алгоритмы, вот это всё. сейчас идёт довольно интересный курс про Эрлангенскую программу Клейна) или какие-нибудь полуолимпиадные задачки на эзотерических (не по местным меркам, конечно) языках решаю.
                            Ответить
                            • Ты прямо с выполнением всех упражнений это изучаешь, и добиваешься уровня владения? Похвально, если так.
                              Меня с таким уровнем детализации хватает только на медленное изучение Coq.
                              Ответить
                              • > Ты прямо с выполнением всех упражнений это изучаешь

                                Ну да. Кмк, упражнения и дедлайны – основная фича курсеры. Я много разных курсов пробовал смотреть, без дедлайнов и задач расслабляешься и забиваешь довольно быстро.

                                На курсере, конечно, не так хардкорно преподают, как в универе было (во многих курсах опускают доказательства, к примеру), но пользу вполне реально извлечь.

                                > медленное изучение Coq
                                Тоже всё хочу пройтись по Software Foundations, но как-то руки не доходят. Проблема как раз в том, что нужно себя организовать, чтобы делать это систематично. Большая часть свободного времени уходит на изучение Deutsche Sprache.
                                Ответить
                                • Меня от изучения новых разделов и повторения университетского курса математики пока отталкивает чортов перфекционизм. Пока качественно не научусь в доказательства, не хочу и приступать. Coq как ментальный костыль тут, конечно, не лучший выбор, но других альтернатив не вижу.
                                  После Software Foundations планирую высшую алгебру задрочить, курс в ниверситете был плох, в основном на уровне практических приложений, используемых в физике.
                                  Ответить
                            • > курсере
                              Кстати, а как там с качеством лекций/материалов/заданий?
                              Ответить
                              • Некоторые курсы довольно посредственны, но есть очень качественные. Мне больше всего нравятся курсы Stanford University (Cryptography, Algorithms [Tim Roughgarden шикарен], Mining Massive Datasets, который прикрыли) и МФТИ (те, что с Райгородским или Савватеевым).
                                Ответить
                            • Кстати, а ты курсы в платном или бесплатном режиме проходишь?

                              Я правильно понимаю, что в бесплатном нет проверки заданий и нинужного серта, но всё остальное доступно?
                              Ответить
                              • Слышал там можно прикинуться малоимущим, или кем-то подобным, и получить доступ к платным курсам бесплатно. Они верят на слово. Сам не проверял, да и вообще на этот сайт не заходил, ибо он для анскилов.
                                Ответить
                              • > ты курсы в платном или бесплатном режиме проходишь?

                                В бесплатном, конечно. В бесплатном есть всё тоже самое, что в платном, только без заверенного сертификата (сертификат можно купить уже после завершения курса, сомневаюсь, что в "проплаченном" курсе что-то отличается). Проверка заданий в бесплатном моде тоже есть, она бывает двух видов:
                                - полностью автоматическая, когда нужно ввести ответ в тесте (~95% всех заданий) или отправить сорцы, на которые натравливается куча автотестов;
                                - задания, оцениваемые сокурсниками: сабмитишь код / картинку / текст, который ревьюят трое рандомных сокурсников.

                                Я ещё не видел, чтобы преподы какие-то задания вручную проверяли, не скейлится этот подход на тысячи людей. На форумах разве что живые ассистенты отвечают, если у людей вопросы к заданиям возникают.
                                Ответить
                                • > Проверка заданий в бесплатном моде тоже есть
                                  Походу, мне курс попался неудачный - тесты внутри видео и в конце уроков работают, а вот в конце модуля предлагает только "upgrade to submit".
                                  Ответить
                                • Бля, уже 2 ошибки в тестах зарепортил. Теперь точно обойдутся без бабла. Хотя сам курс няшный 🙁
                                  Ответить
                                    • > Что за курс?
                                      А, да набор курсов по аналоговой электронике от института грузии джорджии.
                                      Ответить
                                      • зачем тебе аналоговая электроника?

                                        ты хочешь делать теплый ламповый звук или собирать аналоговые компьютеры?
                                        Ответить
                                        • > зачем тебе аналоговая электроника?
                                          Вай нот? Даже если не делать чисто аналоговые приёмнички/усилители, всё равно остаётся сопряжение с внешним миром, а он аналоговый.
                                          Ответить
                    • Минутка оффтопика: Медленные Лапки Борманда vs Тоскливая Скукотень:

                      https://yadi.sk/i/yTq03QuM3NYMoe

                      З.Ы. Клаву, к сожалению, не получилось в поле зрения камеры упихать.
                      Ответить
                      • Покажи рисуночки. Или планшет купил, чтобы в осу играть?
                        Ответить
                        • > Покажи рисуночки.
                          Няшко-наброски в mypaint'е просят, чтобы я их не показывал. Когда-нибудь потом.

                          > купил, чтобы в осу играть
                          Не, для оски я только клаву взял (просто повод подвернулся, так то механику давно хотелось).
                          Ответить
                      • Одному ученику-осузадроту я сломал жизнь, предложив пройти U.N Owen Was Her (в простонародье - тема Фландре Скарлет). У него где-то полгода ушло.
                        Ответить
                        • > ученику
                          > предложив пройти
                          За автомат на экзамене?

                          З.Ы. /np'шни мапку.
                          Ответить
                          • Да, почти. Трудно мешать восьмиклассникам гаматься на учебных компах, приходится изобретать грязные трюки.

                            Я не осуёб и не умею.
                            Ответить
                            • > Я не осуёб и не умею.
                              Ну ты же тогда её как-то нашёл, чтобы предложить ему пройти... Хотя бы версия с клоунами или одна из обычных? Какой год стоял на дворе?

                              З.Ы. Забей, я не пройду - походу все карты на эту песню пиздецовые, а я олдмаппинг очень слабо читаю.
                              Ответить
                              • Прошлый декабрь это был вроде. Он банально нашёл мапу по названию трека.
                                Ответить
                        • Вспомнил про этот тред и пасснул версию этой песенки с клоунами. Мой мир никогда не будет прежним...
                          Ответить
                        • На этой карте надо всего 11 раз в секунду нажимать, но, как видишь, левая лапка даже с такой ерундой не справляется 🙁
                          Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8