假設要繪制一個曲面函數,自變量名x,y,因變量名surface_equ,均為符號表達式。
syms x y
surface_equ = -1./sqrt(x.^2+y.^2+0.1);
axis_range = [-2:0.01:2];
[X,Y] = meshgrid(axis_range, axis_range);
接下來要把數值矩陣X,Y分別代入符號對象x,y,以求得曲面函數在第三維度Z軸上的取值。此時有兩種方法:
Z = double(subs(surface_equ,{x,y},{X,Y}));
mf = matlabFunction(surface_equ);
Z = mf(X,Y);
matlab diff函數用法?在我的七代i5,matlabR2019b上,第一種方法耗時53.646743秒,第二種0.003489秒,相差15000倍。每個元素的結果誤差在1e-15數量級。
matlabFunction可以將符號表達式轉換為matlab匿名函數,并為該匿名函數生成一個函數句柄。通過以下兩種方法定義的?mf?完全等價。
syms x y
z = -1./sqrt(x.^2+y.^2+0.1);
mf = matlabFunction(z);
mf = @(x,y) -1./sqrt(x.^2+y.^2+0.1);
mf 函數句柄中的x、y僅僅是函數形參,不是符號對象。除了名稱之外,這兩個函數形參和我們之前定義的符號x、y沒有任何關系。?
feval函數 matlab,在大部分場景下,匿名函數和普通matlab函數使用方式一致(當然,僅僅是用起來差不多,內部機制不一定相同):
function z = mf(x, y)z = -1./sqrt(x.^2+y.^2+0.1);
end
matlabFunction:Convert symbolic expression to function handle or file - MATLAB matlabFunction
匿名函數:匿名函數- MATLAB & Simulink- MathWorks 中國
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态