0

Scilab で他の関数をビルドできる関数をビルドする必要があります。例を挙げて説明しようと思います。

//A1 and A2 g12 are functions from R^2->R^2
// Here is what I can do. 
deff('[Xprime]=Sys2(t,X)','Xprime=[A1(t,X(1:2)),A2(t,X(3:4))+g2(t,X(1:2),X(3:4))]')

さて、関数 A1、A2、....An がいくつあるかわかりません。したがって、それらをリストに保存する必要があります。

l1 = list(); l2 = list();
l1.($+1) = A1; l1.($+1) = A2; l1.($+1) = A3; ...
l2.($+1) = g1; l2.($+1) = g2; l2.($+1) = g3; ...

次のような関数を実装したい:

function Xprime=Sys(l1, l2)
       //... I do not know what to type ...
endfunction 

この関数は次を出力します。

deff('[Xprime]=Sys2(t,X)','Xprime=[A1(t,X(1:2))+g1(t,X(1:2)),A2(t,X(3:4))+g2(t,X(3:4)), ...]')

理解できることを願っています。

4

1 に答える 1

1

役立つかもしれない短いセットアップを書きました。現時点では完全に機能しているわけではありませんが、目標を達成する方法について何らかのアイデアが得られるでしょう。

funcprot(0) //Mute warnings about functions definitions

function [Xprime_header, Xprime_body]=Sys(l1, l2)

Xprime_header = '[Xprime]=Sys2(t,X)'

// Add the beginning of the body
Xprime_body = "Xprime=["

count = length(l1)

// Add each argument
for i = 1:count        
    Xprime_body = Xprime_body + string( l1(i) ) + "(t,X(" + string(i) + "," + string(i+1) + "))"  

    Xprime_body = Xprime_body + "+" + string( l2(i) )  + "(t,X(" + string(i) + "," + string(i+1) + "))"

    if( i < count )            
        Xprime_body = Xprime_body + ","
    end              
end

// Add the last part
Xprime_body = Xprime_body + ',X(' + string(count-1) + ":" + string(count) + ")]"

endfunction 

l1 = list(); l2 = list();
l1($+1) = 'A1'; l1($+1) = 'A2'; l1($+1) = 'A3'; 
l2($+1) = 'g1'; l2($+1) = 'g2'; l2($+1) = 'g3'; 

[ Xprime_header, Xprime_body ] = Sys( l1, l2)

disp( Xprime_body )

// Deff your function here, so it is in the main scope
deff( Xprime_header, Xprime_body)
于 2013-11-11T08:37:57.497 に答える