using optim function in different versions of Scilab
Ivan Maximov
vaborg at gmail.com
Wed Jun 24 17:18:59 CEST 2009
Hi everyone!
I have a question what is confusing me. I use Scilab 4.1.2 under Linux (Fedora
10) and try to set up a optim function in the code below - but always get an
error message. However, in Scilab 5.1.1 it works without any messages (the
question does it work properly is still open). Could someone, please, explain
for me what is a problem in optim application in my code?
Thanks a lot in advance.
Ivan
//-----------------------------------------------------------------------------------------------
funcprot(0);
function [y1,y2,y3,y4]=prop(x1,x2,x3,x4,ix,iy,sx,sy,dt,A,U,B,PROP,l1)
y1 = x1;
y2 = x2;
y3 = x3;
y4 = x4;
N=length(x1)+1;
for j=2:N
HAMo = rand(4,4);
B=rand(4,4);
U=rand(4,4);
function [yN]=fun(x)
yN= -(2*real(trace(((expm(-%i*dt*HAMo)'*expm(-%i*dt*(x(1)*ix+x(2)*iy+x
(3)*sx+x(4)*sy))- eye(4,4))*A*U*B*A') ))-dt*l1*((x(1)-x1(j-1)).*
(x(1)+x1 (j-1)) +(x(2)-x2(j-1)).*(x(2)+x2(j-1))+(x(3)-x3(j-1)).*
(x(3)+x3 (j-1)) +(x(4)-x4 (j-1)).* (x(4)+x4(j-1))));
endfunction
function [d_yN] =d_fun(x)
d_yN=derivative (fun,x);
endfunction
function [yN,grd,ind]=f(x,ind)
yN=fun(x);
grd=d_fun(x);
endfunction
x0= [x1(j-1);x2(j-1);x3(j-1);x4(j-1)];
printf("BEFORE: %f\n",fun(x0));
[fopt,xN]=optim(f,x0);
printf("AFTER: %f\n",fun(xN));
y1(j-1) = xN(1);
y2(j-1) = xN(2);
y3(j-1) = xN(3);
y4(j-1) = xN(4);
end
endfunction
x_pauli=[0,0.5;0.5,0];
y_pauli=[0,-0.5*%i;0.5*%i,0];
z_pauli=[0.5,0;0,-0.5];
u_pauli=[1,0;0,1];
J = 140;
T = 1/J; N=10; NIT=5;
dt=T/N;
rf = 100;
l1 = 1e-4;
//---------------------------------------------------------------------------
ix = x_pauli.*.u_pauli; iy = y_pauli.*.u_pauli; iz = z_pauli.*.u_pauli;
sx = u_pauli.*.x_pauli; sy = u_pauli.*.y_pauli; sz = u_pauli.*.z_pauli;
//---------------------------------------------------------------------------
Hamilt=2*%pi*J*sz*iz;
A=expm(-%i*0.5*dt*Hamilt);
U = rand(4,4);
B = rand(4,4);
PROP=rand(4,4);
//---------------------------------------------------------------------------
u1 = rf*rand(1,N-1); u2 = rf*rand(1,N-1);
u3 = rf*rand(1,N-1); u4 = rf*rand(1,N-1);
[y1,y2,y3,y4]=prop(u1,u2,u3,u4,ix,iy,sx,sy,dt,A,U,B,PROP,l1);
More information about the users
mailing list