楼主: ilifezan
2695 6

[有偿编程] 十万火急之求助帖 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

15%

还不是VIP/贵宾

-

威望
0
论坛币
68 个
通用积分
2.7002
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
4340 点
帖子
132
精华
0
在线时间
146 小时
注册时间
2010-4-3
最后登录
2025-5-17

楼主
ilifezan 发表于 2011-5-28 19:04:18 |AI写论文
5论坛币
function f=truss_main3()
%主程序,truss_main3.m
clc;
clear all;
former long
global a P E
a=[-1/1.803 1.5/1.803
    0         1
    1/1.803 1.5/1.803];
P=20000;
E=210*1e9;
x0=[0.01,0.02,0.03]                   %设计初始值
[x,fva1]=fseminf(@truss_objfun3,x0,3,@truss_confun3)
function f=truss_objfun3(x)
%目标函数
f=7800*9.8*(1.803*x(1)+1.5*x(2)+1.803*x(3));        %目标函数
function [C,Ceq,k1,k2,k3,s]=truss_confun3(x,s)
%约束条件m文件truss_confun2.m
Global a P E
%初始化采样间距
if isnan(s(1,1))
s=[0.01  0;0.01  0;0.01 0];
end
%产生样本集
%w=1:s(1,1):pi/2
W=0.01:0.005:pi/2
[n1 n2]=size(w);
%计算节点位移
a11=0;a12=0;a21=0;a22=0;
for i=1:3
    a11=a11-x(i)*a(i,1)^2*a(i,2);
    a12=a12+x(i)*a(i,1)*a(i,2)^2;
    a21=a21-x(i)*a(i,1)*a(i,2)^2;
a22=a12+x(i)*a(i,2)^3;
end
aa=[a11 a12
a21 a22]
for i=1:n2
b=[-p*cos(w(i))*1.5/E P*sin(w(i))*1.5/E]’
uv=inv(aa)*b
%杆的内力计算
N1(i)=E*x(1)/1.5*(-uv(1)*a(1,1)*a(1,2)+uv(2)*a(1,2)^2);
N2(i)=E*x(2)/1.5*(-uv(1)*a(2,1)*a(2,2)+uv(2)*a(2,2)^2);
N3(i)=E*x(3)/1.5*(-uv(1)*a(3,1)*a(3,2)+uv(2)*a(3,2)^2);
end
%半无限约束
K1=abs(N1)/x(1)-300*1e6;
K2=abs(N2)/x(2)-300*1e6;
K3=abs(N3)/x(3)-300*1e6;
%非线性约束
c=[-0.0001-x(1)
  0.0001-x(2)
  0.0001-x(3)
  abs(uv(1))-0.00001
  abs(uv(2))-0.00001];
Ceq=[];
C,k1=min(k1),k2=min(k2),k3=min(k3)

求高人看看此程序的错误之处,本人不知道怎么给币,所以解决问题之后请告知给币的方式,非常感谢。

最佳答案

tulipsliu 查看完整内容

第三个文件错误较多如全局变量申明,你的 global,第一个字母用了大写,这个是不合法的。 格式的设置,不是 former 是 format long 然后后面都是小错误,以后自己调试程序时,细心点,注意大小写,比如 P,你后面的计算里,用的是小写的p, 将 K 的均值赋值个 k 时,也是大小写错误,不是什么特别的错误。平时程序运行时,多检查就可以了。 我不懂你的物理学方程,我做做经济建模的。所以对不对我不知道,不过可以跑出结果 ...
关键词:十万火急 求助帖 function Global Former 求助

本帖被以下文库推荐

路漫漫其修远兮,吾将上下而求索!
因为活着,所以想对人有所帮助!

沙发
tulipsliu 在职认证  发表于 2011-5-28 19:04:19
第三个文件错误较多如全局变量申明,你的 global,第一个字母用了大写,这个是不合法的。
格式的设置,不是 former
是   format long

然后后面都是小错误,以后自己调试程序时,细心点,注意大小写,比如 P,你后面的计算里,用的是小写的p,
将 K  的均值赋值个 k 时,也是大小写错误,不是什么特别的错误。平时程序运行时,多检查就可以了。
我不懂你的物理学方程,我做做经济建模的。所以对不对我不知道,不过可以跑出结果。我已经跑出结果了。

