在matlab中,运用共轭梯度求二次函数极小点,程序老是会出现以下状况,请大仙帮我看看,哪边错了感谢

在matlab中,运用共轭梯度求二次函数极小点,程序老是会出现以下状况,请大仙帮我看看,哪边错了感谢,第1张

你的这个 执行结果是生成二维元胞数组 r_{2}=[fx1_2;fx2_2];

我猜你用这个的本意是由可做下标的r_{k},其实循环中不用这样做做下标,只要找个中间变量循环更新一次变量值就可以了 ,帮你改好了,自己编程序要学会调试找错哦

syms x1 x2 k

f=(3/2)(x1^2)+(1/2)(x2^2)-x1x2-2x1;

A=[3 -1;-1 1];

fx1=diff(f,x1);

fx2=diff(f,x2);

fx11=subs(fx1,{x1,x2}, {-2,4});

fx21=subs(fx2,{x1,x2},{-2,4});

x_1=[-2;4];

r1=[fx11;fx21];

p1=-r1;

t1=-((r1)'p1)/((Ap1)'p1);

x_2=x_1+t1p1;

xx={x_2(1),x_2(2)};

fx12=subs(fx1,{x1,x2}, xx);

fx22=subs(fx2,{x1,x2},xx);

r2=[fx12;fx22];

%M=r_{2};

for k=2:10

while norm(r2)>=001

a1=((r2)'r2)/((r1)'r1);

p2=-(r2)+(a1)(p1);

t2=-((r2)'p2)/((Ap2)'(p2));

x_3=x_2+((t2)(p2));

xx={x_2(1),x_2(2)};

fx12=subs(fx1,{x1,x2},xx);

fx22=subs(fx2,{x1,x2},xx);

r2=[fx12;fx22];

x_2=x_3;

end

end

optx=(x_2)

通常最优化的教材后面都会附有程序吧

%Function of the CG method

%What should be inputed are the start point 'xstart',

% the matrix A,vector b and tol

% It would give the solution x ,iterations and the iterative time

function [time,k,x]=normCG(xstart,A,b,tol)

x=xstart; Fx=05x'Ax-b'x;

tol=10^(-6); beta=1;

r=A'xstart-b; %r0

p=-r; %p0

stopc=norm(r,inf);

k=0;

tic;

while(stopc>tol && k<=2000)

r0=r;

p0=p;

rpinfang=r0'r0; %r(k)^2

fenmu=p0'Ap0;

alpha=rpinfang/fenmu; %alpha

x=x+alphap0; %x(k+1)

r=r0+alphaAp0; %r(k+1)

