matlab diff函數用法,matlab符號代入subs運算慢加速——使用matlabFunction函數

 2023-10-20 阅读 29 评论 0

摘要:方法 假設要繪制一個曲面函數,自變量名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); 接下來要把數值

方法

假設要繪制一個曲面函數,自變量名xy,因變量名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);

接下來要把數值矩陣XY分別代入符號對象xy,以求得曲面函數在第三維度Z軸上的取值。此時有兩種方法:

  1. 傳統double(subs())方法。
    Z = double(subs(surface_equ,{x,y},{X,Y}));
  2. matlabFunction()方法。
    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 函數句柄中的xy僅僅是函數形參不是符號對象。除了名稱之外,這兩個函數形參和我們之前定義的符號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 中國

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/159082.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息