goo blog サービス終了のお知らせ 

korondemoのメモ

記憶の助けとして

角度制御ステップ応答 (ロボコンマガジン46)

2006-06-15 20:42:21 | Scilab
clear
deg2rad=%pi/180;
rad2deg=180/%pi;
tt=0:0.001:2;
thref=ones(tt)*60*deg2rad;
Kp=0.2;
Kd=0.025;
J=0.001;
s=poly(0,'s');
G1=syslin('c',1,J*s);
G2=syslin('c',1,s);
Dcont=syslin('c',Kd,1);
Pcont=syslin('c',Kp,1);
Vclosed=G1/.Dcont;
Xclosed=(Pcont*Vclosed*G2)/.syslin('c',1,1)
[th,XX]=csim(thref,tt,Xclosed);
plot(tt,th*rad2deg,tt,thref*rad2deg);
legend('th[deg]','thref[deg]');
xgrid;
a=gca();
a.data_bounds=[0 0;1.5 80];
xtitle('','time[s]','th[deg]');

ルンゲ・クッタ法による微分方程式の解法

2006-06-02 08:36:38 | Scilab
以下は2階斉次線形微分方程式

d^2x/dt^2-dx/dt-2x-6=0



dx_1/dt=x_2
dx_2/dt=x_2+2x_1+6

のような連立1次微分方程式として解く場合の例です.

function [t,x]=runge(h)
n=0.2/h
t(1)=0
x(1,:)=[0 0]
for i=1:n
k1=h*f(t(i),x(i,:))
k2=h*f(t(i)+h/2,x(i,:)+k1/2)
k3=h*f(t(i)+h/2,x(i,:)+k2/2)
k4=h*f(t(i)+h,x(i,:)+k3)
x(i+1,:)=x(i,:)+(k1+2*k2+2*k3+k4)/6
t(i+1)=t(i)+h
end
endfunction

function dif=f(t,x)
dif(1,1)=x(2)
dif(1,2)=x(2)+2*x(1)+6
endfunction

線形補間

2006-05-28 18:36:46 | Scilab
function [xval,yval]=senkeihokan(x,y)
n=length(x)
div=10
xval=[]
for i=1:n-1
h=(x(i+1)-x(i))/div
xval=[xval x(i):h:x(i)+h*(div-1)]
yval((i-1)*div+1:i*div)=y(i)+(y(i+1)-y(i))* ...
(xval((i-1)*div+1:i*div)-x(i))/(x(i+1)-x(i))
end
xval=[xval x(n)]
yval=[yval y(n)]

セル配列と構造体

2006-05-07 20:25:07 | Scilab
セル配列
a=makecell([2 2],'Keio',[1 2;3 4],ones(2,2),rand(3,3))
a(1,2)
b=cell2mat(a(1,2))
b(2,1)
c=cell(2,2)
c(1,1)=makecell(1,[1 2;3 4])
c(2,2)=makecell(1,[4 3;2 1])

構造体
student.name='korondemo'
student.score=[12 34 56]
student=struct('name','korondemo','score',[12 34 56])
student(2).name='yamada'
student(2).score=[78 90 100]
student.score
student(2).score(2)