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

korondemoのメモ

記憶の助けとして

ヤコビ法による固有値と固有ベクトルの算出(ウィウキンソンの公式使用)

2006-04-01 10:13:09 | Scilab
function [v,e]=jacobiw(a)
n=size(a,1)
v=eye(a)
eps=0.000001*max(sum(abs(a),'c'))
kmax=400
for repeat=1:kmax
apqmax=0
for p=1:n
for q=1:n
if p<>q
apqmax=max(abs(a(p,q)),apqmax)
end
end
end
if apqmax<eps end
for p=1:n-1
for q=p+1:n
x=(a(p,p)+a(q,q))*0.5
y=(a(p,p)-a(q,q))*0.5
z=sqrt(y*y+a(p,q)*a(p,q))
if y<0 end
a(p,p)=x+z
a(q,q)=x-z
c=sqrt((1+y/z)*0.5)
s=a(p,q)*0.5/z/c
a(p,q)=0
a(q,p)=0
for j=1:n
if j<>p & j<>q
apj=a(p,j)
a(p,j)=apj*c+a(q,j)*s
a(q,j)=-apj*s+a(q,j)*c
a(j,p)=a(p,j)
a(j,q)=a(q,j)
end
end
for i=1:n
vip=v(i,p)
v(i,p)=vip*c+v(i,q)*s
v(i,q)=-vip*s+v(i,q)*c
end
end
end
e=diag(a)
end

ヤコビ法による固有値と固有ベクトルの算出

2006-03-30 13:06:44 | Scilab
function [v,e]=jacobi(a)
n=size(a,1)
v=eye(a)
eps=0.000001*max(sum(abs(a),'c'))
kmax=400
for repeat=1:kmax
apqmax=0
for p=1:n
for q=1:n
if p<>q
apqmax=max(abs(a(p,q)),apqmax)
end
end
end
if apqmax<eps end
for p=1:n-1
for q=p+1:n
app=a(p,p)
if app-a(q,q)<>0
theta=0.5*atan(2*a(p,q)/(app-a(q,q)))
else
theta=%pi*0.25
end
c=cos(theta)
s=sin(theta)
a(p,p)=app*c*c+2*a(p,q)*c*s+a(q,q)*s*s
a(q,q)=app*s*s-2*a(p,q)*c*s+a(q,q)*c*c
a(p,q)=0
a(q,p)=0
for j=1:n
if j<>p & j<>q
apj=a(p,j)
a(p,j)=apj*c+a(q,j)*s
a(q,j)=-apj*s+a(q,j)*c
a(j,p)=a(p,j)
a(j,q)=a(q,j)
end
end
for i=1:n
vip=v(i,p)
v(i,p)=vip*c+v(i,q)*s
v(i,q)=-vip*s+v(i,q)*c
end
end
end
e=diag(a)
end

以下のようにして出したものを使い
答え合わせをしてみましょう.

[v e]=spec(a)

部分ピボット選択付きガウスの消去法を用いた連立1次方程式の解法

2006-03-28 15:59:11 | Scilab
function x=gauss(a,b)
n=length(b)
for k=1:n-1
[res,ind]=sort(abs(a(k:n,k)))
saidai=ind(1)+k-1
if abs(a(saidai,k))<1e-7 end
if saidai<>k
kari=a(k,:)
a(k,:)=a(saidai,:)
a(saidai,:)=kari
kari=b(k)
b(k)=b(saidai)
b(saidai)=kari
end
a(k,k+1:n)=a(k,k+1:n)/a(k,k)
b(k)=b(k)/a(k,k)
a(k,k)=1
for i=k+1:n
a(i,k+1:n)=a(i,k+1:n)-a(i,k)*a(k,k+1:n)
b(i)=b(i)-a(i,k)*b(k)
a(i,k)=0
end
end
x(n)=b(n)/a(n,n)
for k=n-1:-1:1
x(k)=b(k)-a(k,k+1:n)*x(k+1:n)
end

ロジックシステム

2006-03-07 11:08:38 | Scilab
シミュレーション時間によって異なる信号を出力するシステムです.
図はシミュレーション時間を t とした場合,次のようになる例です.
1) 3<=t<=7 では,値 0 の一定信号を出力
2) 上記以外では,振幅 2,周波数 0.5 Hz の正弦波を出力

BlockPaletteSetValue
Relational OpOthersOperator3
logical Op ANDOthers
If then elseBranching
Gen\_SinSourcesMagnitute2
Frequency\%pi