why do i get Unrecognized function or variable error
Show older comments
hey i have a code for 3 different solutions methods and the user picks method as an input. when the user chooses method 2 or 3, Unrecognized function or variable error shows up. I call the functions according to the selection. can you please help
function main()
% Kullanıcıdan A matrisini ve b vektörünü al
A = input('A matrisini girin: ');
b = input('b vektörünü girin: ');
% Kullanıcıdan çözüm yöntemini seçmesini iste
metotSecim = input('Lütfen kullanmak istediğiniz çözüm yöntemini seçin:\n1. Cholesky Çözümü için 1 \n2. Gauss Siedel için 2\n3. CGM için 3\n');
% Seçilen çözüm yöntemini çağır
switch metotSecim
case 1
x = choleskyCozumleme(A, b);
case 2
x = gaussSiedelcozum(A, b);
case 3
x = cgmcozum(A, b);
otherwise
disp('Geçersiz seçim. Lütfen 1, 2 veya 3 girin.');
return;
end
% Çözümü ekrana yazdır
disp('Bulunan x çözümü:');
disp(x);
end
function x = choleskyCozumleme(A, b)
b=b'
L= zeros(3)
L(1,1) = sqrt(A(1,1))
n=size(A,1)
x=zeros(n,1)
y=zeros(n,1)
for i=1:n
L(i,1)=A(i,1)/L(1,1)
end
for j=1:n;
sumterm=0
for k=1:j-1
sumterm=sumterm+ L(j,k).^2
end
L(j,j)=sqrt(A(j,j)-sumterm)
for i=j+1:n
summation= 0
for k= 1:j-1
summation=summation+L(i,k)*L(j,k)
end
L(i,j)=(A(i,j)-summation)/L(j,j)
end
y(1)=b(1)/L(1,1)
for i=2:n
y(i)= ( b(i) - L(i,1:i-1)* y(1:i-1) ) / L(i,i)
end
tL=L'
x(n)= y(n)/tL(n,n)
for i=n-1:-1:1
x(i) = ( y(i) - tL(i,i+1:n)*x(i+1:n) ) / tL(i,i)
end
end
function x= gaussSiedelcozum(A, b)
b=b'
n=size(b,1)
x=zeros(n,1)
maxerr = 1e-6
err1= inf
itr = 0
while (err1>maxerr)
x_old=x
for i=1:n
sum=0
for j=1:i-1
sum=sum+A(i,j)*x(j)
end
for j=i+1:n
sum=sum+A(i,j)*x_old(j)
end
x(i)= b(i)-sum*1/A(i,i)
end
err1=abs(x-x_old)
itr=itr+1
end
end
function x= cgmcozum(A, b)
b=b'
n=size(b,1)
x=zeros(n,1)
Beta=0
alfa=0
itr= 0
err1=inf
maxerr = 1e-6
fark= 0
while err1>maxerr
x_old=x
s_old=S
r=b-A*x
if itr==0
S=r
else
Beta= - ( b - A * x_old )' * A* s_old / (s_old'*A*s_old)
S= ( b - A * x_old ) + Beta * s_old
end
alfa= ( S'* ( b- A*x ) ) / ( S'*A * S )
x= x_old+ alfa * S
fark=abs(x_old-x)
err1=sqrt(norm(fark)/norm(x))
itr=itr+1
end
end
end
%[4 -2 1; -2 4 -2 ; 1 -2 4]
%[11 -16 17]
Answers (1)
Voss
on 29 Jan 2024
There was an "end" in the wrong place. See comments below.
function main()
% Kullanıcıdan A matrisini ve b vektörünü al
A = input('A matrisini girin: ');
b = input('b vektörünü girin: ');
% Kullanıcıdan çözüm yöntemini seçmesini iste
metotSecim = input('Lütfen kullanmak istediğiniz çözüm yöntemini seçin:\n1. Cholesky Çözümü için 1 \n2. Gauss Siedel için 2\n3. CGM için 3\n');
% Seçilen çözüm yöntemini çağır
switch metotSecim
case 1
x = choleskyCozumleme(A, b);
case 2
x = gaussSiedelcozum(A, b);
case 3
x = cgmcozum(A, b);
otherwise
disp('Geçersiz seçim. Lütfen 1, 2 veya 3 girin.');
return;
end
% Çözümü ekrana yazdır
disp('Bulunan x çözümü:');
disp(x);
end
function x = choleskyCozumleme(A, b)
b=b'
L= zeros(3)
L(1,1) = sqrt(A(1,1))
n=size(A,1)
x=zeros(n,1)
y=zeros(n,1)
for i=1:n
L(i,1)=A(i,1)/L(1,1)
end
for j=1:n;
sumterm=0
for k=1:j-1
sumterm=sumterm+ L(j,k).^2
end
L(j,j)=sqrt(A(j,j)-sumterm)
for i=j+1:n
summation= 0
for k= 1:j-1
summation=summation+L(i,k)*L(j,k)
end
L(i,j)=(A(i,j)-summation)/L(j,j)
end
y(1)=b(1)/L(1,1)
for i=2:n
y(i)= ( b(i) - L(i,1:i-1)* y(1:i-1) ) / L(i,i)
end
tL=L'
x(n)= y(n)/tL(n,n)
for i=n-1:-1:1
x(i) = ( y(i) - tL(i,i+1:n)*x(i+1:n) ) / tL(i,i)
end
end
end % <- missing end added
function x= gaussSiedelcozum(A, b)
b=b'
n=size(b,1)
x=zeros(n,1)
maxerr = 1e-6
err1= inf
itr = 0
while (err1>maxerr)
x_old=x
for i=1:n
sum=0
for j=1:i-1
sum=sum+A(i,j)*x(j)
end
for j=i+1:n
sum=sum+A(i,j)*x_old(j)
end
x(i)= b(i)-sum*1/A(i,i)
end
err1=abs(x-x_old)
itr=itr+1
end
end
function x= cgmcozum(A, b)
b=b'
n=size(b,1)
x=zeros(n,1)
Beta=0
alfa=0
itr= 0
err1=inf
maxerr = 1e-6
fark= 0
while err1>maxerr
x_old=x
s_old=S
r=b-A*x
if itr==0
S=r
else
Beta= - ( b - A * x_old )' * A* s_old / (s_old'*A*s_old)
S= ( b - A * x_old ) + Beta * s_old
end
alfa= ( S'* ( b- A*x ) ) / ( S'*A * S )
x= x_old+ alfa * S
fark=abs(x_old-x)
err1=sqrt(norm(fark)/norm(x))
itr=itr+1
end
end
% end <- extra end removed
Categories
Find more on Mathematics in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!