beta=(r'r)/rpinfang; %beta

p=-r+betap0; %p(k+1)

stopc=norm(r,inf);

k=k+1;

if mod(k,10)==0 fprintf(' k=%4d epsm=%93e \n',k,stopc); end;

end

toc;

time=toc;

% fprintf('The iterations is %4d',k);

conj是matlab已有的函数,你这里的函数名也叫conj,运行时matlab会调用matlab原有的conj函数,由于输入参数过多,当然报错>>doc conj

就会看到帮助文档

conj Symbolic complex conjugate

Syntax conj(X)

Description conj(X) is the complex conjugate of X

For a complex X, conj(X) = real(X)- iimag(X)

所以先把函数名字和函数M文件名字改掉,再运行函数,不过我想你这里的函数体里可能仍然会报错!

你i是不是已经被定义为变量了,正常i就是复数单位,可以这样表示的

MATLAB复数处理的常用函数

一、创建复数

1、赋值语句直接产生复数。

2、complex(a,b):该函数产生复数a+bi。

二、求实部

1、real(z):该函数求复数的实部。

三、求虚部

1、imag(z):求复数z的虚部。

四、求复数的值

1、abs(z):求复数z的值。

五、求复数的角度

1、angle(z):求复数z的角度。

六、求共轭复数

1、conj(z):求复数的共轭复数。

这个题目昨天就看到了,怎么会没人回答呢?

原则上,定义了实数范围的4个变量,并不能保证后面的运算结果不产生复数

但是本题中:sqrt(4Dx^2+Jy^2+Jz^2+2JyJz)=sqrt(4Dx^2+(Jy+Jz)^2)

可以看出:根号下的表达式的结果是恒≥0的,应该是不会产生虚数的

所以这里的conj-----求共轭复数,是没有意义的。

%共轭梯度法 FR

% G为对称正定矩阵,X是初始点,e为精度

%a是精确线搜索步长

function [m2,a,d,X,g1,f1] = conjgrad(G,b,c,X,e)

n=length(G);

if n==2

format long e %rat

syms x1 x2

f=1/2[x1,x2]G[x1;x2]+b'[x1;x2]+c;

g=[diff(f,x1);diff(f,x2)];

g1=subs(subs(g,x1,X(1,1)),x2,X(2,1));

d=-g1;

a=-(d'g1)/(d'Gd);% a=-((X(:,1)'Gd+b'd)/(d'Gd)); a=g1(:,1)'g1(:,1)/(d(:,1)'Gd(:,1));

X(:,2)=X(:,1)+ad;

g1=[g1 subs(subs(g,x1,X(1,2)),x2,X(2,2))];

m1=norm(g1(:,1));m2=norm(g1(:,2));

k=(m2/m1)^2;

i=2;

while m2>=e

d(:,i)=-g1(:,i)+k(i-1)d(:,i-1);

a(i)=-(d(:,i)'g1(:,i))/(d(:,i)'Gd(:,i));

%a1(i)=-((X(:,i)'Gd(:,i)+b'd(:,i))/(d(:,i)'Gd(:,i)));a(i)=g1(:,i)'g1(:,i)/(d(:,i)'Gd(:,i));

X(:,i+1)=X(:,i)+a(i)d(:,i);

g1=[g1 subs(subs(g,x1,X(1,i+1)),x2,X(2,i+1))];

m1=m2;m2=norm(g1(:,i+1));

k(i)=(m2/m1)^2;

i=i+1;

end

f1=subs(subs(f,x1,X(1,i)),x2,X(2,i));

elseif n==3

format long

syms x1 x2 x3

f=1/2[x1,x2,x3]G[x1;x2;x3]+b'[x1;x2;x3]+c;

g=[diff(f,x1);diff(f,x2);diff(f,x3)];

g1=subs(subs(subs(g,x1,X(1,1)),x2,X(2,1)),x3,X(3,1));

d=-g1;

a=-((X(:,1)'Gd+b'd)/(d'Gd));

X(:,2)=X(:,1)+ad;

g1=[g1 subs(subs(subs(g,x1,X(1,2)),x2,X(2,2)),x3,X(3,2))];

k=(norm(g1(:,2))/norm(g1(:,1)))^2;

m=norm(g1(:,2));

i=2;

while m>=e

d(:,i)=-g1(:,i)+kd(:,i-1);

a(i)=-((X(:,i)'Gd(:,i)+b'd(:,i))/(d(:,i)'Gd(:,i)));

X(:,i+1)=X(:,i)+a(i)d(:,i);

g1=[g1 subs(subs(subs(g,x1,X(1,i+1)),x2,X(2,i+1)),x3,X(3,i+1))];

k=(norm(g1(:,i+1))/norm(g1(:,i)))^2;

m=norm(g1(:,i+1));

i=i+1;

end

f1=subs(subs(subs(f,x1,X(1,i)),x2,X(2,i)),x3,X(3,i));

end

以上就是关于在matlab中,运用共轭梯度求二次函数极小点,程序老是会出现以下状况,请大仙帮我看看,哪边错了感谢全部的内容,包括:在matlab中,运用共轭梯度求二次函数极小点,程序老是会出现以下状况,请大仙帮我看看,哪边错了感谢、最优化二次函数的共轭梯度法的matlab程序、求助Matlab一个共轭梯度法的程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10140085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存