Поиск решения обратной задачи ============================= Решение сводится к поиску параметров модельных функций распределения частиц по размерам. Подгонка осуществляется по данным кривой степени поляризации на нескольких длинах волн. Используемые функции: 1. Степенное расределение (1 параметр) 2. Логнормальное распределение (2 параметра) 3. Двумодальное логнормальное рапределение (5 параметров) Программа использует базу данных матриц мюллера для случайно ориентированных частиц высокой степени несферичности. Добавляя новые файлы с расчетами - можно добиться повышения функциональности программы. Насртройка работы программы осуществляется через конфигурационный файл config.ini Этот файл иимеет формат записи NAMEELIST-ов на языке Фортран 2003 (gfortran 7) В файле 2 блока: &HEADER NFILES=42, // Количество файлов базы частиц NWAVELENGTHS=2, // Количество длин волн NEXPS=18, // количество экспериментальных точек по углу NPARS=5, // количество параметров оптимизации OPTALG=40, // алгоритм оптимизации / CONFIG FILES= "NDB/comb/orig/addadb_m1=1.350+0.000_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.350+0.005_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.350+0.010_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.350+0.015_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.350+0.020_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.350+0.025_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.350+0.030_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.400+0.000_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.400+0.005_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.400+0.010_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.400+0.015_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.400+0.020_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.400+0.025_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.400+0.030_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.450+0.000_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.450+0.005_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.450+0.010_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.450+0.015_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.450+0.020_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.450+0.025_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.450+0.030_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.500+0.000_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.500+0.005_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.500+0.010_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.500+0.015_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.500+0.020_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.500+0.025_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.500+0.030_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.550+0.000_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.550+0.005_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.550+0.010_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.550+0.015_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.550+0.020_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.550+0.025_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.550+0.030_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.600+0.000_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.600+0.005_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.600+0.010_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.600+0.015_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.600+0.020_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.600+0.025_m2=1.000+0.000_scale=1-avg.nc", "NDB/comb/orig/addadb_m1=1.600+0.030_m2=1.000+0.000_scale=1-avg.nc", // Собственно относительный путь к файлам баз данных частиц EXPDATAFNAME="aresult_2017-10-24.txt", // файл с данными поляризации (эксперимент) это таблица, где первый столбец - угол рассеяния WAVELENGTH=0.670, 0.750, // длины волн X0= 0.1, 2.5, 0.5, 2.5, 0.9, // начальные параметры решения LB= 0.08, 1.5, 0.31, 1.5, 0.00001, // нижняя граница параметров решения UB= 0.3, 2.8, 0.9, 2.8, 0.99999, // верхняя граница параметров решения R0= 0.05, // левая граница диапазона (мкм) для которого ищется решение R1= 10.0, // правая граница диапазона (мкм) для которого ищется решение XTOL= 1.0D-5, // критерий остановки (если относительное изменение параметра меньше чем xtol) FTOL= 1.0D-3, // критерий остановки (если относительное изменение функции меньше чем ftol) IDISTRTYPE=2, // номер распределения (модели) SAVEFDIST= "fdist.dat", // имя файла, куда сохраняем функцию распределения (результирующая) SAVEPOL= "pol.dat", // имя файла, куда сохраняем кривую поляризации (расчетную) для первой длины волны / Вывод программы: ~~~~~~~~~~~~~~~~ Исходные данные EXPERIMENTAL DATA ================= THTA 1 2 11.0 0.012 0.018 18.9 0.028 0.027 27.5 0.049 0.050 36.2 0.088 0.097 45.1 0.138 0.151 53.9 0.212 0.212 62.9 0.304 0.299 71.8 0.395 0.392 80.7 0.480 0.476 89.7 0.537 0.529 98.6 0.529 0.532 107.5 0.492 0.480 116.4 0.405 0.399 125.4 0.306 0.297 134.2 0.198 0.196 143.1 0.109 0.131 151.9 0.051 0.054 160.5 0.030 0.031 STARTING APPROXIMATION OF A FUNCTION ==================================== Показатель предлмления и RMSE для найденого решения No. ( Re(M) Im(M)) RMSE E ================================= 1. ( 1.350 0.000) 12.150 3 2. ( 1.350 0.005) 12.248 3 3. ( 1.350 0.010) 12.323 3 4. ( 1.350 0.015) 12.570 3 5. ( 1.350 0.020) 12.620 3 6. ( 1.350 0.025) 12.538 3 7. ( 1.350 0.030) 12.076 3 8. ( 1.400 0.000) 10.173 3 9. ( 1.400 0.005) 10.304 3 10. ( 1.400 0.010) 10.438 3 11. ( 1.400 0.015) 10.528 3 12. ( 1.400 0.020) 10.595 3 13. ( 1.400 0.025) 10.719 3 14. ( 1.400 0.030) 10.480 3 15. ( 1.450 0.000) 8.694 3 16. ( 1.450 0.005) 8.700 3 17. ( 1.450 0.010) 8.880 3 18. ( 1.450 0.015) 8.982 3 19. ( 1.450 0.020) 9.125 3 20. ( 1.450 0.025) 9.222 3 21. ( 1.450 0.030) 9.117 3 22. ( 1.500 0.000) 7.409 3 23. ( 1.500 0.005) 7.544 3 24. ( 1.500 0.010) 7.716 3 25. ( 1.500 0.015) 7.890 3 26. ( 1.500 0.020) 8.011 3 27. ( 1.500 0.025) 8.129 3 28. ( 1.500 0.030) 7.811 3 29. ( 1.550 0.000) 6.371 3 30. ( 1.550 0.005) 6.558 3 31. ( 1.550 0.010) 6.729 3 32. ( 1.550 0.015) 6.680 3 33. ( 1.550 0.020) 7.034 3 34. ( 1.550 0.025) 7.251 3 35. ( 1.550 0.030) 7.496 3 36. ( 1.600 0.000) 5.583 3 37. ( 1.600 0.005) 10.960 3 38. ( 1.600 0.010) 5.928 3 39. ( 1.600 0.015) 6.105 3 40. ( 1.600 0.020) 30.721 3 41. ( 1.600 0.025) 6.433 3 42. ( 1.600 0.030) 6.078 3 OPTIMAL RESULT ============== Наилучщее решение (RMSE) RMSE = 5.58 Параметры распределения X=[ 0.142177 1.505192 0.327202 1.556055 0.999676] Номер решения в списке выше Index of solution: 36 Дополнительные зависимости программы: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. netcdf4.5 с интерфейсом для фортрана (на Mac желательно ставить brew install netcdf c поддержкой фортаран) 2. openblas или blas или lapack (brew install openblas) 3. nlopt. ставить из дистрибутива, размещенного на сайте https://nlopt.readthedocs.io/en/latest/