clear all,clc;
syms x;
y=1;
f=0;
derece=input('Fonksiyon derecesini giriniz : ');
%0.Terim x^0 katsayıli olan terim
for i=0:derece
disp(y);
y=y+1;
katsayi=input('. Terimin Katsayısını Giriniz : ');
f=f+katsayi*x^i;
end
t=input('Tolerans degeri giriniz : ');
s1=input('Ilk sınır degerini giriniz : ');
s2=input('Ikinci sınır degerini giriniz :');
N=round(log10((s2-s1)/t)/log10(2)); %Yapilmasi gereken Literasyon Sayisi
x=1;
disp(f);
Aldığım Çıktı :
Fonksiyon derecesini giriniz : 2
1
. Terimin Katsayısını Giriniz : 3
2
. Terimin Katsayısını Giriniz : 2
3
. Terimin Katsayısını Giriniz : 1
Tolerans degeri giriniz : 10^-2
Ilk sınır degerini giriniz : 1
Ikinci sınır degerini giriniz :2
x^2 + 2*x + 3
>>
x=1 için sonucun 6 cıkması gerekirken ekranda hicbirsey yazmıyor.
disp(f) yerine sadece f veya fprintf('Sonuc= %f',f) yazıp deneyebilirsiniz. Kolay gelsin.
Cevabınız icin teşekkürler.
x=2
f
seklinde yazdım ve cıkısta sadece denklemi gordum.
x=2
fprintf('Sonuc = %f',f)
ilede
??? Error using ==> fprintf
Function is not defined for 'sym' inputs.
bu hatayı aldım.
ben x i smys x seklinde tanımladım fprintf bunları göstermiyormus. x i eger tanımlamassam sembol seklinde bu seferde
for i=0:derece
disp(sayac);
sayac=sayac+1;
katsayi=input('. Terimin Katsayısını Giriniz : ');
f=f+katsayi*x.^i;
end
Şu kısımda katsayi değerlini girerken x tanımlanmamıstır hatasını veriyor.
-Düzeltme Cok tuhaf birşey oldu %syms x;'i şeklinde kapattım programda calıstırdım, program calıstı daha sonra üste clear all,clc; komutunu yazdım her programı calıstırdıgımda temizlensin ekran diye tekrar programı calıstırdım x tanımlanmamıstır hatasını verdi(ilk katsayi degerini girerken) benim matlab damı sorun var aceba? matlab7.9.0(200b) kullanıyorum.Daha sonra tekrar syms x; yazıp tekrar verdim katsayı degerlerini fprintf fonksiyonu smys degerlerini
yazamıyor hatasını aldım yine,tekrar %syms x; ile bu kısmı kapattım yine calıstırdım ve yine calıstı programım clear all,clc; komutunu eklemedim,bu komutları ekleyince neden calısmıyor program?
Birde birkaç değer veriyim dedim x'e.Denklemimi x^2+2*x+3 seklinde yazdım hep.
x=4
fprintf('Sonuc = %10.02f',f);
x=4 icin sonucu 18 buldu(x=3 icin sonuc 18 cıkıyor) , x=0 icin sonucu 27 buldu(yani x'e 4 degerini verince bulcağı degeri 0 verince buldu) , x=4 yazdım birde bu seferde sonucu 3 buldu yani x'e 0 verince bulcağım sonucu verdi, bir adımlık gecikme var nedense sonra m-file icinde değilde normal matlab ekranında clear komutunu yazdım yine ilk katsayı değerini girerken x tanımlanmamıstır hatasını verdi.
Düzeltme2:Programımı yazdım çalışıyor ufak birkaç fonksiyon daha yazıyorum dahada kullanışlı olması için ödevimin ,akşama veya yarın birkaç sorumla birlikte paylaşacağım çalışmamı.
Konunun başında yazıpda çalıştıramadığım program(Bu haliyle çalışıyor)
%f[] matrisi icine katsayılar girilerek istenen fonksiyon olusturulur.
clear all,clc;
f=[1 0 -1 -1];
t=input('Tolerans degerini giriniz : ');
%[a,b] araliği belirleniyor.
a=input('Sol sinir degerini giriniz : ');
b=input('Sag sinir degerini giriniz :');
N=round(log10((b-a)/t)/log10(2)); %%Literasyon sayisi hesaplaniyor.round() yuvarlama işlemini yapar.
j=a;
i=b;
x=a;
y=b;
for i=0:N
s1=polyval(f,a); %%Sınır değerlerinin sonuçları hesaplanıyor
s2=polyval(f,b); %%y eksenindeki karşılıkları.
if s1*s2<0 %Eger f(a)*f(b)<0 ise bu aralıkta kök var demektir
w=(a+b)/2; %Ve bu köke yaklasmak icin a,b nin ortalaması alınıyor.
else
disp('GIRDIGINIZ SINIRDEGERLERI ARASINDA KOK YOKTUR !'); %Eger f(a)*f(b)>0 ise [a,b] arasında
break; %kök yok demektir ve döngüden çıkılır break ile.
end
s3=polyval(f,w); %Elde edilen yeni yaklasik kök degerinin sonucu bulunuyor ve s3 değişkenine atanıyor.
if s1*s3<0 %Eğer f(a)*f(w)<0 ise yeni yaklasık kök değerimiz [a,w] arasindadir.
b=w; %Ve eski sınır değerimiz olan b yerine yeni sınır değerimiz w olur
elseif s2*s3<0
a=w;
end
end
fprintf('Literasyon sayisi : %2.0f\n',N); %%Girmiş olduğumuz tolerans değeri sonucu elde ettiğimiz literasyon sayısı sonunda
if polyval(f,x)*polyval(f,y)<0
fprintf('Yaklaşık Kök Değeri w = %2.10f\n',w); %%Elde ettiğimiz yaklaşık kök değeri ekrana yazdırılıyor.
fprintf('f(w)=%10.10f\n',polyval(f,w)); %%Yaklaşık kök değerinin sonucu ekrana yazdırılıyor.
x=j:0.001:i;
y=f(1,1)*(x.^3)+f(1,2)*(x.^2)+f(1,3)*x+f(1,4);
plot(x,y); %%Fonksiyon grafiği çizdiriliyor.
grid;
end
Sorunu denklemimdeki katsayıları bir boyutlu matrisin içine alarak hallettim illada ax^2+bx+c gibi x lerin görünmesine gerek yok diyerekden sorunu hallettim.
Fonksiyon olusturan ve fonksiyonu ekrana yazan program
%ceil(x) x=4.5,4.3,4.8 gibi degerlerde x'i yukarı yuvarlar yani 5 olur
%ceil(4)=4 dür
%floor(x) x=4.5,4.3,4.8 gibi değerleri floor() alta yuvarlar yani sonucları
%4 olur bu girilen x degerlerinin.
clear all,clc;
xy=input('DENKLEM KATSAYİLARİ GİRİNİZ POZİTİF OLARAK : ');
uz=log10(xy);
uz=floor(uz)+1;
f=[0];
j=uz;
for i=1:uz
if i==1
f(1,1)=xy/10^(uz-1);
f(1,1)=floor(f(1,1));
else
j=j-1;
f(1,i)=rem(xy,10^j); %Bölümünden kalanı veren fonksiyondur.
uz=j-1;
f(1,i)=floor(f(1,i)/10^uz);
end
end
f
pnuz=floor(log10(xy))+1;
pn=[0]; %pn = pozitif negatif fonksiyonu burada girilen katsayıların işaretlerini kullanıcıdan istiyorum.
disp('Katsayisi (-) olanlara |-1| (+) olanlara |1| yazınız !');
for i=1:pnuz
fprintf('%d.Terimin Katsayisinin işaretini yaziniz : ',i)
pn(1,i)=input(' ');
if pn(1,i)==1 || pn(1,i)==-1
continue;
else
fprintf('\n\n')
error('SADECE -1 , +1 DEGERLERINI GIREBILIRSINIZ\n');
a=0;
break;
end
end
%Fonsiyonun katsayıları hesaplanıyor
if i==pnuz
for j=1:pnuz
f(1,j)=f(1,j)*pn(1,j);
end
end
%Fonksiyon ekrana yazdırılıyor.
fprintf('f(x)=');
us=pnuz-1;
for j=1:pnuz
if f(1,j)==0
us=us-1;
continue;
else
if us~=0
if f(1,j)>0
fprintf('+%d*x^%d',f(1,j),us)
us=us-1;
else
fprintf('%d*x^%d',f(1,j),us);
us=us-1;
end
else
if f(1,j)>0
fprintf('+%d',f(1,j));
else
fprintf('%d',f(1,j));
end
end
end
end
fprintf('\n');