c语言单纯形法
① 求助高人:用C编写无约束优化设计
看了好几天了,没人来揭榜,很着急。
俺不会用C,俺用Matlab算的。fminunc函数,只需一行语句。
[10,10]为x1和x2的初值
[x,fmin]=fminunc('x(1)^2+x(2)^2-x(1)*x(2)-10*x(1)+4*x(2)+60',[10,10])
运行结果:
x =
16/3 2/3
fmin = 104/3
即x1=16/3,x2=2/3时,最小值为104/3
第1章绪论1
1.1程序设计语言概述1
1.1.1机器语言1
1.1.2汇编语言2
1.1.3高级语言2
1.1.4C语言3
1.2C语言的优点和缺点4
1.2.1C语言的优点4
1.2.2C语言的缺点6
1.3算法概述7
1.3.1算法的基本特征7
1.3.2算法的复杂度8
1.3.3算法的准确性10
1.3.4算法的稳定性14
第2章复数运算18
2.1复数的四则运算18
2.1.1[算法1]复数乘法18
2.1.2[算法2]复数除法20
2.1.3【实例5】 复数的四则运算22
2.2复数的常用函数运算23
2.2.1[算法3]复数的乘幂23
2.2.2[算法4]复数的n次方根25
2.2.3[算法5]复数指数27
2.2.4[算法6]复数对数29
2.2.5[算法7]复数正弦30
2.2.6[算法8]复数余弦32
2.2.7【实例6】 复数的函数运算34
第3章多项式计算37
3.1多项式的表示方法37
3.1.1系数表示法37
3.1.2点表示法38
3.1.3[算法9]系数表示转化为点表示38
3.1.4[算法10]点表示转化为系数表示42
3.1.5【实例7】系数表示法与点表示法的转化46
3.2多项式运算47
3.2.1[算法11]复系数多项式相乘47
3.2.2[算法12]实系数多项式相乘50
3.2.3[算法13]复系数多项式相除52
3.2.4[算法14]实系数多项式相除54
3.2.5【实例8】复系数多项式的乘除法56
3.2.6【实例9】实系数多项式的乘除法57
3.3多项式的求值59
3.3.1[算法15]一元多项式求值59
3.3.2[算法16]一元多项式多组求值60
3.3.3[算法17]二元多项式求值63
3.3.4【实例10】一元多项式求值65
3.3.5【实例11】二元多项式求值66
第4章矩阵计算68
4.1矩阵相乘68
4.1.1[算法18]实矩阵相乘68
4.1.2[算法19]复矩阵相乘70
4.1.3【实例12】 实矩阵与复矩阵的乘法72
4.2矩阵的秩与行列式值73
4.2.1[算法20]求矩阵的秩73
4.2.2[算法21]求一般矩阵的行列式值76
4.2.3[算法22]求对称正定矩阵的行列式值80
4.2.4【实例13】 求矩阵的秩和行列式值82
4.3矩阵求逆84
4.3.1[算法23]求一般复矩阵的逆84
4.3.2[算法24]求对称正定矩阵的逆90
4.3.3[算法25]求托伯利兹矩阵逆的Trench方法92
4.3.4【实例14】 验证矩阵求逆算法97
4.3.5【实例15】 验证T矩阵求逆算法99
4.4矩阵分解与相似变换102
4.4.1[算法26]实对称矩阵的LDL分解102
4.4.2[算法27]对称正定实矩阵的Cholesky分解104
4.4.3[算法28]一般实矩阵的全选主元LU分解107
4.4.4[算法29]一般实矩阵的QR分解112
4.4.5[算法30]对称实矩阵相似变换为对称三对角阵116
4.4.6[算法31]一般实矩阵相似变换为上Hessen-Burg矩阵121
4.4.7【实例16】 对一般实矩阵进行QR分解126
4.4.8【实例17】 对称矩阵的相似变换127
4.4.9【实例18】 一般实矩阵相似变换129
4.5矩阵特征值的计算130
4.5.1[算法32]求上Hessen-Burg矩阵全部特征值的QR方法130
4.5.2[算法33]求对称三对角阵的全部特征值137
4.5.3[算法34]求对称矩阵特征值的雅可比法143
4.5.4[算法35]求对称矩阵特征值的雅可比过关法147
4.5.5【实例19】 求上Hessen-Burg矩阵特征值151
4.5.6【实例20】 分别用两种雅克比法求对称矩阵特征值152
第5章线性代数方程组的求解154
5.1高斯消去法154
5.1.1[算法36]求解复系数方程组的全选主元高斯消去法155
5.1.2[算法37]求解实系数方程组的全选主元高斯消去法160
5.1.3[算法38]求解复系数方程组的全选主元高斯-约当消去法163
5.1.4[算法39]求解实系数方程组的全选主元高斯-约当消去法168
5.1.5[算法40]求解大型稀疏系数矩阵方程组的高斯-约当消去法171
5.1.6[算法41]求解三对角线方程组的追赶法174
5.1.7[算法42]求解带型方程组的方法176
5.1.8【实例21】 解线性实系数方程组179
5.1.9【实例22】 解线性复系数方程组180
5.1.10【实例23】 解三对角线方程组182
5.2矩阵分解法184
5.2.1[算法43]求解对称方程组的LDL分解法184
5.2.2[算法44]求解对称正定方程组的Cholesky分解法186
5.2.3[算法45]求解线性最小二乘问题的QR分解法188
5.2.4【实例24】 求解对称正定方程组191
5.2.5【实例25】 求解线性最小二乘问题192
5.3迭代方法193
5.3.1[算法46]病态方程组的求解193
5.3.2[算法47]雅克比迭代法197
5.3.3[算法48]高斯-塞德尔迭代法200
5.3.4[算法49]超松弛方法203
5.3.5[算法50]求解对称正定方程组的共轭梯度方法205
5.3.6[算法51]求解托伯利兹方程组的列文逊方法209
5.3.7【实例26】 解病态方程组214
5.3.8【实例27】 用迭代法解方程组215
5.3.9【实例28】 求解托伯利兹方程组217
第6章非线性方程与方程组的求解219
6.1非线性方程求根的基本过程219
6.1.1确定非线性方程实根的初始近似值或根的所在区间219
6.1.2求非线性方程根的精确解221
6.2求非线性方程一个实根的方法221
6.2.1[算法52]对分法221
6.2.2[算法53]牛顿法223
6.2.3[算法54]插值法226
6.2.4[算法55]埃特金迭代法229
6.2.5【实例29】 用对分法求非线性方程组的实根232
6.2.6【实例30】 用牛顿法求非线性方程组的实根233
6.2.7【实例31】 用插值法求非线性方程组的实根235
6.2.8【实例32】 用埃特金迭代法求非线性方程组的实根237
6.3求实系数多项式方程全部根的方法238
6.3.1[算法56]QR方法238
6.3.2【实例33】用QR方法求解多项式的全部根240
6.4求非线性方程组一组实根的方法241
6.4.1[算法57]梯度法241
6.4.2[算法58]拟牛顿法244
6.4.3【实例34】 用梯度法计算非线性方程组的一组实根250
6.4.4【实例35】 用拟牛顿法计算非线性方程组的一组实根252
第7章代数插值法254
7.1拉格朗日插值法254
7.1.1[算法59]线性插值255
7.1.2[算法60]二次抛物线插值256
7.1.3[算法61]全区间插值259
7.1.4【实例36】 拉格朗日插值262
7.2埃尔米特插值263
7.2.1[算法62]埃尔米特不等距插值263
7.2.2[算法63]埃尔米特等距插值267
7.2.3【实例37】 埃尔米特插值法270
7.3埃特金逐步插值271
7.3.1[算法64]埃特金不等距插值272
7.3.2[算法65]埃特金等距插值275
7.3.3【实例38】 埃特金插值278
7.4光滑插值279
7.4.1[算法66]光滑不等距插值279
7.4.2[算法67]光滑等距插值283
7.4.3【实例39】 光滑插值286
7.5三次样条插值287
7.5.1[算法68]第一类边界条件的三次样条函数插值287
7.5.2[算法69]第二类边界条件的三次样条函数插值292
7.5.3[算法70]第三类边界条件的三次样条函数插值296
7.5.4【实例40】 样条插值法301
7.6连分式插值303
7.6.1[算法71]连分式插值304
7.6.2【实例41】 验证连分式插值的函数308
第8章数值积分法309
8.1变步长求积法310
8.1.1[算法72]变步长梯形求积法310
8.1.2[算法73]自适应梯形求积法313
8.1.3[算法74]变步长辛卜生求积法316
8.1.4[算法75]变步长辛卜生二重积分方法318
8.1.5[算法76]龙贝格积分322
8.1.6【实例42】 变步长积分法进行一重积分325
8.1.7【实例43】 变步长辛卜生积分法进行二重积分326
8.2高斯求积法328
8.2.1[算法77]勒让德-高斯求积法328
8.2.2[算法78]切比雪夫求积法331
8.2.3[算法79]拉盖尔-高斯求积法334
8.2.4[算法80]埃尔米特-高斯求积法336
8.2.5[算法81]自适应高斯求积方法337
8.2.6【实例44】 有限区间高斯求积法342
8.2.7【实例45】 半无限区间内高斯求积法343
8.2.8【实例46】 无限区间内高斯求积法345
8.3连分式法346
8.3.1[算法82]计算一重积分的连分式方法346
8.3.2[算法83]计算二重积分的连分式方法350
8.3.3【实例47】 连分式法进行一重积分354
8.3.4【实例48】 连分式法进行二重积分355
8.4蒙特卡洛法356
8.4.1[算法84]蒙特卡洛法进行一重积分356
8.4.2[算法85]蒙特卡洛法进行二重积分358
8.4.3【实例49】 一重积分的蒙特卡洛法360
8.4.4【实例50】 二重积分的蒙特卡洛法361
第9章常微分方程(组)初值问题的求解363
9.1欧拉方法364
9.1.1[算法86]定步长欧拉方法364
9.1.2[算法87]变步长欧拉方法366
9.1.3[算法88]改进的欧拉方法370
9.1.4【实例51】 欧拉方法求常微分方程数值解372
9.2龙格-库塔方法376
9.2.1[算法89]定步长龙格-库塔方法376
9.2.2[算法90]变步长龙格-库塔方法379
9.2.3[算法91]变步长基尔方法383
9.2.4【实例52】 龙格-库塔方法求常微分方程的初值问题386
9.3线性多步法390
9.3.1[算法92]阿当姆斯预报校正法390
9.3.2[算法93]哈明方法394
9.3.3[算法94]全区间积分的双边法399
9.3.4【实例53】 线性多步法求常微分方程组初值问题401
第10章拟合与逼近405
10.1一元多项式拟合405
10.1.1[算法95]最小二乘拟合405
10.1.2[算法96]最佳一致逼近的里米兹方法412
10.1.3【实例54】 一元多项式拟合417
10.2矩形区域曲面拟合419
10.2.1[算法97]矩形区域最小二乘曲面拟合419
10.2.2【实例55】 二元多项式拟合428
第11章特殊函数430
11.1连分式级数和指数积分430
11.1.1[算法98]连分式级数求值430
11.1.2[算法99]指数积分433
11.1.3【实例56】 连分式级数求值436
11.1.4【实例57】 指数积分求值438
11.2伽马函数439
11.2.1[算法100]伽马函数439
11.2.2[算法101]贝塔函数441
11.2.3[算法102]阶乘442
11.2.4【实例58】伽马函数和贝塔函数求值443
11.2.5【实例59】阶乘求值444
11.3不完全伽马函数445
11.3.1[算法103]不完全伽马函数445
11.3.2[算法104]误差函数448
11.3.3[算法105]卡方分布函数450
11.3.4【实例60】不完全伽马函数求值451
11.3.5【实例61】误差函数求值452
11.3.6【实例62】卡方分布函数求值453
11.4不完全贝塔函数454
11.4.1[算法106]不完全贝塔函数454
11.4.2[算法107]学生分布函数457
11.4.3[算法108]累积二项式分布函数458
11.4.4【实例63】不完全贝塔函数求值459
11.5贝塞尔函数461
11.5.1[算法109]第一类整数阶贝塞尔函数461
11.5.2[算法110]第二类整数阶贝塞尔函数466
11.5.3[算法111]变型第一类整数阶贝塞尔函数469
11.5.4[算法112]变型第二类整数阶贝塞尔函数473
11.5.5【实例64】贝塞尔函数求值476
11.5.6【实例65】变型贝塞尔函数求值477
11.6Carlson椭圆积分479
11.6.1[算法113]第一类椭圆积分479
11.6.2[算法114]第一类椭圆积分的退化形式481
11.6.3[算法115]第二类椭圆积分483
11.6.4[算法116]第三类椭圆积分486
11.6.5【实例66】第一类勒让德椭圆函数积分求值490
11.6.6【实例67】第二类勒让德椭圆函数积分求值492
第12章极值问题494
12.1一维极值求解方法494
12.1.1[算法117]确定极小值点所在的区间494
12.1.2[算法118]一维黄金分割搜索499
12.1.3[算法119]一维Brent方法502
12.1.4[算法120]使用一阶导数的Brent方法506
12.1.5【实例68】使用黄金分割搜索法求极值511
12.1.6【实例69】使用Brent法求极值513
12.1.7【实例70】使用带导数的Brent法求极值515
12.2多元函数求极值517
12.2.1[算法121]不需要导数的一维搜索517
12.2.2[算法122]需要导数的一维搜索519
12.2.3[算法123]Powell方法522
12.2.4[算法124]共轭梯度法525
12.2.5[算法125]准牛顿法531
12.2.6【实例71】验证不使用导数的一维搜索536
12.2.7【实例72】用Powell算法求极值537
12.2.8【实例73】用共轭梯度法求极值539
12.2.9【实例74】用准牛顿法求极值540
12.3单纯形法542
12.3.1[算法126]求无约束条件下n维极值的单纯形法542
12.3.2[算法127]求有约束条件下n维极值的单纯形法548
12.3.3[算法128]解线性规划问题的单纯形法556
12.3.4【实例75】用单纯形法求无约束条件下N维的极值568
12.3.5【实例76】用单纯形法求有约束条件下N维的极值569
12.3.6【实例77】求解线性规划问题571
第13章随机数产生与统计描述574
13.1均匀分布随机序列574
13.1.1[算法129]产生0到1之间均匀分布的一个随机数574
13.1.2[算法130]产生0到1之间均匀分布的随机数序列576
13.1.3[算法131]产生任意区间内均匀分布的一个随机整数577
13.1.4[算法132]产生任意区间内均匀分布的随机整数序列578
13.1.5【实例78】产生0到1之间均匀分布的随机数序列580
13.1.6【实例79】产生任意区间内均匀分布的随机整数序列581
13.2正态分布随机序列582
13.2.1[算法133]产生任意均值与方差的正态分布的一个随机数582
13.2.2[算法134]产生任意均值与方差的正态分布的随机数序列585
13.2.3【实例80】产生任意均值与方差的正态分布的一个随机数587
13.2.4【实例81】产生任意均值与方差的正态分布的随机数序列588
13.3统计描述589
13.3.1[算法135]分布的矩589
13.3.2[算法136]方差相同时的t分布检验591
13.3.3[算法137]方差不同时的t分布检验594
13.3.4[算法138]方差的F检验596
13.3.5[算法139]卡方检验599
13.3.6【实例82】计算随机样本的矩601
13.3.7【实例83】t分布检验602
13.3.8【实例84】F分布检验605
13.3.9【实例85】检验卡方检验的算法607
第14章查找609
14.1基本查找609
14.1.1[算法140]有序数组的二分查找609
14.1.2[算法141]无序数组同时查找最大和最小的元素611
14.1.3[算法142]无序数组查找第M小的元素613
14.1.4【实例86】基本查找615
14.2结构体和磁盘文件的查找617
14.2.1[算法143]无序结构体数组的顺序查找617
14.2.2[算法144]磁盘文件中记录的顺序查找618
14.2.3【实例87】结构体数组和文件中的查找619
14.3哈希查找622
14.3.1[算法145]字符串哈希函数622
14.3.2[算法146]哈希函数626
14.3.3[算法147]向哈希表中插入元素628
14.3.4[算法148]在哈希表中查找元素629
14.3.5[算法149]在哈希表中删除元素631
14.3.6【实例88】构造哈希表并进行查找632
第15章排序636
15.1插入排序636
15.1.1[算法150]直接插入排序636
15.1.2[算法151]希尔排序637
15.1.3【实例89】插入排序639
15.2交换排序641
15.2.1[算法152]气泡排序641
15.2.2[算法153]快速排序642
15.2.3【实例90】交换排序644
15.3选择排序646
15.3.1[算法154]直接选择排序646
15.3.2[算法155]堆排序647
15.3.3【实例91】选择排序650
15.4线性时间排序651
15.4.1[算法156]计数排序651
15.4.2[算法157]基数排序653
15.4.3【实例92】线性时间排序656
15.5归并排序657
15.5.1[算法158]二路归并排序658
15.5.2【实例93】二路归并排序660
第16章数学变换与滤波662
16.1快速傅里叶变换662
16.1.1[算法159]复数据快速傅里叶变换662
16.1.2[算法160]复数据快速傅里叶逆变换666
16.1.3[算法161]实数据快速傅里叶变换669
16.1.4【实例94】验证傅里叶变换的函数671
16.2其他常用变换674
16.2.1[算法162]快速沃尔什变换674
16.2.2[算法163]快速哈达玛变换678
16.2.3[算法164]快速余弦变换682
16.2.4【实例95】验证沃尔什变换和哈达玛的函数684
16.2.5【实例96】验证离散余弦变换的函数687
16.3平滑和滤波688
16.3.1[算法165]五点三次平滑689
16.3.2[算法166]α-β-γ滤波690
16.3.3【实例97】验证五点三次平滑692
16.3.4【实例98】验证α-β-γ滤波算法693
③ c++语言中编程题
//设x y z 分别代表男人女人小孩
//则x+y+z=36 4x+3y+z/2=36
//则7x+5y=36则x小于6
#include<stdio.h>
int main()
{int x,y;
for(x=0;x<6;x++) {
if((36-7*x)%5==0){ //判断y为整数吗
y=(36-7*x)/5;
if((36-x-y)%2==0) //判断z为整数吗
printf("男人:%d 女人:%d 小孩:%d\n",x,y,36-x-y);
}
}
getchar();
return 0;
}
//这个程序速度较快
//祝你成功
④ 用c语言编写单纯形法的程序怎么写
用c语言编写单纯形法的程序怎么写
#include<stdio.h>
#include<math.h>
intm; //记录约束条件方程组的个数
intn; //记录未知量的个数
floatM=1000000.0;
floatA[100][100]; //用于记录方程组的数目和系数
floatC[100]; //用于存储目标函数中各个变量的系数
floatb[100]; //用于存储常约束条件中的常数
floatCB[100]; //用于存储基变量的系数
floatseta[100]; //存放出基与入基的变化情况
floatcn[100]; //存储检验数矩阵
floatx[100];
intnum[100]; //用于存放出基与进基变量的情况
floatZ=0; //记录目标函数值
voidshuru();
voidprint();
intmincz();
intfind_line(int a);
voidexchange(int a,int b);
intmain()
{
int i,j=0;
int p,q,temp; //q:换入,p:换出
shuru();
printf("\n--------------------------------------------------------------------------\n");
printf(" \tCB\tXB\tb\t");
for(i=0; i<n; i++)
printf(" X(%d)\t",i+1);
for(i=0; i<n; i++)
x[i]=0;
printf("\n");
while(1) {
q=mincz();
if(q==-1) {
print();
printf("\n所得解已经是最优解!\n");
printf("\n最优解为:\n");
for(j=0; j<m; j++) {
temp=num[j]-1;
x[temp]=b[j];
}
for(i=0; i<n; i++) {
printf("x%d=%.2f",i+1,x[i]);
Z=Z+x[i]*C[i];
}
printf("Z=%.2f",Z);
break;
}
print();
p=find_line(q);
printf("\np=%d,q=%d",p,q);
if(q==-1) break;
exchange(p,q);
}
return 0;
}
intmincz()
{
int i,k=0;
int flag=0; //检验数标记
float min=0;
for(i=0; i<n; i++)
if(cn[i]>=0)
flag=1;
else {
flag=0;
break;
}
if(flag==1)
return -1;
//进行到此处,说明存在<0的检验数
//找到最小的检验数,作为换入变量
for(i=0; i<n; i++) {
if(min>cn[i]) {
min=cn[i];
k=i;
}
}
return k;
}
intfind_line(int a)
{
int i,k,j;
int flag=0;
float min;
k=a;
for(i=0; i<m; i++)
if(A[i][k]<=0)
flag=1;
else {
flag=0;
break;
}
if(flag==1) {
printf("\n该线性规划无最优解!\n");
return -1;
}
for(i=0; i<m; i++) {
if(A[i][k]>0)
seta[i]=b[i]/A[i][k];
else seta[i]=M;
}
min=M;
for(i=0; i<m; i++) {
if(min>=seta[i]) {
min=seta[i];
j=i;
}
}
num[j]=k+1;
CB[j]=C[k];
return j;
}
voidexchange(int p,int q)
{
int i,j,c,l;
float temp1,temp2,temp3;
c=p; //行号,换出
l=q; //列号,换入
temp1=A[c][l]; //A[c][l]主元
b[c]=b[c]/temp1;
for(j=0; j<n; j++)
A[c][j]=A[c][j]/temp1; //主元化为1
for(i=0; i<m; i++) {
if(i!=c)
if(A[i][l]!=0) {
temp2=A[i][l];
b[i]=b[i]-b[c]*temp2;
//主元所在列,其余元素化为0
for(j=0; j<n; j++)
A[i][j]=A[i][j]-A[c][j]*temp2;
}
}
temp3=cn[l];
for(i=0; i<n; i++)
cn[i]=cn[i]-A[c][i]*temp3;
}
voidprint()
{
int i,j=0;
printf("\n--------------------------------------------------------------------------\n");
for(i=0; i<m; i++) {
printf("%8.2f\tX(%d) %8.2f",CB[i],num[i],b[i]);
for(j=0; j<n; j++)
printf("%8.2f ",A[i][j]);
printf("\n");
}
printf("\n--------------------------------------------------------------------------\n");
printf("\t\t\t");
for(i=0; i<n; i++)
printf(" %8.2f",cn[i]);
printf("\n--------------------------------------------------------------------------\n");
}
voidshuru()
{
int i,j; //循环变量
int k;
printf("请输入线性规划问题的约束条件个数M:");
scanf("%d",&m);
printf("请输入线性规划问题的决策变量个数N:");
scanf("%d",&n);
printf("\n请输入方程组的系数矩阵A(%d行%d列):\n",m,n);
for(i=0; i<m; i++)
for(j=0; j<n; j++)
scanf("%f",&A[i][j]);
printf("\n请输入初始基变量的数字代码矩阵:\n");
for(i=0; i<m; i++)
scanf("%d",&num[i]);
printf("\n请输入方程组右边的值矩阵b:\n");
for(i=0; i<m; i++)
scanf("%f",&b[i]);
printf("\n请输入目标函数各个变量的系数所构成的系数阵C:\n");
for(i=0; i<n; i++)
scanf("%f",&C[i]);
for(i=0; i<n; i++)
cn[i]=-C[i];
for(i=0; i<m; i++) {
k=num[i]-1;
CB[i]=C[k];
}
}
⑤ 关于用C语言单纯形法编程,求最大值。。。。
能把程序和要求发给我吗。我帮你看一下。邮箱是[email protected]
⑥ 运筹学里的单纯形法用算法与数据结构里的c语言怎么写
单纯性是求解线性规划的吧
这个很难写,如果你对程序一无所知的话,建议你不要写。
如果你真的想写,建议你看一下算法导论里的《线性规划》
⑦ 求用C语言编写运筹学里面的单纯形法(是二阶段法),要可以执行,不要网上可以直接搜到的,
#include<stdio.h>
#include<math.h>
#include<iostream.h>
float matrix[100][100],x[100];
int a[100];
int m,n,s,type;
int indexe,indexl,indexg;
void Jckxj()
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<s;j++)
if(matrix[i][j]==1&&a[j]==1){
x[j]=matrix[i][s];
j=s;
}
for(i=0;i<s;i++)
if(a[i]==0) x[i]=0;
}
int Rj()
{
int i;
for(i=0;i<s;i++)
if(fabs(matrix[n][i])>=0.000001)
if(matrix[n][i]<0) return 0;
return 1;
}
int Min()
{
int i,temp=0;
float min=matrix[n][0];
for(i=1;i<s;i++)
if(min>matrix[n][i]){
min=matrix[n][i];
temp=i;
}
return temp;
}
void JustArtificial()
{
int i;
for(i=m+indexe+indexl;i<s;i++)
if(fabs(x[i])>=0.000001){
printf("No Answer\n");
return;
}
}
int Check(int in)
{
int i;
float max1=-1;
for(i=0;i<n;i++)
if(fabs(matrix[i][in])>=0.000001&&max1<matrix[i][s]/matrix[i][in])
max1=matrix[i][s]/matrix[i][in];
if(max1<0)
return 1;
return 0;
}
int SearchOut(int *temp,int in)
{
int i;
float min=10000;
for(i=0;i<n;i++)
if(fabs(matrix[i][in])>=0.000001&&(matrix[i][s]/matrix[i][in]>=0)&&min>matrix[i][s]/matrix[i][in]){
min=matrix[i][s]/matrix[i][in];
*temp=i;
}
for(i=0;i<s;i++)
if(a[i]==1&&matrix[*temp][i]==1) return i;
}
void Mto(int in,int temp)
{
int i;
for(i=0;i<=s;i++)
if(i!=in)
matrix[temp][i]=matrix[temp][i]/matrix[temp][in];
matrix[temp][in]=1;
}
void Be(int temp,int in)
{
int i,j;
float c;
for(i=0;i<=n;i++){
c=matrix[i][in]/matrix[temp][in];
if(i!=temp)
for(j=0;j<=s;j++)
matrix[i][j]=matrix[i][j]-matrix[temp][j]*c;
}
}
void Achange(int in,int out)
{
int temp=a[in];
a[in]=a[out];
a[out]=temp;
}
void Print()
{
int i,j,k,temp=0;
for(i=0;i<n;i++){
for(k=temp;k<s;k++)
if(a[k]==1){
printf("X%d ",k);
temp=k+1;
k=s;
}
for(j=0;j<=s;j++)
printf("%8.2f",matrix[i][j]);
printf("\n");
}
printf("Rj ");
for(j=0;j<=s;j++)
printf("%8.2f",matrix[n][j]);
printf("\n");
}
void InitPrint()
{
int i;
printf("X");
for(i=0;i<s;i++)
printf(" a%d",i);
printf(" b\n");
Print();
printf("\n");
}
void Result()
{
int i;
printf(" (");
for(i=0;i<s;i++)
printf("%8.2f",x[i]);
printf(" ) ");
if(type==1)
printf(" Zmax=%f\n\n",matrix[n][s]);
else printf(" Zmin=%f\n\n",matrix[n][s]);
}
void PrintResult()
{
if(type==0) printf("The Minimal :%f\n",-matrix[n][s]);
else printf("The Maximum :%f\n",matrix[n][s]);
}
void Merge(float nget[][100],float nlet[][100],float net[][100],float b[])
{
int i,j;
for(i=0;i<n;i++){
for(j=m;j<m+indexe;j++)
if(nget[i][j-m]!=-1) matrix[i][j]=0;
else matrix[i][j]=-1;
for(j=m+indexe;j<m+indexe+indexl;j++)
if(nlet[i][j-m-indexe]!=1) matrix[i][j]=0;
else matrix[i][j]=1;
for(j=m+indexe+indexl;j<s;j++)
if(net[i][j-m-indexe-indexl]!=1) matrix[i][j]=0;
else matrix[i][j]=1;
matrix[i][s]=b[i];
}
for(i=m;i<m+indexe+indexl;i++)
matrix[n][i]=0;
for(i=m+indexe+indexl;i<s;i++)
matrix[n][i]=100;
matrix[n][s]=0;
}
void ProcessA()
{
int i;
for(i=0;i<m+indexe;i++)
a[i]=0;
for(i=m+indexe;i<s;i++)
a[i]=1;
}
void Input(float b[],int code[])
{
int i=0,j=0;
printf("The equator Variable and Restrictor\n");
cin>>m>>n;
for(i=0;i<n;i++){
printf("Input b[] and Restrictor code 0:<= 1:= 2:>=\n");
cin>>b[i]>>code[i];
printf("The XiShu\n");
for(j=0;j<m;j++)
cin>>matrix[i][j];
}
printf("The Type 0:Min 1:Max \n");
do{
cin>>type;
if(type!=0&&type!=1) printf("Error,ReInput\n");
}while(type!=0&&type!=1);
printf("The Z\n");
for(i=0;i<m;i++)
cin>>matrix[n][i];
if(type==1)
for(i=0;i<m;i++)
matrix[n][i]=-matrix[n][i];
}
void Xartificial()
{
int i,j,k;
if(indexg!=0){
for(i=m+indexe+indexl;i<s;i++){
for(j=0;j<n;j++)
if(matrix[j][i]==1){
for(k=0;k<=s;k++)
matrix[n][k]=matrix[n][k]-matrix[j][k]*100;
j=n;
}
}
}
}
void Process(float c[][100],int row,int vol)
{
int i;
for(i=0;i<n;i++)
if(i!=row) c[i][vol]=0;
}
void Sstart(float b[],int code[])
{
int i;
float nget[100][100],nlet[100][100],net[100][100];
indexe=indexl=indexg=0;
for(i=0;i<n;i++){
if(code[i]==0){nlet[i][indexl++]=1; Process(nlet,i,indexl-1);}
if(code[i]==1){ net[i][indexg++]=1; Process(net,i,indexg-1); }
if(code[i]==2){
net[i][indexg++]=1;
nget[i][indexe++]=-1;
Process(net,i,indexg-1); Process(nget,i,indexe-1);
}
}
s=indexe+indexl+indexg+m;
Merge(nget,nlet,net,b);
ProcessA();
InitPrint();
Xartificial();
}
void Simplix()
{
int in,out,temp=0;
while(1){
Jckxj();
Print();
Result();
if(!Rj()) in=Min();
else {
if(indexg!=0) JustArtificial();
PrintResult();
return;
}
if(Check(in)){
printf("No Delimition\n");
return;
}
out=SearchOut(&temp,in);
Mto(in,temp);
Be(temp,in);
Achange(in,out);
}
}
void main()
{
int code[100];
float b[100];
Input(b,code);
Sstart(b,code);
Simplix();
}
还满意吗,佳逼!!!!!!!!
⑧ c语言怎么编译出来
1 #include<stdio.h>
2 int main(){
3 int x,y,z,temp;
4 z=0;
5 temp=0;
6 for(x=0;x<=3000;x++){
7 for(y=0;y<=2500;y++){
8 if((2*x+3*y)-6000>0) continue;
9 else
10 if((x+6*y)-15000>0) continue;
11 temp=1500x+2000y;
12 if(temp>z) z=temp;
13 }
14 }
15 printf("%d\n",z);
16 return 0;
17 }
~
我说他们的范围都没取对 你信不
z=450000
⑨ C语言中迭代法可以解决哪些问题举三个以上例子
int a;
double b;
long double c;
float d;
char e;
scanf("%d %lf %Lf",&a,&b,&c) //输入int型变量a,double型变量b,long double型变量c,并依" "(空格)做为间隔
scanf("%f,%c",&d,&e) //输入float型变量d,char型变量e,并依","(逗号)做为间隔.
还有%o,%x分别为输入8进制,16进制,还有很多,自己查网络资料吧.学C不需要太了解内部函数,知道如何用就OK了.不然越学越乱.
⑩ 运筹学问题用c语言或Java求解
单纯形法解线性规划的C源码,注释很清楚了:
#include<stdio.h>
#include<math.h>
#include<iostream.h>
float matrix[100][100],x[100]; /* 记录总方程的数组,解的数组 */
int a[100]; /* 记录基础,非基础的解的情况,0:非基础,1:基础 */
int m,n,s,type; /* 方程变量,约束数,求最大最小值的类型,0:最小 1:最大 */
int indexe,indexl,indexg; /* 剩余变量,松弛变量,人工变量 */
void Jckxj()
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<s;j++)
if(matrix[i][j]==1&&a[j]==1){
x[j]=matrix[i][s];
j=s;
}
for(i=0;i<s;i++)
if(a[i]==0) x[i]=0;
}
int Rj()
{
int i;
for(i=0;i<s;i++)
if(fabs(matrix[n][i])>=0.000001)
if(matrix[n][i]<0) return 0;
return 1;
}
int Min()
{
int i,temp=0;
float min=matrix[n][0];
for(i=1;i<s;i++)
if(min>matrix[n][i]){
min=matrix[n][i];
temp=i;
}
return temp;
}
void JustArtificial()
{
int i;
for(i=m+indexe+indexl;i<s;i++)
if(fabs(x[i])>=0.000001){
printf("No Answer\n");
return;
}
}
int Check(int in)
{
int i;
float max1=-1;
for(i=0;i<n;i++)
if(fabs(matrix[i][in])>=0.000001&&max1<matrix[i][s]/matrix[i][in])
max1=matrix[i][s]/matrix[i][in];
if(max1<0)
return 1;
return 0;
}
int SearchOut(int *temp,int in)
{
int i;
float min=10000;
for(i=0;i<n;i++)
if(fabs(matrix[i][in])>=0.000001&&(matrix[i][s]/matrix[i][in]>=0)&&min>matrix[i][s]/matrix[i][in]){
min=matrix[i][s]/matrix[i][in];
*temp=i;
}
for(i=0;i<s;i++)
if(a[i]==1&&matrix[*temp][i]==1) return i;
}
void Mto(int in,int temp)
{
int i;
for(i=0;i<=s;i++)
if(i!=in)
matrix[temp][i]=matrix[temp][i]/matrix[temp][in];
matrix[temp][in]=1;
}
void Be(int temp,int in)
{
int i,j;
float c;
for(i=0;i<=n;i++){
c=matrix[i][in]/matrix[temp][in];
if(i!=temp)
for(j=0;j<=s;j++)
matrix[i][j]=matrix[i][j]-matrix[temp][j]*c;
}
}
void Achange(int in,int out)
{
int temp=a[in];
a[in]=a[out];
a[out]=temp;
}
void Print()
{
int i,j,k,temp=0;
for(i=0;i<n;i++){
for(k=temp;k<s;k++)
if(a[k]==1){
printf("X%d ",k);
temp=k+1;
k=s;
}
for(j=0;j<=s;j++)
printf("%8.2f",matrix[i][j]);
printf("\n");
}
printf("Rj ");
for(j=0;j<=s;j++)
printf("%8.2f",matrix[n][j]);
printf("\n");
}
void InitPrint()
{
int i;
printf("X");
for(i=0;i<s;i++)
printf(" a%d",i);
printf(" b\n");
Print();
printf("\n");
}
void Result()
{
int i;
printf(" (");
for(i=0;i<s;i++)
printf("%8.2f",x[i]);
printf(" ) ");
if(type==1)
printf(" Zmax=%f\n\n",matrix[n][s]);
else printf(" Zmin=%f\n\n",matrix[n][s]);
}
void PrintResult()
{
if(type==0) printf("The Minimal :%f\n",-matrix[n][s]);
else printf("The Maximum :%f\n",matrix[n][s]);
}
void Merge(float nget[][100],float nlet[][100],float net[][100],float b[])
{
int i,j;
for(i=0;i<n;i++){
for(j=m;j<m+indexe;j++)
if(nget[i][j-m]!=-1) matrix[i][j]=0;
else matrix[i][j]=-1;
for(j=m+indexe;j<m+indexe+indexl;j++)
if(nlet[i][j-m-indexe]!=1) matrix[i][j]=0;
else matrix[i][j]=1;
for(j=m+indexe+indexl;j<s;j++)
if(net[i][j-m-indexe-indexl]!=1) matrix[i][j]=0;
else matrix[i][j]=1;
matrix[i][s]=b[i];
}
for(i=m;i<m+indexe+indexl;i++)
matrix[n][i]=0;
for(i=m+indexe+indexl;i<s;i++)
matrix[n][i]=100;
matrix[n][s]=0;
}
void ProcessA()
{
int i;
for(i=0;i<m+indexe;i++)
a[i]=0;
for(i=m+indexe;i<s;i++)
a[i]=1;
}
void Input(float b[],int code[])
{
int i=0,j=0;
printf("The equator Variable and Restrictor\n"); /* 输入方程变量和约束数 */
cin>>m>>n;
for(i=0;i<n;i++){
printf("Input b[] and Restrictor code 0:<= 1:= 2:>=\n"); /* 输入方程右边的值,code的值 */
cin>>b[i]>>code[i];
printf("The XiShu\n");
for(j=0;j<m;j++)
cin>>matrix[i][j]; /* 输入方程 */
}
printf("The Type 0:Min 1:Max \n"); /* 输入求最大值还是最小值 */
do{
cin>>type;
if(type!=0&&type!=1) printf("Error,ReInput\n");
}while(type!=0&&type!=1);
printf("The Z\n"); /* 输入z */
for(i=0;i<m;i++)
cin>>matrix[n][i];
if(type==1)
for(i=0;i<m;i++)
matrix[n][i]=-matrix[n][i];
}
void Xartificial()
{
int i,j,k;
if(indexg!=0){
for(i=m+indexe+indexl;i<s;i++){
for(j=0;j<n;j++)
if(matrix[j][i]==1){
for(k=0;k<=s;k++)
matrix[n][k]=matrix[n][k]-matrix[j][k]*100;
j=n;
}
}
}
}
void Process(float c[][100],int row,int vol)
{
int i;
for(i=0;i<n;i++)
if(i!=row) c[i][vol]=0;
}
void Sstart(float b[],int code[])
{
int i;
float nget[100][100],nlet[100][100],net[100][100]; /* 剩余变量数组,松弛变量数组,人工变量数组 */
indexe=indexl=indexg=0;
for(i=0;i<n;i++){
if(code[i]==0){nlet[i][indexl++]=1; Process(nlet,i,indexl-1);}
if(code[i]==1){ net[i][indexg++]=1; Process(net,i,indexg-1); }
if(code[i]==2){
net[i][indexg++]=1;
nget[i][indexe++]=-1;
Process(net,i,indexg-1); Process(nget,i,indexe-1);
}
}
s=indexe+indexl+indexg+m;
Merge(nget,nlet,net,b); /* 合并 */
ProcessA(); /* 初始化a[] */
InitPrint(); /* 初始化打印 */
Xartificial(); /* 消去人工变量 */
}
void Simplix() /* 单纯型算法 */
{
int in,out,temp=0;
while(1){
Jckxj(); /* 基础可行解 */
Print(); /* 打印 */
Result(); /* 打印结果 */
if(!Rj()) in=Min(); /* 求换入基 */
else {
if(indexg!=0) JustArtificial(); /* 判断人工变量 */
PrintResult(); /* 打印最后结果 */
return;
}
if(Check(in)){ /* 判断无界情况 */
printf("No Delimition\n");
return;
}
out=SearchOut(&temp,in); /* 求换出基 */
Mto(in,temp); /* 主元化1 */
Be(temp,in); /* 初等变换 */
Achange(in,out); /* 改变a[]的值 */
}
}
void main()
{
int code[100]; /* 输入符号标记 */
float b[100]; /* 方程右值 */
Input(b,code); /* 初始化 */
Sstart(b,code); /* 化标准型 */
Simplix(); /* 单纯型算法 */
}