Saya menggunakan Matlab untuk mencari akar fungsi non-linier. Persamaannya panjang dan saya telah menggunakan .m
lain untuk menyimpan fungsinya, seperti kodenya
function x_c = f_x_c(s,H,VA,Lo,qc,EA,NF,Sj,Fj)
if (s < 0) || (s > Lo);
disp('The value of s is invalid')
disp(['s = ' num2str(s)]);
return
end
C1 = H/qc;
if NF == 0
n = 0;
sn = 0;
sum_Fj = 0;
end
if NF >= 1
Sj_Q = [0; Sj; Lo];
%Determine n and sn if 0 <= s < Lo:
if s < Lo
STOP = 0;
k = 0;
while STOP == 0
k = k + 1;
if (s >= Sj_Q(k,1)) && (s < Sj_Q((k + 1),1))
STOP = 1;
end
end
n = k - 1;
sn = Sj_Q(k,1);
end
%Determine n and sn if s = Lo:
if s == Lo
n = NF;
sn = Sj(NF,1);
end
sum_Fj = sum(Fj(1:n,1));
end
x_c = (H/EA)*s;
x_c = x_c + C1*asinh((qc*s - VA + sum_Fj)/H) + ...
- C1*asinh((qc*sn - VA + sum_Fj)/H);
for j = 1:n
sk = Sj_Q((j + 1),1);
sk_1 = Sj_Q(j,1);
sum_Fj = sum(Fj(1:(j - 1)));
x_c = x_c + ...
+ C1*asinh((qc*sk - VA + sum_Fj)/H) + ...
- C1*asinh((qc*sk_1 - VA + sum_Fj)/H);
end
Variabelnya adalah H
di sini. Tidak ada masalah dengan kode tersebut karena ia mengembalikan persamaan panjang itu kepada saya ketika saya mengetikkan yang berikut ini di file utama.
syms x
equation = -(XB - XA) + f_x_c(s,x,VA,Lo,qc,EA,NF,Sj,Fj); %Replaced H with variable H and all other arguments are pre-defined
Sekarang, saya ingin menyelesaikan persamaan ini mendekati H0
. Ketika saya memasukkan fzero(@(x)equation, H0)
, itu memberi saya kesalahan seperti itu
Undefined function 'isfinite' for input arguments of type 'sym'.
Error in fzero (line 308)
elseif ~isfinite(fx) || ~isreal(fx)
Error in main (line 50)
fzero(@(x)equation, H0)
Bagaimana cara mengatasi masalah ini?
EDIT:
Persamaan memiliki setidaknya satu akar karena jika saya menggunakan ezplot
untuk memplot fungsinya, saya mendapatkan gambar berikut.
fzero.m
, ada satu baris yang memilikiisfinite
. Baris itu berbunyi sepertiif any(~isfinite([fa fb])) || any(~isreal([fa fb]))
- person India Slaver   schedule 02.12.2014function x_c = equation = XB - XA + f_x_c(s,x,VA,Lo,qc,EA,NF,Sj,Fj);
juga tidak dapat dijalankan. Bolehkah saya bertanya apa yang ingin Anda lakukan? Apakah Anda memiliki file fungsi yang mengambil masukan dan memberikan keluaran, yang ingin Anda cari akarnya? - person patrik   schedule 02.12.2014syms x; function x_c = equation = XB - XA + f_x_c(s,x,VA,Lo,qc,EA,NF,Sj,Fj);
Harus memberikan kesalahan kompilasi. Ketiga, apakah kotak alat simbolis benar-benar diperlukan di sini? - person patrik   schedule 02.12.2014fzero
. Jika saya menggunakandisp(x_c)
, ini menunjukkan persamaan besar yang ingin saya pecahkan. - person India Slaver   schedule 02.12.2014syms x; function x_c = equation = XB - XA + f_x_c(s,x,VA,Lo,qc,EA,NF,Sj,Fj);
ini tidak bisa seperti yang terlihat, karena ini memberikan kesalahan kompilasi. Kata kuncifunction
tidak berfungsi seperti ini! Selain itu,x_c = equation = XB...
bukanlah sintaks yang benar. Jika Anda memerlukan bantuan, berikan contoh kode yang berfungsi. Saya tahu apa masalahnya, tetapi kecuali saya tidak tahu persis bagaimana Anda mendapatkan kesalahan tersebut, saya tidak akan dapat membantu Anda dengan cara yang baik. Saya dapat mengatakan bahwa Anda perlu menulis ulang kode dengan cara yang benar-benar berbeda, yang berhasil, tetapi menurut saya ini bukan pilihan bagi Anda. - person patrik   schedule 02.12.2014x_c = equation = XB...
ada kesalahan di sini. Saya tidak menyadarinya. Itu benar dalam kode saya. Ada 5 file kode. Haruskah saya posting semuanya di sini? Atau bisakah saya menghubungi Anda di tempat lain? Tolong bantu saya! - person India Slaver   schedule 02.12.2014