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)
第三个文件错误较多如全局变量申明,你的 global,第一个字母用了大写,这个是不合法的。
格式的设置,不是 former
是 format long
然后后面都是小错误,以后自己调试程序时,细心点,注意大小写,比如 P,你后面的计算里,用的是小写的p,
将 K 的均值赋值个 k 时,也是大小写错误,不是什么特别的错误。平时程序运行时,多检查就可以了。
我不懂你的物理学方程,我做做经济建模的。所以对不对我不知道,不过可以跑出结果 ...
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.
??? 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上不能运行?