How to calculate gradients of a symbolic function
56 次查看(过去 30 天)
显示 更早的评论
Hi,
I have a symbolic function of the form f = 2*y*z*sin(x) + 3*x*sin(z)*cos(y) and want to calcuate gradients with respect to x, y and z. I cannot define syms x y z before creating the function as its an input. Therefore, I defined syms x y z afterwards but its not working. The follwing error appeared:
Unable to convert expression into double array.
How do I calcuate gradients of this symbolic function?
0 个评论
采纳的回答
Walter Roberson
2019-3-13
%construct the input
syms x y z
f(x,y,z) = 2*y*z*sin(x) + 3*x*sin(z)*cos(y);
%and assume you are passing f into a different function so x y z are not still around
g = yadayada(f);
function g = yadayada(f)
%so we have an input symbolic function but for some reason
%we are not in the context where the variables came from.
%it turns out to be as simple as
g = gradient(f);
%or for greater certainty you could
g = gradient(f, symvar(f)); %which is what the simple call does
%or perhaps you have a reason to do
syms x y z
g = gradient(f(x, y, z), [x y z])
%for example it might be a symbolic function in three other
%variables that you want to re-label as x, y, z.
end
0 个评论
更多回答(1 个)
Dirk
2022-9-8
How do I etermine the intervals on which a function is increasing and decreasing for x ϵ [0,4]
1 个评论
Torsten
2022-9-8
syms x
f = x.*cos(x.^2)-exp(sqrt(x))+x.^3-4*x.^2;
df = diff(f,x);
f = matlabFunction(f);
df = matlabFunction(df);
x = 0:0.01:4;
plot(x,f(x))
x0 = [1.75 2.25];
sol(1) = fzero(df,x0);
x0 = [2.25 2.75];
sol(2) = fzero(df,x0);
x0 = [2.75 3.2];
sol(3) = fzero(df,x0);
x0 = [3.25 3.6];
sol(4) = fzero(df,x0);
x0 = [3.75 4];
sol(5) = fzero(df,x0);
sol
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Symbolic Variables, Expressions, Functions, and Preferences 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!