查看: 313|回复: 7|关注: 0

[已解决] 请问我在使用fminsearch函数搜索求解时出现‘错误使用 .* 矩阵维度必须一致’的错误时为什么

[复制链接]

新手

16 麦片

财富积分


050


6

主题

13

帖子

0

最佳答案
本帖最后由 flyer63 于 2020-5-28 17:04 编辑

代码如下:

function F = Fun(bl)                    % 坡面方程

global H c fei afa delt gama ksi
n1=tand(fei);

lambda1=bl(1);
lambda2=bl(2);

r0=sqrt(lambda1*lambda1+lambda2*lambda2);
if (lambda2<0)
    sita0=-3.1415926-atan(lambda1/lambda2);
else
    sita0=-atan(lambda1/lambda2);
end

sita1_0=0;
r=r0*exp(n1*(sita0-sita1_0));
x=r*cos(sita1_0)-lambda2;
s=r*sin(sita1_0)+lambda1;
y=H+tand(10)*x;
while abs(s-y)>0.1
   sita1_0=sita1_0-0.01;
   r=r0*exp(n1*(sita0-sita1_0));
   x=r*cos(sita1_0)-lambda2;
   s=r*sin(sita1_0)+lambda1;
   y=H+tand(10)*x;
end
sita1=sita1_0;

n1=tand(fei);
k=tand(afa);
x2=-H/tand(afa);
x1=r0*exp(n1.*(sita0-sita1)).*cos(sita1)-lambda2;

X2 = x2:(-x2/100):0;

Y2 = (gama.*((H+tand(10).*X2)-k.*X2)+10).*X2;
z0=trapz(X2,Y2);

z1=sind(afa)*sind(afa-delt)/ksi/H/cosd(delt);
z2=z0*z1;
z3=sind(afa)*cos(afa-delt)/ksi/H/cosd(delt);

Y3 = gama*(H+tand(10).*X2-k*X2)+10;
linshi=trapz(X2,Y3);
z4=z0*z3+linshi;


z7=exp(-2*n1*sita1)*...
    (c/n1+...
    (c*sin(sita1)+cos(sita1)*(10-c*tand(10)))...
    /(sin(sita1)*(tand(10)-n1)+cos(sita1)*( n1*tand(10)+1))...
    +(gama*r0*exp(n1*(sita0-sita1))*(sin(sita1)-3*n1*cos(sita1))...
    +3*n1*gama*r0*exp(n1*(sita0+2*sita1)))/(1+9*n1*n1)...
    );



Sita=sita0:(sita1-sita0)/100:sita1;
Sigma=z7.*exp(2*n1.*Sita)-c/n1-...
    (gama*r0*exp(n1.*(sita0-Sita)).*(sin(Sita)-3*n1.*cos(Sita))...
    +3*n1*gama*r0.*exp(n1*(sita0+2.*Sita)))/(1+9*n1*n1);
Xshuz=r0.*exp(n1.*(sita0-Sita)).*cos(Sita)-lambda2;

Sshuz=r0.*exp(n1.*(sita0-Sita)).*sin(Sita)+lambda1;
Spshuz=(Xshuz-n1.*Sshuz+lambda1.*n1+lambda2)./...
    (lambda1-n1.*Xshuz-Sshuz-n1.*lambda2);
F1=(n1-Spshuz).*Sigma+c;
F0=(n1.*Spshuz.*Xshuz+Xshuz+Sshuz.*Spshuz-n1.*Sshuz).*Sigma...
    -(Fun_gx(Xshuz)-Sshuz)*gama.*Xshuz...
    +c.*Spshuz.*Xshuz-c.*Sshuz-10.*Xshuz;
F2=(n1.*Spshuz+1).*Sigma+c.*Spshuz-10-gama.*(H+tand(10).*Xshuz-Sshuz);
zhj1=trapz(Xshuz,z1*F0+F1);
zhj2=trapz(Xshuz,z3*F0+F2);

F=(zhj1-z2)*(zhj1-z2)+(zhj2-z4)*(zhj2-z4);


输入bl0=[5,5];
bl=fminsearch(@(bl)Fun(bl),bl0)
出现
错误使用  .*
矩阵维度必须一致。

出错 Fun (line 38)
Y2 = (gama.*((H+tand(10).*X2)-k.*X2)+10).*X2;

出错 @(bl)Fun(bl)


出错 fminsearch (line 190)
fv(:,1) = funfcn(x,varargin{:});


回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

6

主题

1435

帖子

304

最佳答案
  • 关注者: 71
发表于 2020-5-28 17:38:46 | 显示全部楼层
主要原因在于H c fei afa delt gama ksi等变量在主程序中未定义,导致直接调用函数变量为空
回复此楼 已获打赏: 0 积分

举报

新手

16 麦片

财富积分


050


6

主题

13

帖子

0

最佳答案
 楼主| 发表于 2020-5-28 17:40:39 | 显示全部楼层
20141303 发表于 2020-5-28 17:38
主要原因在于H c fei afa delt gama ksi等变量在主程序中未定义,导致直接调用函数变量为空 ...

这个我在运行界面都输入了呀,请问还有其他原因吗,谢谢。
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

6

主题

1435

帖子

304

最佳答案
  • 关注者: 71
发表于 2020-5-28 17:45:31 | 显示全部楼层
那就是Y3 = gama*(H+tand(10).*X2-k.*X2)+10;中有变量相乘需要使用点乘
回复此楼 已获打赏: 0 积分

举报

新手

16 麦片

财富积分


050


6

主题

13

帖子

0

最佳答案
 楼主| 发表于 2020-5-28 17:53:57 | 显示全部楼层
