定义符号变量矩阵,求解梯度函数及其函数值

本文介绍在Matlab中使用符号变量存入矩阵来计算高维函数梯度的方法,通过实例展示如何定义和计算梯度函数,并讨论了在求解特定点梯度值时遇到的参数匹配问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

符号变量存入矩阵,便于计算高维函数梯度的求解

定义方式:

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))];

  结果提示最后一行参数不匹配。

转载于:https://www.cnblogs.com/ibiancheng/p/9897092.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值