Расчет ELP с помощью Sage

Сегодня я покажу небольшой пример решения уравнения с помощью open source системы Sage, которая позиционируется как открытая альтернатива Magma, Maple, Mathematica, MATLAB. Система может работать в режиме интерпретатора, открывать готовые файлы, использоваться в Python коде и т.п.. Кроме того, есть облачная версия – cloud.sagemath.com, что, пожалуй, самый удобный вариант:

 

01-worksheet

 

Если не вдаваться в предметную область (а про нее здесь можно почитать здесь или копия здесь), то нужно было решить несложное, но очень громоздкое уравнение. Есть вот такой набор выражений:

1c0950

Обозначения я упростил, post = APostRx, iol = IOLe, l = ALo.
Данные K (k), L (l), IOL (iol), V (v) — взяты из примера в статье.

Код для Sage:

var ('a, b, c, iol, x, l, k, v, post, elp')
eq1 = 1336/(1000/(1000/post-v)+k)==x
eq2 = a==iol
eq3 = b==-1*iol*(l+x)
eq4 = c==1336*(l-x)+iol*x*l
eq5 = elp==(-1*b-sqrt(b*b-4*a*c))/(2*a)

solns = solve([eq1,eq2,eq3,eq4,eq5,iol==22.5,l==22.48,k==46.685*0.98765431,v==12,post==-0.5],a,b,c,iol,x,l,k,v,post,elp,solution_dict=True)
print [[s[elp].n(30)] for s in solns]

solns = solve([eq1,eq2,eq3,eq4,eq5,iol==22.5,l==22.48,k==46.685*0.98765431,v==12,elp==5.4891738],a,b,c,iol,x,l,k,v,post,elp,solution_dict=True)
print [[s[post].n(30)] for s in solns]

В данном примере сначала рассчитывается эффективная позиция линзы из данных о рефракции, ИОЛ, кератометрии и т.п., а потом идет пример обратного расчета – зная эффективную позицию линзы (например измеренную с помощью UBM) вычисляется рефракция, которая должна быть при данном положении ИОЛ:

sage:
[[5.4891738]]
[[-0.50000008]]

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

Ваш e-mail не будет опубликован.