Уравнение с неизвестной функцией

Форум пользователей пакета Mathematica

Модератор: Admin

Dlacier
Сообщения: 45
Зарегистрирован: Чт фев 18, 2010 3:24 pm

Уравнение с неизвестной функцией

Сообщение Dlacier » Вс мар 18, 2012 10:52 pm

Доброго времени суток!
Имеется уравнение вида

Изображение

где необходимо найти f(x,y) как функцию от двух переменных.
Вопрос собственно возможно ли это сделать в Mathematica и как.
Спасибо.
"Чтобы правильно задать вопрос, нужно знать большую часть ответа".

volmike
Сообщения: 235
Зарегистрирован: Вс июн 05, 2005 2:42 pm
Контактная информация:

Сообщение volmike » Пн мар 19, 2012 12:03 pm

Данное уравнение в приниципе не может быть аналитически решено относительно f. Возможно численное нахождение f при заданных x и y.
Лысый пешему не конный...

Dlacier
Сообщения: 45
Зарегистрирован: Чт фев 18, 2010 3:24 pm

Сообщение Dlacier » Пн мар 19, 2012 1:47 pm

Аналитически не может быть, это я знаю, спасибо :)
Возможно ли численно как-то решить, принимая, что х меняется от 0 до 1, у от 0.75 до 5.
В МатКаде это сделать можно, но как это сделать в Mathematica (если возможно), пока не представляю.
"Чтобы правильно задать вопрос, нужно знать большую часть ответа".

volmike
Сообщения: 235
Зарегистрирован: Вс июн 05, 2005 2:42 pm
Контактная информация:

Сообщение volmike » Пн мар 19, 2012 3:30 pm

Получить все возможные тройки решения {x,y,f} (включая и комплексные значения f) можно, например, так:

Код: Выделить всё

g[x_, y_] := {x, y, #} & /@ (f /.
     NSolve[(0.5^2/(1 - 3*f)^2)^(
        1/3)*(-x/1.1*(1 - 3*f)/f + y/3.418*0.5^2/f^2) == 1, f]);
x = Table[i, {i, 0, 1, 0.1}];
y = Table[j, {j, 0.75, 5, 0.25}];
solutions = Partition[Flatten[Outer[g, x, y]], 3]


Здесь x=0,0.1,0.2,...,1, а y=0.75,1.0,1.25,....,5.
Лысый пешему не конный...

алексей_алексей
Сообщения: 1776
Зарегистрирован: Вс май 01, 2005 9:02 pm

Сообщение алексей_алексей » Чт мар 22, 2012 7:40 pm

x,y выражаются через f, то есть вместо f= f(x,y), получается x=x(f),y=y(f). Не знаю, может быть, так будет легче…

Dlacier
Сообщения: 45
Зарегистрирован: Чт фев 18, 2010 3:24 pm

Сообщение Dlacier » Пт мар 23, 2012 12:22 pm

Спасибо большое!:)
Скажите, а можно ли сделать так, чтоб выводились только действительные значения?
"Чтобы правильно задать вопрос, нужно знать большую часть ответа".

volmike
Сообщения: 235
Зарегистрирован: Вс июн 05, 2005 2:42 pm
Контактная информация:

Сообщение volmike » Пт мар 23, 2012 2:15 pm

Dlacier писал(а):Спасибо большое!:)
Скажите, а можно ли сделать так, чтоб выводились только действительные значения?


Из решения выбираем лишь те тройки чисел, у которых последний элемент вещественное число.

Код: Выделить всё

g[x_, y_] := {x, y, #} & /@ (f /.
     NSolve[(0.5^2/(1 - 3*f)^2)^(1/3)*(-x/1.1*(1 - 3*f)/f +
          y/3.418*0.5^2/f^2) == 1, f]);
