如何用matlab解决这个问题?

2024-05-19 02:19

1. 如何用matlab解决这个问题?

题主给出的问题属于最优的线性规划问题,如何来求解呢?
下面给出其求解思路:
1、明确线性规划问题的函数式,即
max 0.6x+0.8y  %超市获得最大利润
st. x+y≤2   %问题不应该是x+y>2,如是x+y=2.5
x≤1,y≤1.5
2、使用fmincon函数来求解其线性规划问题。即
[k,fval] = fmincon(@(k) myfun(k),k0,[],[],[],[],lb,ub,@(k) mycon(k));
这里,x=k(1),y=k(2),myfun(k)——自定义目标函数,mycon(k)——自定义约束条件函数,lb——x,y的下限,ub——x,y的上限
3、自定义目标函数myfun(),其内容
fx=-(0.6*x+0.8*y); 
4、自定义约束条件函数mycon(),其内容
c=(x+y)-2;  %不等式条件
5、x,y的下限,lb=[0,0];
6、x,y的上限,ub=[1,1.5];
7、按上述思路完善程序,并运行可以得到如下结果。(问题一)


如何用matlab解决这个问题?

2. matlab 问题

clear all;
clc;
I1=imread('D:\ebook\ref.bmp');
I2=imread('D:\ebook\swt.bmp');
unregistered =I2;%%未配准图像
rect=I1;%%参考图像
cpselect(unregistered(:,:,1),rect);%%%选择点对,选完后记得保存
uiwait(msgbox('Click OK after closing the CPSELECT window.','Waiting...'))
input_points_corr= cpcorr(input_points,base_points,unregistered,rect);
tform = cp2tform(input_points_corr,base_points,'linear conformal');%%仿射变换
registered = imtransform(unregistered,tform,'XData',[1 300], 'YData',[1 300]);%%对图像进行重采样
H.Position=[232 258 600 402];
figure(H)
subplot(2,2,1)
imagesc(rect)
title('Original image 1')
subplot(2,2,3)
imagesc(unregistered)
title('Unmatched image 2')
subplot(2,2,2)
imagesc(rect)
title('Original image 1')
subplot(2,2,4)
imagesc(registered)
title('Matched image 2')
colormap (gray)
步骤:
1 运行程序,在input里点一个点,在base里在大概相等的位置点一个点,这个两个点构成点对;
2 选取三对以上的点(仿射变换,至少需要三对点);
3 选完后,点file -save points to workspace ,然后再点击ok按钮;
这函数不是很好,你选取的点对位置差不多的话,配准较好,差的远的话,配准会失效;

3. matlab问题

这时候把3种情况name为b的序号值保存进数据库,下次刷新排序之后的结果看起来是没有问题的
但这玩意用久了,也就是说给管理员拖了很多次b的数据之后会不停的上下相加然后相除,虽然序号我定义的是double类型,但已经去到-28E位数,记得到-32E就会超出double的长度。所以我觉得我这样做是绝对只能是用一时的半成品,功能的要求又想实时拖拽,实时保存进数据库,而不想点击按钮来统一保存。

matlab问题

4. matlab 问题

经过[a,b]=meshgrid(a,b);后,
矩阵a为:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

矩阵b为:
2 2 2 2 2 2 2 2 2 2
7 7 7 7 7 7 7 7 7 7
12 12 12 12 12 12 12 12 12 12
17 17 17 17 17 17 17 17 17 17
c=a+b,则c为:
3 4 5 6 7 8 9 10 11 12
8 9 10 11 12 13 14 15 16 17
13 14 15 16 17 18 19 20 21 22
18 19 20 21 22 23 24 25 26 27
idx=c<9;  其中:c<9是逻辑运算,为真,则idx相应的元素为1,否则为0
则:
矩阵idx:
1             1               1              1               1               1             0              0              0              0
1            0               0               0               0               0             0              0              0              0
0            0               0               0               0               0             0              0              0              0
0            0               0               0               0               0             0              0              0              0
a(idx),idx是逻辑值,即只取idx为真的,a中对应的值

5. matlab问题

加上类似这些参数:
axes( 'Position',[-20,-4,40,8])

matlab问题

6. matlab问题

1.0e+003
就是说10的三次方
1.0e+003 *     0.1368  0.0000  -9.7100  -0.0199 
的意思是说,得到的结果是:
下面四个数各自乘以10的三次方.

7. matlab问题

错误两处:
1.函数文件不能直接运行,而要输入函数名和参数使用。
2.最后count和total有误。

下面是我写的函数和运行结果:
function [count,total] = test7_1(a,b)
%a b 均为整数。
d1 = a:b-1;
d2 = a+1:b;
c = d1.*d2-1;
b = isprime(c);
count = sum(b);
total = sum(c(find(b == 1)));

结果:
>> [count,total] = test7_1(2,100)

count =

    48


total =

      128044

matlab问题

8. matlab问题

对于xy范围的问题,看你怎么理解你设立的坐标体系,如果x有正有负,则正表示顺风距离,负表示逆转风向的顺风距离,根据你的这个公式绝不会计算出逆风向气体浓度,就是说,你站在上风口,烟囱在你的下风口,你站的这里的气体扩散浓度是算不出来,因为这个公式就是这么设计的,你必须在下风口才能计算出浓度,这是公式的原本的设计,不管你如何编程都不可能得到它数学上都没有的结果。下面是遵照您的指示的程序和图,在我看来只算x取正的那部分就行了,另一半负的虽然和正的部分有一点偏差(极大值(x:-270;y:0;z:0.03146)和极大值(x:270;y:0;z:0.03232)z只相差0.00086),但基本是对称的。
 
 
clear all;[x,y]=meshgrid(-3000:30:3000,-3000:30:3000); %设定网格,下风向排放点距离x米,烟气中心轴水平距离y米
 
Q=2600;%源强,释放速度u=2.7;%风速H=80;
 
sigy=0.22*x./(sqrt(1+0.0001*x)+eps);%水平扩散系数sigz=0.2*x;%垂直扩散系数
 
Qpi=Q./(pi*u*sigy.*sigz+eps);%计算公式第一部分ex1=exp(-0.5*(y./(sigy+eps)).^2);%计算公式第二部分ex2=exp(-0.5*(H./(sigz+eps)).^2);%计算公式第三部分
C=Qpi.*ex1.*ex2;%计算扩散气体浓度
 
mesh(x,y,C);xlabel('x轴下风向距离(m)'),ylabel('y轴向距离(m)'),zlabel('气体扩散浓度'),