LINUX.ORG.RU

octave и lambda-функции

 , ,


0

1

не работает следующая конструкция:

basis=@(x,k) quad(@(t) polyval(legendrepoly(k),t),-1,x);
quad(@(y) basis(y,2),-1,1);
пишет

--------
quad: invalid recursive call
-------

куда копать?

Перемещено tazhate из talks

★★☆☆☆

Последнее исправление: dikiy (всего исправлений: 1)

А можно чуть побольше код .... проверю на свежей версии.

И да всегда можно написать в рассылку

DR_SL ★★★★★
()
>> basis=@(x,k) quad(@(t) polyval(legendrepoly(k),t),-1,x);
>> quad(@(y) basis(y,k),-1,1);
error: 'k' undefined near line 1 column 19
error: evaluating argument list element number 2
error: called from:
error:    at line -1, column -1
error: quad: evaluation of user-supplied function failed
>>

GNU Octave, version 3.7.6+

DR_SL ★★★★★
()
Последнее исправление: DR_SL (всего исправлений: 1)
Ответ на: комментарий от DR_SL

удалось немного локализовать. Вот этот код вызывает уже ошибку.

function retval=basis(x,k)
       retval=quad(@(t) sin(k*t),-1,1);
end

quad(@(y) basis(y,2),-1,1);

dikiy ★★☆☆☆
() автор топика
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от DR_SL

quad(@(y) basis(y,2),-1,1);

//fixed.

так надо. я просто опечатался в топике.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от xsektorx

hold on и hold off должны помочь, если я тебя правильно понял.

aiqu6Ait ★★★★
()
Ответ на: комментарий от xsektorx

Почитай мануалы по gnuplot. Один день убьешь, зато наделаешь себе шаблонов для дальнейшего использования.

P.S. Пользуясь случаем, реквестирую статей, чтобы понять, что за непонятную штуку написал автор.

Anon
()
Ответ на: комментарий от Anon

basis=@(x,k) quad(@(t) polyval(legendrepoly(k),t),-1,x);

определяю функцию

S_k(x)=\int_{-1}^x P_k(t) dt, где P_k(t) - это полином Лежандра степени k.

quad(@(y) basis(y,2),-1,1);

здесь я пытаюсь взять интеграл от функции S_2(x):

\int_{-1}^1 S_2(x) dx

и на этом моменте октава фейлится.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от dikiy

А зачем ты дважды интеграл вычисляешь? Я, конечно, с этими @ никогда не работал, но сдается мне, что у тебя получается, что basis — это интеграл от -1 до x по полиному Лежандра степени k. Т.е. тебе разве не basis(2, 1) надо во втором случае писать?

Anon
()
Ответ на: комментарий от Anon

да. два раза вычисляю. Если я напишу

basis(2, 1)

то это будет просто

S_2(x)=\int_{-1}^1 P_k(t) dt

а мне нужен именно набор функций

S_k(x), который будет является базисом в пространстве W_2^1[-1,1]

dikiy ★★☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.