x = Table[i, {i, 0, 1, 0.1}];
y = Table[j, {j, 0.75, 5, 0.25}];
solutions =
 Select[Partition[Flatten[Outer[g, x, y]], 3],
  Element[Last[#], Reals] &]
Лысый пешему не конный...

Dlacier
Сообщения: 45
Зарегистрирован: Чт фев 18, 2010 3:24 pm

Сообщение Dlacier » Пт мар 23, 2012 3:06 pm

Спасибо!
И еще :oops: нужны лишь положительные значения функции f..
"Чтобы правильно задать вопрос, нужно знать большую часть ответа".

volmike
Сообщения: 235
Зарегистрирован: Вс июн 05, 2005 2:42 pm
Контактная информация:

Сообщение volmike » Пт мар 23, 2012 4:42 pm

Добавьте еще один select с выборкой троек с последним положительным элементом. По аналогии с предыдущим моим кодом.
Лысый пешему не конный...

Dlacier
Сообщения: 45
Зарегистрирован: Чт фев 18, 2010 3:24 pm

Сообщение Dlacier » Пт мар 23, 2012 5:32 pm

Это понимаю )
Пробовала разные варианты, но не доходит до меня куда дописывать(

Код: Выделить всё

g[x_, y_] := {x, y, #} & /@ (f /.
     NSolve[(0.5^2/(1 - 3*f)^2)^(1/3)*(-x/1.1*(1 - 3*f)/f +
          y/3.418*0.5^2/f^2) == 1, f]);
x = Table[i, {i, 0, 1, 0.1}];
y = Table[j, {j, 0.75, 5, 0.25}];
solutions =
 Select[Partition[Flatten[Outer[g, x, y]], 3],
  Element[Last[#], Reals && #>0] &]
"Чтобы правильно задать вопрос, нужно знать большую часть ответа".

volmike
Сообщения: 235
Зарегистрирован: Вс июн 05, 2005 2:42 pm
Контактная информация:

Сообщение volmike » Сб мар 24, 2012 12:12 am

Dlacier писал(а):Это понимаю )
Пробовала разные варианты, но не доходит до меня куда дописывать(

Код: Выделить всё

g[x_, y_] := {x, y, #} & /@ (f /.
     NSolve[(0.5^2/(1 - 3*f)^2)^(1/3)*(-x/1.1*(1 - 3*f)/f +
          y/3.418*0.5^2/f^2) == 1, f]);
x = Table[i, {i, 0, 1, 0.1}];
y = Table[j, {j, 0.75, 5, 0.25}];
solutions =
 Select[Partition[Flatten[Outer[g, x, y]], 3],
  Element[Last[#], Reals && #>0] &]


Почти угадали:)

Код: Выделить всё

g[x_, y_] := {x, y, #} & /@ (f /.
     NSolve[(0.5^2/(1 - 3*f)^2)^(1/3)*(-x/1.1*(1 - 3*f)/f +
          y/3.418*0.5^2/f^2) == 1, f]);
x = Table[i, {i, 0, 1, 0.1}];
y = Table[j, {j, 0.75, 5, 0.25}];
solutions =
 Select[Partition[Flatten[Outer[g, x, y]], 3],
  Element[Last[#], Reals] && Last[#] > 0 &]
Лысый пешему не конный...

Dlacier
Сообщения: 45
Зарегистрирован: Чт фев 18, 2010 3:24 pm

Сообщение Dlacier » Пн мар 26, 2012 12:01 am

Спасибо огромное, вы мне очень помогли :)
Возник еще вопрос=)
В каком виде выводится результат, я так понимаю, зависит от функции Partition, то есть в данном случае по три элемента
{{a,b,c}, {d,e,h}}
Можно ли сделать так чтоб выводилось следующим образом
{{{a,b},c}, {{d,e},h}}

Посмотрела хелп, но такого не увидела.
Это нужно для интерполяции полученной функции :)
"Чтобы правильно задать вопрос, нужно знать большую часть ответа".

volmike
Сообщения: 235
Зарегистрирован: Вс июн 05, 2005 2:42 pm
Контактная информация:

Сообщение volmike » Пн мар 26, 2012 2:08 pm

Dlacier писал(а):Спасибо огромное, вы мне очень помогли :)
Возник еще вопрос=)
В каком виде выводится результат, я так понимаю, зависит от функции Partition, то есть в данном случае по три элемента
{{a,b,c}, {d,e,h}}
Можно ли сделать так чтоб выводилось следующим образом
{{{a,b},c}, {{d,e},h}}

Посмотрела хелп, но такого не увидела.
Это нужно для интерполяции полученной функции :)

Например, так:

Код: Выделить всё

{Most[#], Last[#]} & /@ solutions
Лысый пешему не конный...