[已解决] 有偿指导电路的非线性最优问题

[复制链接]
caoyunquan 发表于 2022-7-26 10:19:46
1.png 2.png 3.png
已经照葫芦画瓢弄出了以下函数:
function y=f(Rm)
Pn=22000;Un=380;fn=50;lambda=2;
r1=0.2;r2=0.2;x1=0.6;x2=0.6;xm=17.62;rm=0;n1=1500;In=44;ne=1440;
TL=9.55*Pn/ne;Tm=lambda*TL;
w1=2*pi*fn;s=1;
Z1=r1+0.6i;
Zm=rm+17.62i;
z1=abs(Z1);
zm=abs(Zm);
%Z2=Rm/s+0.6i;
%I1=Un/(Z1+(Rm/s+0.6i)*Zm/((Rm/s+0.6i)+Zm));
y=Un/(z1+(abs(Rm/s+0.6i))*zm/(abs(Rm/s+0.6i)+zm))-2*In;%目标函数

function [C1 C2]=nonlin(Rm)
Pn=22000;Un=380;fn=50;lambda=2;
r1=0.2;r2=0.2;x1=0.6;x2=0.6;xm=17.62;rm=0;n1=1500;In=44;ne=1440;
TL=9.55*Pn/ne;Tm=lambda*TL;
w1=2*pi*fn;s=1;
Z1=r1+0.6i;
Zm=rm+17.62i;
z1=abs(Z1);
zm=abs(Zm);
%Z2=Rm/s+0.6i;
%I1=Un/(Z1+Z2*Zm/(Z2+Zm));
%I2=Un/(Z1+(Rm/s+0.6i)*Zm/((Rm/s+0.6i)+Zm))*Zm/((Rm/s+0.6i)+Zm);


A=0;Aeq=0;beq=0;lb=0;ub=0;
Rm0=0;
[Rm]=fmincon(@f,Rm0,A,Aeq,beq,lb,ub,@nonlin);

最后运行显示

FMINCON requires the following inputs to be of data type double: 'UB'.

最佳答案


TouAkira 发表于 2022-7-26 22:10:58
caoyunquan 发表于 2022-7-26 02:45
您好,之后我增加了b=0;然后nonlin改为nonlcon;
最后还是报错:
这是代码:

你这难道没自己验证过约束条件??把你的初值代入进去,C1算出来是个复数,复数又不能比较大小,怎么做约束?

3 条回复


TouAkira 发表于 2022-7-26 13:17:14
你没严格按照示例写。
fmincon函数(超链接,自己点进去看) 帮助文档一上来就写明了调用语法形式
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

对比一下就知道,你的参数缺了一个,即b ,导致Aeq实际上出现在 b 的位置上,后面的其他参数也都因此错位,你的ub出现在lb位置上,而该放ub的位置被你放的是@nonlin,那当然不对了。
还有你的约束 nonlin 也不对,C1 C2这两个输出没出现在其中,这个函数是没法调用的。

caoyunquan 发表于 2022-7-26 14:45:14
TouAkira 发表于 2022-7-26 13:17
你没严格按照示例写。
fmincon函数(超链接,自己点进去看) 帮助文档一上来就写明了调用语法形式

您好,之后我增加了b=0;然后nonlin改为nonlcon;
最后还是报错:
这是代码:
function [C1 C2]=nonlcon(Rm)
Pn=22000;Un=380;fn=50;lambda=2;
r1=0.2;r2=0.2;x1=0.6;x2=0.6;xm=17.62;rm=0;n1=1500;In=44;ne=1440;
TL=9.55*Pn/ne;Tm=lambda*TL;
w1=2*pi*fn;s=1;
Z1=r1+0.6i;
Zm=rm+17.62i;
z1=abs(Z1);
zm=abs(Zm);
Rm0=0.2;
%Z2=Rm/s+0.6i;
%I1=Un/(Z1+Z2*Zm/(Z2+Zm));
%I2=Un/(Z1+(Rm/s+0.6i)*Zm/((Rm/s+0.6i)+Zm))*Zm/((Rm/s+0.6i)+Zm);
%i1=abs(I1);
%i2=abs(I2);
%T=3*I2^2*Rm/(s*w1);
C1=0.85*Tm-3*(Un/(Z1+(abs(Rm/s+0.6i))*zm/(abs(Rm/s+0.6i)+zm))*zm/(abs(Rm/s+0.6i)+zm))^2*Rm/(s*w1);%约束条件
C2=0;
clear;
A=0;b=0;Aeq=0;beq=0;lb=0.2;ub=inf;
Rm0=0.2;
Rm=fmincon(@f,Rm0,A,b,Aeq,beq,lb,ub,@nonlcon);
错误使用 barrier
Nonlinear constraint function is undefined at initial point. Fmincon cannot continue.

TouAkira 发表于 2022-7-26 22:10:58
caoyunquan 发表于 2022-7-26 02:45
您好,之后我增加了b=0;然后nonlin改为nonlcon;
最后还是报错:
这是代码:

你这难道没自己验证过约束条件??把你的初值代入进去,C1算出来是个复数,复数又不能比较大小,怎么做约束?
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表