当使用JacobianMultiplyFcn lsqnonlin,动力系统需要数字是为什么呢?我怎么能更一般的类型的参数传递给我的JacobianMultiplyFcn吗?

5视图(30天)
我想做的是使用JacobianMultiplyFcn选项lsqnonlin trust-region-reflective算法的动力系统是一个结构体携带参数使用雅可比矩阵乘法操作。下面是一个简化的例子。
然而,一个错误产生,表明动力系统是不允许结构。我想的全部意义JacobianMultiplyFcn选项是一个实际的数字雅可比矩阵不需要。那么,应该是动力,我如何能实现我想要的?
一个=兰德(3);(:,结束)= 1;
选择= optimoptions (“lsqnonlin”,“算法”,“trust-region-reflective”,
“OptimalityTol”1 e-20“FunctionTol”1 e-30“StepTol”1 e-20
“SpecifyObjective”,真的,“JacobianMultiplyFcn”,@jmfunc);
[x, res] = lsqnonlin (@ (x) resFcn (x),兰德(3,1),[],[],选择)
错误的数量或类型的输入或输出函数“非零”。

错误lsqncommon(18)行
如果任何(~ isfinite(非零(initVals.J)))

错误lsqnonlin(第260行)
lsqncommon (funfcn xCurrent,磅,乌兰巴托,选项,defaultopt, optimgetFlag,调用者,…
函数[r,动力系统]= resFcn (x))
r = [* x, x (:)。^ 2/2] - [4、4、4、0 0; 8];
Jinfo.A =一个;
Jinfo.x = x;
结束
函数W = jmfunc(动力系统,Y,标志)
一个= Jinfo.A;
x = Jinfo.x;
开关号(国旗)
情况下0
W =“* (* Y) + Y * x ^ 2;
情况下1
W = [* Y; x。* Y];
情况下1
P = Y(1:结束/ 2);
Q = Y(端/ 2 + 1:端);
W =。”* P + x。*;
结束
结束

接受的答案

马特·J
马特·J 2023年1月25日
编辑:马特·J 2023年2月3日
我似乎已经能够愚弄 lsqnonlin 做我想要通过使用附加classdef。但是,我仍然想知道,紧张,为什么优化工具箱试图阻止我这样做。
一个=兰德(3);(:,结束)= 1;
选择= optimoptions (“lsqnonlin”,“算法”,“trust-region-reflective”,
“OptimalityTol”1 e-20“FunctionTol”1 e-30“StepTol”1 e-20
“SpecifyObjective”,真的,“JacobianMultiplyFcn”,@jmfunc);
[x, res] = lsqnonlin (@ (x) resFcn (x),兰德(3,1),[],[],选择)
局部最小值。lsqnonlin停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。
x = 3×1
-0.0000 0.0000 4.0000
res = 1.5777 e-30
函数[r,动力系统]= resFcn (x))
r = [* x, x (:)。^ 2/2] - [4、4、4、0 0; 8];
s.a. =一个;
s.x = x;
动力系统= JMInfo(年代);
结束
函数W = jmfunc(动力系统,Y,标志)
一个= Jinfo.s.A;
x = Jinfo.s.x;
开关号(国旗)
情况下0
W =“* (* Y) + Y * x ^ 2;
情况下1
W = [* Y; x。* Y];
情况下1
P = Y(1:结束/ 2);
Q = Y(端/ 2 + 1:端);
W =。”* P + x。*;
结束
结束

更多的答案(0)

类别

找到更多的在和迭代解算器输出显示帮助中心文件交换

下载188bet金宝搏


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!