24小时热门版块排行榜    

CyRhmU.jpeg
查看: 359  |  回复: 1

missqiushui

新虫 (初入文坛)


[交流] matlab牛顿法如何调用问题,调用部分总是出错已有1人参与

牛顿法的程序:
function [minx,minf]=example3g(f,x0,var,eps)
%目标函数:f
%初始点:x0
%自变量向量var
%精度:eps
%目标函数取最小值时的自变量值:minx;
%目标函数的最小值:minf

format long;
if nargin==4
    eps=1.0e-6;
end
tol=1;
x0=transpose(x0);
while tol>eps           
    gradutef=jacobian(f,var);      %梯度方向
                                           %其大概意思是:函数jacobian就是雅可比矩阵,
                                           %命令jacobian(f,v)是计算标量函数或矢量函数f关于矢量v的雅可比矩阵。
                                           %其结果就相当于df/dv。需要注意的是,当f是标量时,就相当于是求f的梯度。
    jacf=Jacobian(gradutef,var);   %雅克比矩阵
    v=Funval(gradutef,var,x0);
    tol=norm(v);
    pv=Funval(jacf,var,x0);
    p=-inv(pv)*transpose(v);    %搜索方向
    x1=x0+p;
    x0=x1;
end

minx=x1;
minf=Funval(f,var,minx);
format short;

想优化的函数:
function f=op(x)
f=561+7.92*x(1)+0.001562*x(1)^2+310+7.85*x(2)+0.00194*x(2)^2+78+7.97*x(3)+0.00482*x(3)^2+x(4)*(800-x(1)-x(2)-x(3));

调用部分,不知道var部分如何初始化
syms x x0;
x0=[300 200 300 10];
[minx,minf]=example3g(op,x0,[x(1) x(2) x(3) x(4)],1e-6)
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

48038074

铜虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
为什么不自己写一个?牛顿法的matlab不难啊。。。把雅各比矩阵的元素推出来就行,不就是求偏导么?!函数又很简单。。。
世间所有的相遇,都是久别重逢~
2楼2015-11-23 00:40:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 missqiushui 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见