Вход через социальные сети

  • 2страниц:
  • 1
  • 2
  • 15.04.2013, 18:23
    0 up down
    Сообщение
    Albe в 15.4.2013, 13:36 написал(а): link

    Ибо, как я понимаю, в функциях распределения содержатся комплексные функции под знаками модулей и взятия мнимой части.
    Что посоветуете? Как найти максимум функции в программе?

    сообщение говорит, что в вычислениях не определен тип переменной для Х.
    И просит выбрать тип - вещественный (real) или целый (integer).

    PS. Еще, для вводимых вещественных данных используйте такую запись: 1.0 или 0.8 (или ... 125.0 , 12.056)
    PPS. Ссылочка: NMaximize
  • 15.04.2013, 18:41
    0 up down
    Сообщение
    N T в 15.4.2013, 17:23 написал(а): link

    сообщение говорит, что в вычислениях не определен тип переменной для Х.
    И просит выбрать тип - вещественный (real) или целый (integer).


    Как задать тип переменной?
  • 15.04.2013, 19:00
    0 up down
    Сообщение
    Исходный код

    Solve[expr, vars, dom]
    solves over the domain dom. Common choices of dom are Reals, Integers, and Complexes.
    ...

    In[1]:= sol = Solve[x^2 + a x + b == 0, x, Reals]    



    Ага, на всякий случай скажу - пакет "Wolfram Mathematica" я не знаю.
  • 15.04.2013, 21:47
    0 up down
    Сообщение
    Установил тип переменных в функции Maximize в своей функции.
    При Integers он не считает и зацикливается (т.к. точка максимума не целое число), а при Reals выдаёт ошибку:
    Код
    LessEqual::nord: Invalid comparison with 415.487+0.i attempted
    , где i -мнимая единица.
    Т.е., как я понимаю, он как-то натыкается на комплексные числа, не смотря на то, что функция в итоге действительная.
  • 15.04.2013, 22:39
    0 up down
    Сообщение
    Так никто вас не поймёт.
    Для анализа опубликуйте код вашей функции и ее вызов, если это не секрет.

    PS. В случае если ваши данные комплексные, то надо использовать тип данных - Complexes
    Только это зависит от реализации вашей функции, т.е. как будет работать с комплексными.

    PPS. Но больше чем уверен, что проблема внутри вашей фунции Maximize.
    Скорее всего какая-то итерация внутренней переменной приводит к комплексной величине (np. корень из отр. числа).
    А потом этo комплексное число сравнивается с целым или вещественным.
  • 16.04.2013, 15:31
    0 up down
    Сообщение
    Код
    ReEps[x_] :=
    Piecewise[{{1.4, x <= 310}, {34.88 - 0.108*x,
    310 <= x <= 322}, {33.592 - 0.104*x,
    322 <= x <= 323}, {16.796 - 0.052*x, 323 <= x < 477}}];

    ImEps[x_] :=
    Piecewise[{{51 - 0.16*x, x <= 310}, {18.14 - 0.054*x,
    310 <= x <= 322}, {17.496 - 0.052*x, 322 <= x <= 323}, {0.7,
    323 <= x < 477}}];

    e1 = 1
    em = 1.7689
    a1 = 2

    k2[x_, eh_] := 2*Pi/x*10/3*eh^(1/2)
    e2[x_] := ReEps[x] + I*ImEps[x]

    Kcisqrt1[bet_] := bet/(bet^2 - 1)^(1/2)
    Kcisqrt2[bet_] := bet/(-bet^2 + 1)^(1/2)

    L0a[bet_] := (Kcisqrt1[bet]^2 -
    1)*(Kcisqrt1[bet]/2*
    Log[(Kcisqrt1[bet] + 1)/(Kcisqrt1[bet] - 1)] - 1)
    L0b[bet_] := (Kcisqrt2[bet]^2 + 1)*(1 -
    Kcisqrt2[bet]*ArcTan[Kcisqrt2[bet]])
    L1a[bet_] := (1 - (Kcisqrt1[bet]^2 -
    1)*(Kcisqrt1[bet]/2*
    Log[(Kcisqrt1[bet] + 1)/(Kcisqrt1[bet] - 1)] - 1))/2
    L1b[bet_] := (1 - (Kcisqrt2[bet]^2 + 1)*(1 -
    Kcisqrt2[bet]*ArcTan[Kcisqrt2[bet]]))/2


    AlphaXa[x_, eh_, bet_, a_] :=
    bet*a^(3)/3*(e2[x] - eh)/(eh + L1a[bet]*(e2[x] - eh))
    AlphaZa[x_, eh_, bet_, a_] :=
    bet*a^(3)/3*(e2[x] - eh)/(eh + L0a[bet]*(e2[x] - eh))

    SigmaABa[x_, bet_, a_, eh_] :=
    4*Pi*k2[x, eh]*
    Im[2/3*AlphaXa[x, eh, bet, a] + AlphaZa[x, eh, bet, a]/3]
    SigmaSCa[x_, bet_, a_, eh_] :=
    8*Pi/3*(k2[x, eh])^4*(Abs[2*AlphaXa[x, eh, bet, a]]^(2)/3 +
    Abs[AlphaZa[x, eh, bet, a]]^(2)/3)


    Manipulate[
    Maximize[SigmaABa[x, bet, a, eh], {300 <= x <= 477}, {x},
    Reals], {bet, 1.001, 2}, {a, 2, 4}, {eh, 1, 1.7689}]
  • 16.04.2013, 21:32
    0 up down
    Сообщение
    Вроде у вас вышло, что SigmaABa возвращает значение reals,
    но она же явно вами задана как комплексная.

    А попробуйте так:
    Код

    ...
    SigmaABa[x_, bet_, a_, eh_] :=
    4*Pi*k2[x, eh]*
    Im[2/3*AlphaXa[x, eh, bet, a] + AlphaZa[x, eh, bet, a]/3]
    ...

    Manipulate[
    Maximize[SigmaABa[x, bet, a, eh], {300 <= x <= 477}, {x Integers} ], {bet, 1.001, 2}, {a, 2, 4}, {eh, 1, 1.7689}, Reals]

    Где:
    1. Аргумент X определил как целое, пробегает от/до: 300 <= x <= 4772. А сама функция Maximize будет возвращать вещественное значения Reals
    Попробуйте и скажите какие результаты.
  • 16.04.2013, 23:21
    0 up down
    Сообщение
    N T в 16.4.2013, 20:32 написал(а): link

    ...
    Попробуйте и скажите какие результаты.

    Получилось следующее:
    Код
    Manipulate::vsform: Manipulate argument Reals does not have the correct form for a variable specification. >>

    и выводит просто последнюю строку с Manipulate.
  • 17.04.2013, 01:18
    0 up down
    Сообщение
    Да, это моя ошибка.
    Верните всё назад. И внимательно посмотрите.
    Что-то тут не нравиться:
    Код

    Manipulate[
    Maximize[SigmaABa[x, bet, a, eh], {300 <= x <= 477}, {x},
    Reals], {bet, 1.001, 2}, {a, 2, 4}, {eh, 1, 1.7689}]



    PS. Я бы так сначала попробовал, уж очень мне не нравиться ваши квадратные скобки.
    А типы переменных вообще не подавал. Пусть берёт вещественные.
    Код

    Manipulate[
    Maximize[SigmaABa[x, bet, a, eh], {x, 300, 477}, {bet, 1.001, 2}, {a, 2, 4}, {eh, 1, 1.7689}]]
  • 17.04.2013, 19:18
    0 up down
    Сообщение
    N T в 17.4.2013, 0:18 написал(а): link


    PS. Я бы так сначала попробовал, уж очень мне не нравиться ваши квадратные скобки.
    А типы переменных вообще не подавал. Пусть берёт вещественные.
    Код

    Manipulate[
    Maximize[SigmaABa[x, bet, a, eh], {x, 300, 477}, {bet, 1.001, 2}, {a, 2, 4}, {eh, 1, 1.7689}]]


    Тогда он найдёт максимум вообще, а мне надо при каждом параметре bet, a, eh. К тому же в Manipulate не задаются изменящиеся параметры.