Fungsi Matlab Buatan Pengguna Gagal Setelah Semua Variabel Dihapus

Saya awalnya menanyakan pertanyaan ini kemarin dan menemukan jawabannya sendiri; namun, saya menggunakan perintah clear all di Matlab dan sekarang fungsinya menimbulkan kesalahan Undefined function or variable 'y'. Saya menggunakan kode dari fungsi jawaban saya [s1] = L_Analytic3(eqn,t0,h,numstep,y0)

%Differential Equation solver for specific inputs
%   eqn is the differential equation
%   t0 is start of evaluation interval
%   h is stepize
%   numstep is the number of steps
%   y0 is the initial condition

syms y(x)
cond = y(0) == y0;
A = dsolve(eqn, cond);
s1 = A;
S1 = s1;
for x = t0 : h : h*(numstep)
    subs(x);
    if x == t0    
        S1 = subs(s1,x);
    else 
      S1 = [subs(S1), subs(s1,vpa(x))];
    end
end
end

dan juga masukkan L_Analytic3(diff(y) == y,0,0.1,5,1) ke dalam Command Window setelah memasukkan clear all. Saya harus menjalankan kode terpisah

syms y(x)
cond = y(0) == 1;
A = dsolve(diff(y) == y, cond);

sebelum menggunakan fungsi saya agar fungsi tersebut berfungsi. Apakah ini hanya karena A,ans,cond,x, dan y sudah ditentukan oleh kode 3 baris sebelum menggunakan fungsi tersebut? Jika ya, adakah cara agar saya dapat menggunakan fungsi tersebut tanpa harus menggunakan kode 3 baris tersebut terlebih dahulu?


person ApBrown    schedule 19.06.2018    source sumber


Jawaban (1)


Ketika Anda melakukan L_Analytic3(diff(y) == ...); Anda tidak memiliki variabel y yang ditentukan, jadi MATLAB mengeluh - tidak ada cara untuk mengetahui y adalah simbol yang akan didefinisikan dalam fungsi yang Anda panggil. Anda tidak memerlukan ketiga baris kode tersebut. syms y(x) seharusnya cukup untuk mendefinisikan y dan memungkinkan Anda menggunakan pemanggilan fungsi yang Anda inginkan.

Sekarang, ada 2 cara mudah untuk memperbaikinya yang saya lihat:

  1. Sebuah skrip (atau fungsi lain) yang memiliki syms y(x), diikuti dengan panggilan ke L_Analytic3 seperti yang Anda lakukan (yang sekarang tidak memerlukan syms y(x), sudah ditentukan).
  2. Berikan persamaan anonim sebagai masukan, ucapkan @(x) diff(x)==x, dan ubah sedikit baris L_Analytic3 menjadi A = dsolve(eqn(y), cond);

Kedua cara berfungsi dengan baik untuk ini, tidak tahu apakah cara kedua rusak dalam kasus yang lebih kompleks. Saya mungkin akan memilih versi pertama jika Anda melakukan hal-hal simbolik, dan versi kedua jika Anda ingin memiliki pemanggilan fungsi yang sama untuk fungsi numerik dan simbolik.

person Zizy Archer    schedule 19.06.2018
comment
Saya memasukkannya ke dalam skrip dan mendefinisikan input variabel dan itu berfungsi dengan sempurna. Terima kasih @Zizy Pemanah - person ApBrown; 20.06.2018