图 1-2 黄金分割法的程序框图
编写0.618的程序,并计算下列问题 NO.1: a?0 b?2? f?x??cosx
NO.2: a?0 b?10 f?x???x?2??3
2NO.1 a=0,b=2π,y=cosx,收敛精度e=0.001, #include
double calc(double *a,double *b,double e,int *n) { double x1,x2,s; if(fabs(*b-*a)<=e) s=f((*b+*a)/2); else {
x1=*b-0.618*(*b-*a); x2=*a+0.618*(*b-*a); if(f(x1)>f(x2)) *a=x1; else *b=x2; *n=*n+1;
s=calc(a,b,e,n); }
return s; }
main()
{ double s,a,b,e; int n=0;
scanf(\ s=calc(&a,&b,e,&n);
printf(\ }
输入a,b,及精度e的值,输出极小点,函数极小值。如下:
6
No2. a=0,b=10,y=(x-2)2+3,收敛精度e=0.001, #include
float a,b,c=0.618,x[4],y[4],e; scanf(\ x[1]=b-c*(b-a); x[2]=a+c*(b-a);
y[1]=(x[1]-2)*(x[1]-2)+3; y[2]=(x[2]-2)*(x[2]-2)+3; do{ if(y[1]>=y[2]) { a=x[1]; x[1]=x[2]; y[1]=y[2];
x[2]=a+c*(b-a);
y[2]=(x[2]-2)*(x[2]-2)+3; } else
{ b=x[2]; x[2]=x[1]; y[2]=y[1];
x[1]=b-c*(b-a);
y[1]=(x[1]-2)*(x[1]-2)+3; }
7
}while(fabs((b-a)/b)>e); x[0]=(a+b)/2;
y[0]=(x[0]-2)*(x[0]-2)+3; printf(\ printf(\ }
输入a,b,及精度e的值,输出极小点,函数极小值。如下:
第 2 章 单位矩阵程序作业
2.1 单位矩阵程序作业描述
编制程序输入N阶单位矩阵。本文主要通过C语言程序编制来输入N阶单位矩阵。
2.2 输出单位矩阵程序编制 程序文本
#include
void main(void) {
int a[100][100]; int N,i,j;
printf(\请输入所要输出矩阵的阶数(最多100阶):\ scanf(\
printf(\输出的矩阵阶数为%d\\n\
8
printf(\/*****制作表头*****/ for(i=0;i for(i=0;i printf(\/*****分割线*****/ printf(\ for(i=0;i<100;i++) /*****数组赋值*****/ for(j=0;j<100;j++) { if(i==j) a[i][j]=1; else a[i][j]=0; } for(i=0;i printf(\/*****纵列序号*****/ for(j=0;j printf(\ } printf(\} } 结果显示 从键盘输入9,显示9阶单位矩阵,结果如下 9 第 3章 机械优化设计工程实例 3.1 连杆机构问题 3.11 连杆机构问题描述 图 3-1 机构简图 设计一曲柄连杆摇杆机构,要求曲柄l1从l1从?m??0?90?时,摇杆l3的转角最佳再现已知的运动规律:?E??0??范围内变化。 45????1352(???0)2且l1=1,l4=5,?0为极位角,其传动角允许在3?3.12 数学模型的建立 设计变量:这里有两个独立参数l2和l3。因此设计变量为x??x1x2???l2l3? Tt目标函数:将输入角分成30等分,并用近似公式计算,可得目标函数的表达式 f?x??????i??Ei???i??i?1?2i?130? 约束条件: GX(1)=-X(1)?0 GX(2)=-X(2) ?0 GX(3)=-(X(1)+X(2))+6.0?0 GX(4)=-(X(2)+4.0)+X(1) ?0 GX(5)=-(4.0+X(1))+X(2) ?0 GX(6)=-(1.4142*X(1)*X(2)-X(1)**2-X(2)**2)-16.0?0 GX(7)=-(X(1)**2+X(2)**2+1.4142*X(1)*X(2))+36.0?0 3.13 程序编制 C ====================== SUBROUTINE FFX(N,X,FX) C ====================== DIMENSION X(N) COMMON /ONE/I1,I2,I3,I4,NFX,I6 NFX=NFX+1 P0=ACOS(((1.0+X(1))**2-X(2)**2+25.0)/(10.0*(1.0+X(1)))) Q0=ACOS(((1.0+X(1))**2-X(2)**2-25.0)/(10.0*X(2))) 10