why do i get Unrecognized function or variable error

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]

답변 (1개)

Voss
Voss 2024년 1월 29일
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

카테고리

도움말 센터File Exchange에서 Mathematics에 대해 자세히 알아보기

태그

질문:

2024년 1월 29일

편집:

2024년 1월 29일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by