Может в Mathcad есть еще какое-нибудь чудесные средства для поиска "мест деления на ноль".
Если их нет, то их можно придумать:

Модератор: Admin
Вы не совсем разглядели мощь метода
Код: Выделить всё
Mathcad 15.0 (M010 [MC15_M010_20110622])
Кроме того, я убрал кое-что в коде функции j2(), где под корнем, в отличие от j1(), был вызов функции Ф(). Именно на неё ругался решатель диффура, но я не знаю конечно правильно ли это.
Код: Выделить всё
> c:=(m1sh,m1)->(m1sh/m1*cH2O+(m1-m1sh)/m1*cair):
> dmtk1:=(m1sh,m1,T1)->Thet(m1sh(t)+V1*muH2O*(alpha1*T1(t)^(betta1-1)-gamma1/T1(t))/R1)*(diff(m1sh(t),t)+V1*muH2O*(gamma1*diff(T1(t),t)/T1(t)^2+alpha1*T1(t)^(betta1-2)*diff(T1(t),t)*(betta1-1))/R1):
> f1:=diff(m1sh(t),t)=j0-j1(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))*m1sh(t)/m1(t)+j2(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))*m2sh(t)/m2(t)-dmtk1(m1sh,m1,T1):
> dmtk2:=(m2sh,m2,T2)->Thet(m2sh(t)+V2*muH2O*(alpha1*T2(t)^(betta1-1)-gamma1/T2(t))/R1)*(diff(m2sh(t),t)+V2*muH2O*(gamma1*diff(T2(t),t)/T2(t)^2+alpha1*T2(t)^(betta1-2)*diff(T2(t),t)*(betta1-1))/R1):
> f2:=diff(m2sh(t),t)=j1(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))*m1sh(t)/m1(t)-j2(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))*m2sh(t)/m2(t)-dmtk2(m2sh,m2,T2):
> f3:=diff(m1(t),t)=j0-j1(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))+j2(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))-dmtk1(m1sh,m1,T1):
> f4:=diff(m2(t),t)=j1(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))-j2(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))-dmtk2(m2sh,m2,T2):
> f5:=diff(c(m1sh(t),m1(t))*m1(t)*T1(t),t)=j0*cH2O*T0-c(m1sh(t),m1(t))*T1(t)*j1(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))+c(m2sh(t),m2(t))*T2(t)*j2(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))+dmtk1(m1sh,m1,T1)*(lambda1-cH2O*T1(t)):
> f6:=diff(c(m2sh(t),m2(t))*m2(t)*T2(t),t)=c(m1sh(t),m1(t))*T1(t)*j1(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))-c(m2sh(t),m2(t))*T2(t)*j2(m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t))+dmtk1(m2sh,m2,T2)*(lambda1-cH2O*T2(t)):
> muH2O:=0.018: muair:=0.029:R1:=8.3:V1:=1000:V2:=60000:gamma1:=10^(-20):alpha1:=6*10^(-
> 24):betta1:=11:cair:=1000:cH2O:=2000:A0:=1:T0:=400:S1:=2:j0:=3:g0:=9.8:lambda1:=2000000:
> Thet:=(x) -> Heaviside(x):F1:=(x) -> abs(x)*Heaviside(x):
> #Thet:=(x) -> `if`(x<0,0,1):F1:=(x) -> `if`(x<0,0,x):
> #Thet:=(x) -> 1/(exp(-50*x)+1):F1:=(x) -> abs(x)*Thet(x):
> deltaP2:=(m1sh,m2sh,m1,m2,T1,T2)->2*(m2/V2)*S1^2*R1*((m1sh/muH2O+(m1-m1sh)/muair)/V1*T1-
> (m2sh/muH2O+(m2-m2sh)/muair)/V2*T2):
> deltaP1:=(m1sh,m2sh,m1,m2,T1,T2)->2*(m1/V1)*S1^2*R1*((m1sh/muH2O+(m1-m1sh)/muair)/V1*T1-
> (m2sh/muH2O+(m2-m2sh)/muair)/V2*T2):
> j1:=(m1sh,m2sh,m1,m2,T1,T2)->sqrt(deltaP1(m1sh,m2sh,m1,m2,T1,T2)+2*m1/V1*A0*(m2/V2-m1/V1)
> *g0*S1^(5/2)):
> j2:=(m1sh,m2sh,m1,m2,T1,T2)->sqrt(F1(-deltaP2(m1sh,m2sh,m1,m2,T1,T2)+2*m1/V1*A0*(m2/V2-
> m1/V1)*g0*S1^(5/2))):
> j1(m1sh,m2sh,m1,m2,T1,T2):
> sys:=f1,f2,f3,f4,f5,f6:
> func:={m1sh(t),m2sh(t),m1(t),m2(t),T1(t),T2(t)}:
> m0:=m1sh(0)=0,m2sh(0)=0,m1(0)=1200,m2(0)=72000,T1(0)=350,T2(0)=350:
> ans:=dsolve({sys,m0},func,numeric,range=0..1);
uni писал(а):Я выше ошибся, не bp(), а pause(). bp() - так называлась моя аналогичная отладочная функция для моего отладчика.
П.С. Очень редко кто использует вывод отладочной информации таким образом. Такой метод использования отладочных возможностей Mathcad нужно брать на вооружение. Вряд ли даже на форуме PTC где-то можно увидеть такое.
Код: Выделить всё
Примечание (см. стр. 13): В Mathcad 13 появились средства отладки программ: панель Debug, функции trace и pause, - но реальной помощи в отладке программ они не оказывают.
После того как получены "живые" графики становится уже проще, т.к. наглядно виден процесс работы решателя. Далее уже всё зависит от теории и про "физичность" тут нужно думать самостоятельно.