2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 [Mathematica] Обратная функция
Сообщение20.05.2013, 23:15 
Помогите разобраться с обратной функцией в Mathematica.

Кривая задана на плоскости $\vec R = (x_1, x_2(x_1))$, необходимо найти $x_1(s)$ и $x_2(s)$ для известной $s(x_1)$, s -- длинна кривой.

$ds(x_1) = \sqrt{1+ \left( \frac{d x_2}{d x_1} \right)^2} d x_1$

Код:
x2[x1_] := (0.4 30 10^-3) Cosh[4.682 x1] + (30 10^-3)/(4.682) Sinh[4.682 x1];
s[x1_] := NIntegrate[Sqrt[1 + (D[x2[t], t])^2], {t, 0, x1}];
stotal = s[0.17];
X1[(x_)?NumericQ] :=   Block[{y}, y /. FindRoot[x == s[y], {y, 0, 0.17}]];
Plot[{x2[X1[t]]}, {t, 0, stotal}]


plot выдает ошибку, хоть и строит все правильно
Код:
NIntegrate::nlim: t = y is not a valid limit of integration. >>

 
 
 
 Re: [Mathematica] Обратная функция
Сообщение21.05.2013, 19:40 
Аватара пользователя
Это не Plot выдает ошибку, а FindRoot, а точнее даже NIntegrate, который используется в правой части уравнения. А все потому что, как написано в хэлпе: "FindRoot first localizes the values of all variables, then evaluates f with the variables being symbolic, and then repeatedly evaluates the result numerically." А NIntegrate нечисленных значений не допускает и ругается.

 
 
 
 Re: [Mathematica] Обратная функция
Сообщение21.05.2013, 22:43 
Да, конечно, спасибо, итого, нужно заменить s[x1_] на s[x1_?NumericQ]

Можно так же сделать другим способом:
Код:
int[x_] := NIntegrate[Cos[t], {t, 0, x}];
list1 = Table[-Pi/2 + Pi i/500, {i, 0, 500}];
list2 = Table[int[-Pi/2 + Pi i/500], {i, 0, 500}];
table = Transpose[{list1, list2}];
eg4direct = Interpolation[table]
eg4inverse = Interpolation[Transpose[{eg4direct[[4]][[3]], eg4direct[[3]][[1]]}]]
Plot[{Abs[(eg4inverse[t] - ArcSin[t])/ArcSin[t]]}, {t, -1, 1},
PlotRange -> Automatic, GridLines -> Automatic]

Первый способ на краях интервала лучше, но требует больше времени

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group