将Matlab函数转换为Simulink函数时出现的问题
我需要转换这个函数,它实现了梯度下降算法:将Matlab函数转换为Simulink函数时出现的问题,matlab,model-view-controller,simulink,predict,gradient-descent,Matlab,Model View Controller,Simulink,Predict,Gradient Descent,我需要转换这个函数,它实现了梯度下降算法: function [xopt, fopt, niteration, gnorm, dx] = grad_descent2(varargin) if nargin == 0 x0 = [3 3]'; elseif nargin == 1 x0 = varargin{1}; end tolerance = 1e-6; maxiteration = 1000; dxmin = 1e-6; alpha = 0.01; gnorm = inf
function [xopt, fopt, niteration, gnorm, dx] = grad_descent2(varargin)
if nargin == 0
x0 = [3 3]';
elseif nargin == 1
x0 = varargin{1};
end
tolerance = 1e-6;
maxiteration = 1000;
dxmin = 1e-6;
alpha = 0.01;
gnorm = inf;
x = x0;
niteration = 0;
dx = inf;
f = @(x1, x2) x1.^2 + 3*x2.^2;
figure(1); clf; fcontour(f, [-5 5 -5 5]); axis equal;hold on
f2 = @(x) f(x(1), x(2));
while and(gnorm >= tolerance, and(niteration <=maxiteration, dx >= dxmin))
g = grad(x);
gnorm = norm(g);
xnew = x - alpha*g;
plot([x(1) xnew(1)], [x(2) xnew(2)], 'ko-')
refresh
niteration = niteration + 1;
dx = norm(xnew - x);
x = xnew;
end
xopt = x;
fopt = f2(xopt);
niteration = niteration - 1;
end
function g = grad(X)
g = [2*X(1)
2*X(2)];
end
但是Simulink报告了这个错误:
此功能不能完全设置输出端口2的尺寸
Simulink是一个图形模型系统,可以导出代码。我看不到您的,所以我非常不确定代码的哪些部分需要移动到。另外,请提供一个完整的例子。缺少对函数的调用。我需要最小化函数f,因为它是由PMSM电机MPC模型的两个电流值组成的
function[x1opt,x2opt] = grad_descent2(isdpred,isqerr,isdmiss,isqmiss)
x1=isdpred;
x2=isqerr;
x0=[isdmiss,isqmiss];
tolerance = 1e-6;
maxiteration = 1000;
dxmin = 1e-6;
alpha = 0.01;
gnorm = inf;
x = x0;
niteration = 0;
dx = inf;
f = x1.^2+x2.^2;
figure(1); clf; fcontour(f, [-5 5 -5 5]); axis equal;hold on
while and(gnorm >= tolerance, and(niteration <=maxiteration, dx >= dxmin))
g = grad(x);
gnorm = norm(g);
xnew = x - alpha*g;
niteration = niteration + 1;
dx = norm(xnew - x);
x = xnew;
end
x1opt=x(1);
x2opt=x(2);
niteration = niteration - 1;
end
function g = grad(X)
g = [2*X(1)
2*X(2)];
end