定義符號變量矩陣,求解梯度函數及其函數值


符號變量存入矩陣,便於計算高維函數梯度的求解

定義方式:

for i = 1:n
     x(i) = syms(['x' num2str(i)]);
end

以n維Hager函數為例,

f=sum(exp(xi)-sqrt(i)*xi)

1 fx = 0;
2 for i = 1:n
3     fx = fx+exp(x(i))-sqrt(i)*x(i);
4 end

梯度函數:

for i = 1:n
    'f_x'num2str(i)  = diff(f,x(i));
end

  此時的梯度函數為符號函數(個人理解即為函數表達式),可用matlabFunction(函數)轉化為函數

for i = 1:n
    'fx' num2str(i) = matlabFunction('f_x' num2str(i));
end

  繼而可以求解梯度函數值。

然而,到此遇到了一個問題,函數的偏導數維數往往不是n,想要求梯度函數在某個點處的值,若將改點坐標直接帶入梯度函數fxi(函數f關於xi的偏導函數),會提示參數不匹配,又該如何解決?問題可簡述如下,至今沒有好的思路,歡迎各路大神指導。

代碼如下:

clear all
clc
syms x1 x2 x3;
f = x1^2+0.5*x2^2+0.5*x3^;
X = [1;1;1];
f_x1 = diff(f,x1);
f_x2 = diff(f,x2);
f_x3 = diff(f,x3);
fx1 = matlabFunction(f_x1);
fx2 = matlabFunction(f_x2);
fx3 = matlabFunction(f_x3);
g1 = [fx1(X(1),X(2),X(3)),fx2(X(1),X(2),X(3)),fx3(X(1),X(2),X(3))];

  結果提示最后一行參數不匹配。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM