请高手帮我看一下我的matlab程序错在哪里了? min (1000-x(1)^2-2*x(2)^2-x(3)^2-x(1)*x(2)-x(1)*x(3))

作者&投稿:毕友 (若有异议请与网页底部的电邮联系)
1 新建m文件把function y=opt_funl(x)贴进去保存;
2 新建m文件把
function [c,ceq]=opt_conl(x)
ceq=[x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-25];%%去掉第二个式子,那是线性的,不是非线性的
c=[];
贴进去保存,ceq是非线性等式约束,楼主的第二个式子是线性的。
3 在command window里输入

>> options=optimset('LargeScale','off','Display','iter','TolFun',1e-30,'TolX',1e-15,'TolCon',1e-20);
x0=[1;1;1];lb=[0;0;0];Aeq=[8 14 7];Beq=[56];%%线性等式约束用Aeq和beq
[x,f_opt,c,d]=fmincon('opt_funl',x0,[],[],[8 14 7],[56],[0;0;0],[],'opt_conl',options)

max Directional First-order
Iter F-count f(x) constraint Step-size derivative optimality Procedure
0 4 994 27 Infeasible start point
1 10 955.336 22.9 0.25 -295 18.3 infeasible
2 14 964.012 5.773 1 0.811 6.26 Hessian modified
3 18 967.157 0.5242 1 2.83 4.27 Hessian modified
4 22 965.898 0.2011 1 -1.38 3.67
5 26 957.178 3.886 1 -11 0.251
6 30 961.697 0.2039 1 4.24 1.59
7 34 961.564 0.1416 1 -0.196 1.63
8 38 961.679 0.02987 1 0.1 0.0113
9 42 961.715 1.734e-005 1 0.0365 0.002
10 46 961.715 9.332e-011 1 2.12e-005 0.000116 Hessian modified twice
11 50 961.715 2.56e-009 1 -5.53e-009 3.51e-005 Hessian modified
12 54 961.715 6.622e-011 1 2.95e-009 2.67e-006 Hessian modified
13 58 961.715 5.947e-012 1 7.25e-011 7.69e-006 Hessian modified
14 62 961.715 1.357e-012 1 1.4e-012 3.45e-006 Hessian modified
15 72 961.715 1.386e-012 0.0156 1.3e-011 2.55e-005 Hessian modified
16 76 961.715 3.553e-015 1 1.84e-012 3.54e-006 Hessian modified
17 81 961.715 0 0.5 -1.55e-014 6.49e-007 Hessian modified
18 85 961.715 7.105e-015 1 -5.16e-015 8e-006 Hessian modified
19 89 961.715 0 1 7.06e-015 8.32e-006 Hessian modified twice
20 93 961.715 0 1 8.83e-019 6.51e-006 Hessian modified twice
21 97 961.715 0 1 -6.05e-028 1.33e-006 Hessian modified twice
Optimization terminated: magnitude of search direction less than 2*options.TolX
and maximum constraint violation is less than options.TolCon.
No active inequalities.

x =

3.5121
0.2170
3.5522

f_opt =

961.7152

c =

4

d =

iterations: 21
funcCount: 97
stepsize: 1
algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
firstorderopt: 1.3292e-006
cgiterations: []
message: [1x142 char]

建议你去官网看看 或者下载视频教程

是不是 opt_fun1 与opt_funl的1与l的区别!

请高手帮我看一下我的matlab程序错在哪里了? max(min{f1,f2,f3,f4,f5,f6,f7})~

有两点疑问:
1、为了保证整数解且两两不等而引入的非线性等式约束,为什么不从1次方开始(当然,经测试,似乎并无影响)?
2、非线性等式约束的第4次项加入时,为什么认为“得到的解是错误的”?就因为“不但不满足整数要求,最小的最大值也不为-7”吗?
这种原因好像有点说不过去:
(1)要满足整数解的要求,7个变量应该有7个方程的约束,你刚加了两个方程不满足整数解是很正常的;
(2)怎么知道最小的最大值就一定为-7呢?(另,我这里试过,加入第4项约束时,最小最大值的确还是-7)

帮你改写了一下非线性约束条件:
function [C,ceq] = ghun(x)C = []; ceq = zeros(14,1);for i=1:7 ceq(2*i-1) = sum(x(1:7).^(i+1)) - sum((1:7).^(i+1)); ceq(2*i) = sum(x(8:14).^(i+1)) - sum((1:7).^(i+1));end
求解得到的结果是:
x = Columns 1 through 11 7 4 1 5 6 2 3 2 3 5 6 Columns 12 through 14 7 4 1y = -6 -8 -9 -4 -2 -9 -11也就是说,最终优化的结果是-2(换用另外一种优化方法得到的结果相同)。

问题分析

你的这段程序问题太多了,条件说的也不够清楚,所以,分析很大程度上靠猜测:
1、程序中有多处sigma应为字母f(出现在12处,共计16个),例如:
isigma--> if(4处)
sigmaprintsigma --> fprintf (2处)
osigmasigma--> off (2处)
sigmasolve --> fsolve (2处)
oversigmalow --> overflow (2处)
我感到非常奇怪,为什么会出现这样的错误?

2、函数开始处:
function[x,y]=Solvequation(a,DB,sigma,r,tau)if C>=DB a=C;else a=DB;end 存在两个问题:
(1)C被使用但未定义;
(2)被传入的参数a根本没有用到。
怀疑被传入的第一个参数应该是C而不是a,即函数定义应为
function[x,y]=Solvequation(C,DB,sigma,r,tau)
3、调用函数的数据没说清楚。按照你所给的数据:
σE=1.03402127, E=6852804951,r=3.25%,τ=1, B=195162000
σE =0.43666672, E=2503241663,r=3.25%,τ=1,B=3155000000
这些符号与函数Solvequation的输入参数(C,DB,sigma,r,tau)并不能很清晰地对应。猜测可能按照下面的对应关系:
σE --> sigma
E --> C
r --> r
τ --> tau
B --> DB

如果按照这样对应关系调用函数,得到的结果分别是:
(1)第一组数据
overflow!Too small.x = 0.2880y = 3.7690e+010(2)第二组数据
x = 0.2000y = 1.0932e+010
参考代码
修改后的函数以及调用代码如下(可保存在一个M文件中运行):
function zd918361556824217139sigma=1.03402127;C=6852804951;r=3.25;tau=1;DB=195162000;[x,y]=Solvequation(C,DB,sigma,r,tau)sigma =0.43666672;C=2503241663;r=3.25;tau=1;DB=3155000000;[x,y]=Solvequation(C,DB,sigma,r,tau)function[x,y]=Solvequation(C,DB,sigma,r,tau)if C>=DB a=C;else a=DB;endy=a/2;w=a/10;eye=a/1000;N=50;h1=0;h2=1e+5;max=w*N+y;while w>=eye J=0; while max>=y J=J+1; %equation 1 x1=fsolve(@(x)x*y*quadl('exp(-t.^2/2)/sqrt(2*pi)',0,(log(y/DB)+x.^2*tau/2+r*tau)/(x.*tau^0.5))-C*sigma,0.2,optimset('display','off')); %equation 2 x2=fsolve(@(x)DB*exp(-r*tau)*quadl('exp(-t.^2/2)/sqrt(2*pi)',0,(log(y/DB)-x.^2*tau/2+r*tau)/(x*tau^0.5))-y*quadl('exp(-t.^2/2)/sqrt(2*pi)',0,(log(y/DB)+x.^2*tau/2+r*tau)/(x*tau^0.5))+C,0.2,optimset('display','off')); %optimization y if abs(h1-h2)>abs(x1-x2) h1=x1;h2=x2;l=y;M=J; end y=y+w; end if M=N fprintf('overflow!Too small.');break end end y=l-w;max=y+2*w;w=w/10;endx=(h1+h2)/2;y=l;

matlab高手帮我看看怎么把几个相交的曲面弄透明,汇出交线~~~
答:。5、透明度可用alpga函数调整,0为完全透明,1为不透明。需要说明的是,设置透明之后,红绿蓝看上去不再是很纯正的颜色。6、绘制平面和曲面交线可使用函数contourslice,该函数应该也可用于两个曲面相交的场合,但我没有进一步考虑,只是提供一个线索给楼主,感兴趣的话不妨自行研究。

matlab的非线性优化问题,我自己编了一下,有问题,我把我的程序发上来,希...
答:约束条件 function[c,ceq]=nonlcon(x)c(1)=(863.4*x(1))/x(2)-x(3).^3;c(2)=x(2)+x(2)/x(1)-120;ceq=[];--- >> funn=@(x)x(2)*x(3)+(x(2)*x(3))/x(1);>> vlb=[0.25;18;1.5];%x1,x2,x3的下限值 vub=[1;100;6];%x1,x2,x3的上限值 x0=[...

我的MATLAB程序一直在运行,不出结果,左下角一直显示正忙,有没有大神...
答:可能是因为程序进入了一个死循环,或者计算量较大导致计算时间较长。建议检查代码逻辑和变量计算过程,将程序拆分成小部分进行单独运行和调试,也可以增加监控代码或使用MATLAB自带的Profiler工具进行性能分析,找出程序的瓶颈并优化。

matlab高手帮我看看怎样把这2个曲线最左边都放在圆点处。。。
答:不知道这样是否符合要求:做法其实就是把第一条曲线整体下移了初始的偏移值,程序如下:原程序第四行plot(r,y);换成plot(r,y-y(1));当然这就造成整条曲线的函数值都比实际值小,如果在保证函数值不变的前提下左端移到同一点应该无法实现。

请帮我看一看matlab这段代码哪里错了?
答:题主编写的代码内容是基本要求,但出现错误的根本原因是没有正确理解计算流程,什么是函数。所以,我们写程序基本分成两大块:第一块是主程序(可以写成主执行函数,也可以在命令窗口中输入),即 ts=0:50;x0=[0.0034424, 0.99431988];[t,x]=ode45(@ill,ts,x0);[t,x]figure(1)plot(t,x(:...

matlab高手帮我看看啊
答:这样表达就可以了。Sigma_1 =1.2030;I_1 =1.1200;I_2 =1.0863;I_5 =0.0830;x=0.4;T =1.1837e-007;rho=0.5;Q=6;e=1.60218*10^(-19);z =1.5972e-032;syms d;Sigma1=Sigma_1+d*I_2;I5=Sigma1-I_1;r_1=-(Sigma1+I5)/(2*Sigma1*I5)+[(Sigma1+I5)^2+16*(...

求高手帮忙看下,MATLAB为什么这个程序里面的3个disp在程序运行后并没...
答:你的代码后面的循环中,判断语句太长了,没法看。你的意思是满足条件 找出符合条件的mm、nn、kk及对应的M、N、K值,是吧?clear all;clc;M=0:20;N=0:20;K=0:20;for m=1:21;for n=1:21;for k=1:21;if M(m)+N(n)+K(k)<=20 p(m+n+k)=20-M(m)-N(n)-K(k);else p(...

大神帮我看看这个MATLAB二重积分程序哪里有错啊
答:括号的位置写错了。从表达式上分析,你的本意应该是想对函数 2*0.89*sqrt(1-(y-0.6)^2/0.36)进行积分,而积分下限为2.45*0.41129/2.05,上限为2.45*0.41129/2.05-z*tan(deg2rad(4.1)),是z的函数,然后再对z进行积分。但是,你把一个括号写错了位置,不妨把里面那个积分表达式单独...

谁能帮我看看MATLAB,X=ones(size(y))*x;什么意思啊
答:就是构造一个新的矩阵X,它的左半部分是和矩阵x一样行列数的全1矩阵。size就是获得一个矩阵行和列的个数(若是3维矩阵或更高维矩阵也一样)ones则是构造一个元素全是1的矩阵,行列数根据输入的数调整。举个例子:若原矩阵x=[01;23]即一个 ...

matlab高手帮我看看程序错哪里吧
答:.^2+(1-X).^2;subplot(2,2,2);surfc(X,Y,z2)shading interp z3=atan(X.^4+sin(Y));subplot(2,2,3);surfc(X,Y,z3)shading interp 画3D图要用矩阵来运算,用向量不要用surfc arcos是你自创的吧?应该是acos 而且acos的范围是-1~1你的熟入范围不对,我给你换成了atan ...