20141303 发表于 2020-5-28 17:45
那就是Y3 = gama*(H+tand(10).*X2-k.*X2)+10;中有变量相乘需要使用点乘

也不是的呀,我把应该点乘的都修改了,我把函数里面的代码复制到运行界面后其中点乘的都没有问题,为什么构造函数使用就会出现问题啊,还望您能够帮忙再看看,谢谢。
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

6

主题

1435

帖子

304

最佳答案
  • 关注者: 71
发表于 2020-5-28 18:01:57 | 显示全部楼层
H c fei afa delt gama ksi等变量定义代码上传一下
回复此楼 已获打赏: 0 积分

举报

新手

16 麦片

财富积分


050


6

主题

13

帖子

0

最佳答案
 楼主| 发表于 2020-5-28 18:04:45 | 显示全部楼层
20141303 发表于 2020-5-28 18:01
H c fei afa delt gama ksi等变量定义代码上传一下

>> H=6;
>> c=10;
>> fei=20;
>> afa=70;
>> delt=10;
>> gama=10;
>> ksi=0.1;
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

6

主题

1435

帖子

304

最佳答案
  • 关注者: 71
发表于 2020-5-28 18:19:04 | 显示全部楼层 |此回复为最佳答案
本帖最后由 20141303 于 2020-5-28 18:22 编辑

仅供参考,Fun_gx函数未定义
  1. global H c fei afa delt gama ksi
  2. H=6;
  3. c=10;
  4. fei=20;
  5. afa=70;
  6. delt=10;
  7. gama=10;
  8. ksi=0.1;
  9. bl0=[5,5];
  10. bl=fminsearch(@(bl)Fun(bl),bl0)
  11. function F = Fun(bl)                    % 坡面方程

  12. global H c fei afa delt gama ksi
  13. n1=tand(fei);

  14. lambda1=bl(1);
  15. lambda2=bl(2);

  16. r0=sqrt(lambda1*lambda1+lambda2*lambda2);
  17. if (lambda2<0)
  18.     sita0=-3.1415926-atan(lambda1/lambda2);
  19. else
  20.     sita0=-atan(lambda1/lambda2);
  21. end

  22. sita1_0=0;
  23. r=r0*exp(n1*(sita0-sita1_0));
  24. x=r*cos(sita1_0)-lambda2;
  25. s=r*sin(sita1_0)+lambda1;
  26. y=H+tand(10)*x;
  27. while abs(s-y)>0.1
  28.    sita1_0=sita1_0-0.01;
  29.    r=r0*exp(n1*(sita0-sita1_0));
  30.    x=r*cos(sita1_0)-lambda2;
  31.    s=r*sin(sita1_0)+lambda1;
  32.    y=H+tand(10)*x;
  33. end
  34. sita1=sita1_0;

  35. n1=tand(fei);
  36. k=tand(afa);
  37. x2=-H/tand(afa);
  38. x1=r0*exp(n1.*(sita0-sita1)).*cos(sita1)-lambda2;

  39. X2 = x2:(-x2/100):0;

  40. Y2 = (gama.*((H+tand(10).*X2)-k.*X2)+10).*X2;
  41. z0=trapz(X2,Y2);

  42. z1=sind(afa)*sind(afa-delt)/ksi/H/cosd(delt);
  43. z2=z0*z1;
  44. z3=sind(afa)*cos(afa-delt)/ksi/H/cosd(delt);

  45. Y3 = gama*(H+tand(10).*X2-k.*X2)+10;
  46. linshi=trapz(X2,Y3);
  47. z4=z0*z3+linshi;


  48. z7=exp(-2*n1*sita1)*...
  49.     (c/n1+...
  50.     (c*sin(sita1)+cos(sita1)*(10-c*tand(10)))...
  51.     /(sin(sita1)*(tand(10)-n1)+cos(sita1)*( n1*tand(10)+1))...
  52.     +(gama*r0*exp(n1*(sita0-sita1))*(sin(sita1)-3*n1*cos(sita1))...
  53.     +3*n1*gama*r0*exp(n1*(sita0+2*sita1)))/(1+9*n1*n1)...
  54.     );



  55. Sita=sita0:(sita1-sita0)/100:sita1;
  56. Sigma=z7.*exp(2*n1.*Sita)-c/n1-...
  57.     (gama*r0*exp(n1.*(sita0-Sita)).*(sin(Sita)-3*n1.*cos(Sita))...
  58.     +3*n1*gama*r0.*exp(n1*(sita0+2.*Sita)))/(1+9*n1*n1);
  59. Xshuz=r0.*exp(n1.*(sita0-Sita)).*cos(Sita)-lambda2;

  60. Sshuz=r0.*exp(n1.*(sita0-Sita)).*sin(Sita)+lambda1;
  61. Spshuz=(Xshuz-n1.*Sshuz+lambda1.*n1+lambda2)./...
  62.     (lambda1-n1.*Xshuz-Sshuz-n1.*lambda2);
  63. F1=(n1-Spshuz).*Sigma+c;
  64. F0=(n1.*Spshuz.*Xshuz+Xshuz+Sshuz.*Spshuz-n1.*Sshuz).*Sigma...
  65.     -(Fun_gx(Xshuz)-Sshuz)*gama.*Xshuz...
  66.     +c.*Spshuz.*Xshuz-c.*Sshuz-10.*Xshuz;
  67. F2=(n1.*Spshuz+1).*Sigma+c.*Spshuz-10-gama.*(H+tand(10).*Xshuz-Sshuz);
  68. zhj1=trapz(Xshuz,z1*F0+F1);
  69. zhj2=trapz(Xshuz,z3*F0+F2);

  70. F=(zhj1-z2)*(zhj1-z2)+(zhj2-z4)*(zhj2-z4);
  71. end
复制代码
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表