Soru sordenklem çözüm ihtiyacı
Aykut tarafından 3 yıl önce soruldu

Merhaba, aşağıdaki denklemi çözdürüp X kök değerlerini bulmak istiyorum fakat çözüm bulamıyorum." 'syms' requires Symbolic Math Toolbox" hatası alıyorum. Yazdığım kod doğru mu? Toolbox için crack veya free eklentiye nasıl ulaşabilirim.
clear
clc
syms X
T=30;
P=614.95;
A=10.44+1.767*X+0.9823*X^2+0.3627*X^3;
B=2013.8-2155*X+1540.9*X^2-197.7*X^3;

denklem=10^(A-B/(T+273.16))==P
cevap=solve(denklem,X)
 
 

8 Cevap
Aykut tarafından 3 yıl önce cevaplandı

Toolbox yükledim ve aşağıdaki kodu çözdürdüm fakat çok karışık sonuç verdi. 
clear
clc
syms X
T=303.15;
P=487890;
A=10.44+1.767*X+0.9823*X^2+0.3627*X^3;
B=2013.8-2155*X+1540.9*X^2-197.7*X^3;
%log(P)=(A*(T5+273.16)-B)/(T+273.16)
denklem=A-B/T==log10(P)
cevap=solve(denklem,X)

Sonuç şu şekilde:
cevap =

root(z^3 – (248623151*z^2)/61530501 + (538133210*z)/61530501 – 8068885377321144016075/4329824083992498929664, z, 1)
root(z^3 – (248623151*z^2)/61530501 + (538133210*z)/61530501 – 8068885377321144016075/4329824083992498929664, z, 2)
root(z^3 – (248623151*z^2)/61530501 + (538133210*z)/61530501 – 8068885377321144016075/4329824083992498929664, z, 3)
Kendim denklemi sadeleştirip aşağıdaki kodla çözdüğüm zaman sonuç veriyor fakat ben sonraki işlemler için T ve P değerlerini girerek otomatik sonuç bulmasını istiyorum.
clc;
clear;
clear all;

array_kokleri=[1 -4.1 5.343 -1.891]
roots(array_kokleri)
Kendim sadeleştirdiğim zaman doğru sonuç şu şekilde:  0.5654
ans =
1.7673 + 0.4703i
1.7673 – 0.4703i
0.5654 + 0.0000i

Özgür Yönetici tarafından 3 yıl önce cevaplandı

Merhaba, daha önce Symbolic Toolbox'ı kullanırken o hatayla hiç karşılaşmadım muhtelemen kurulum yaparken eksik yaptığınız kısımlar var bunun için kurulum yaparken Toolbox listesinden özellikle Symbolic Toolbox'ı kontrol edebilirsiniz.
MATLAB bazen karmaşık sonuçlar üretebiliyor bunun için simplify() komutunu kullanabilirsiniz.

Aykut tarafından 3 yıl önce cevaplandı

Teşekkürler. Evet, yeniden kurulum yapınca düzeldi. simplify () komutunu ekledim fakat sonuç yine aşağıdaki gibi çıktı.
clear
clc
syms X
T=303.15;
P=487890;
A=10.44+1.767*X+0.9823*X^2+0.3627*X^3;
B=2013.8-2155*X+1540.9*X^2-197.7*X^3;
%log10(P)=(A*(T5+273.16)-B)/(T+273.16)
denklem=A-B/T==log10(P)
cevap=solve(denklem,X)
simplify(cevap)
ans =

root(z^3 – (248623151*z^2)/61530501 + (538133210*z)/61530501 – 8068885377321144016075/4329824083992498929664, z, 1)
root(z^3 – (248623151*z^2)/61530501 + (538133210*z)/61530501 – 8068885377321144016075/4329824083992498929664, z, 2)
root(z^3 – (248623151*z^2)/61530501 + (538133210*z)/61530501 – 8068885377321144016075/4329824083992498929664, z, 3)
 
Sadece T ve P değerlerini girerek sonucun aşağıdaki gibi çıkmasını sağlayamaz mıyız? Yukarıda açıkladığım gibi, kendim denklemi düzenlersem bu şekilde sonuç veriyor.
 
ans =
1.7673 + 0.4703i
1.7673 – 0.4703i
0.5654 + 0.0000i
 

Özgür Yönetici tarafından 3 yıl önce cevaplandı

Anladım muhtemelen sonuç karmaşık sayı içerdiği için simplify() komutu aynı sonucu veriyor. İsterseniz birde vpa() komutunu araştırabilirsiniz geçmiş tecrübelerimden hatırladığım kadarıyla (NET HATIRLAMAMAKLA BİRLİKTE) karmaşık sayı için vpa() fonksiyonunu kullanıyordum. Diğer sorunuza gelirsek başlangıçta T ve P değerleri de syms olarak tanımlandıktan sonra denklemi çözerken T ve P değerlerini girerek sonucu elde edebileceğinizi düşünüyorum. Bunun içinde Symbolic Toolbox bu linki inceleyebilirsiniz.

Aykut tarafından 3 yıl önce cevaplandı

Teşekkürler, vpa() ile sonuç sadeleşti.

Aykut tarafından 3 yıl önce cevaplandı

Aşağıdaki sonuçlar içinden karmaşık olmayan sonucu "0.56442814426920651499437013336015" nasıl seçebilirim.
 
ans =

0.56442814426920651499437013336015
1.7380705942539087062429038193103 – 0.52959930320943337254596941251597i
1.7380705942539087062429038193103 + 0.52959930320943337254596941251597i

Özgür Yönetici tarafından 3 yıl önce cevaplandı

Bu işlem için real() fonksiyonunu kullanabilirsiniz. Sanal kısım için imag() fonksiyonunu kullabilirsiniz. Ayrıca MATLAB' de virgülden sonraki basamak sayısını da gösterirken ayarlama yapılabildiğini de hatırlatmak isterim.

Aykut tarafından 3 yıl önce cevaplandı

real() komutunu kullandığım zaman karmaşık sayıların da real kısımlarını alıyor. Fakat karmaşık sayılar sonuç olmadığı için sadece karmaşık olmayan sonuçlar benim için sonuç olarak alınması gerekiyor, ayrıca dediğiniz gibi virgülden sonrasını da 4 basamak olarak nasıl ayarlayabilirim. kısacası sonucumun 0.5644 olması gerekiyor.
real() komutu ile sonuç böyle çıkıyor
 
0.56442814426920651499437013336015
1.7380705942539087062429038193103
1.7380705942539087062429038193103