第三个文件如下:

  1. function [C,Ceq,k1,k2,k3,s]=truss_confun3(x,s)
  2. %约束条件m文件truss_confun2.m
  3. global a P E
  4. %初始化采样间距
  5. if isnan(s(1,1))
  6. s=[0.01  0;0.01  0;0.01 0];
  7. end
  8. %产生样本集
  9. %w=1:s(1,1):pi/2
  10. w=0.01:0.005:pi/2;
  11. [~, n2]=size(w);
  12. %计算节点位移
  13. a11=0;a12=0;a21=0;a22=0;
  14. for i=1:3
  15.     a11=a11-x(i)*a(i,1)^2*a(i,2);
  16.     a12=a12+x(i)*a(i,1)*a(i,2)^2;
  17.     a21=a21-x(i)*a(i,1)*a(i,2)^2;
  18. a22=a12+x(i)*a(i,2)^3;
  19. end
  20. aa=[a11 a12;a21 a22];

  21. for i=1:n2
  22. b=[-P*cos(w(i))*1.5/E P*sin(w(i))*1.5/E]';
  23. uv=aa\b;
  24. %杆的内力计算
  25. N1(i)=E*x(1)/1.5*(-uv(1)*a(1,1)*a(1,2)+uv(2)*a(1,2)^2);
  26. N2(i)=E*x(2)/1.5*(-uv(1)*a(2,1)*a(2,2)+uv(2)*a(2,2)^2);
  27. N3(i)=E*x(3)/1.5*(-uv(1)*a(3,1)*a(3,2)+uv(2)*a(3,2)^2);
  28. end

  29. %半无限约束
  30. K1=abs(N1)/x(1)-300*1e6;
  31. K2=abs(N2)/x(2)-300*1e6;
  32. K3=abs(N3)/x(3)-300*1e6;
  33. %非线性约束
  34. c=[-0.0001-x(1)
  35.   0.0001-x(2)
  36.   0.0001-x(3)
  37.   abs(uv(1))-0.00001
  38.   abs(uv(2))-0.00001];
  39. Ceq=[];
  40. C=c;
  41. k1=min(K1);
  42. k2=min(K2);
  43. k3=min(K3);
复制代码
劳动经济学

藤椅
tulipsliu 在职认证  发表于 2011-5-29 12:00:00
主程序不需要函数申明开头,去掉 funcion 这个申明。主程序内容如下。

  1. %主程序,truss_main3.m
  2. clc;
  3. clear all;
  4. format long
  5. global a P E
  6. a=[-1/1.803 1.5/1.803
  7.     0         1
  8.     1/1.803 1.5/1.803];
  9. P=20000;
  10. E=210*1e9;
  11. x0=[0.01,0.02,0.03];                   %设计初始值
  12. [x,fva1]=fseminf(@truss_objfun3,x0,3,@truss_confun3)
复制代码
劳动经济学

板凳
tulipsliu 在职认证  发表于 2011-5-29 12:01:04
注意,保存为3个文件,函数文件也单独保存。目标函数没错
如下
  1. function f=truss_objfun3(x)
  2. %目标函数
  3. f=7800*9.8*(1.803*x(1)+1.5*x(2)+1.803*x(3));        %目标函数
复制代码
劳动经济学

报纸
tulipsliu 在职认证  发表于 2011-5-29 12:05:24
Local minimum possible. Constraints satisfied.

fseminf stopped because the size of the current search direction is less than
twice the default value of the step size tolerance and constraints are
satisfied to within the default value of the constraint tolerance.

<stopping criteria details>


x =

   0.006197345313062   0.000255468750000   0.023352886874689


fva1 =

    4.101944053297299e+003




这个就是运行结果了。只是一个简单的程序调试,将语法错误修改而已,不需要你的论坛币,我要下载的资料都下载完了。用不了论坛币。呵呵
你留着下载资料吧。
已有 1 人评分经验 论坛币 学术水平 热心指数 收起 理由
Xaero + 100 + 80 + 1 + 1 分析的有道理

总评分: 经验 + 100  论坛币 + 80  学术水平 + 1  热心指数 + 1   查看全部评分

劳动经济学

地板
ilifezan 发表于 2011-5-29 15:12:28
十分感谢您。 2# tulipsliu
路漫漫其修远兮,吾将上下而求索!
因为活着,所以想对人有所帮助!

7
zhangtao 发表于 2011-5-29 16:00:19
??? Error using ==> fseminf
Error evaluating user supplied function truss_confun3:
Error: File: C:\MATLAB7\work\truss_confun3.m Line: 21 Column: 3
Incomplete or misformed expression or statement.

Error in ==> truss_main3 at 23
[x,fva1]=fseminf(@truss_objfun3,x0,3,@truss_confun3)
我运行时提示以上错误,是不是在matlab7上不能运行?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 02:12